处理大量python 2.7(运行时错误)

处理大量python 2.7(运行时错误),python,algorithm,runtime,Python,Algorithm,Runtime,我必须制作一个程序,在下面的无限序列中找到第n个元素: 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1...... 所以在这里你可以看到“中心”的增量是一个,而“中心”的边元素相互反映,所以我们可以将这个序列分成几个小的组: [1][121][12321][1234321]..... 因此,任务是在给定n的序列中找到第n个元素。例如,我们将7作为输入,并且必须返回3,因为序列中的第7个元素是3。这里的问题是,当n超过10^15时,我的程序会显示运行时错误,而输入可能会大到1

我必须制作一个程序,在下面的无限序列中找到第n个元素:

1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1......
所以在这里你可以看到“中心”的增量是一个,而“中心”的边元素相互反映,所以我们可以将这个序列分成几个小的组:

[1][121][12321][1234321]..... 
因此,任务是在给定n的序列中找到第n个元素。例如,我们将7作为输入,并且必须返回3,因为序列中的第7个元素是3。这里的问题是,当n超过
10^15
时,我的程序会显示运行时错误,而输入可能会大到
10^100000
。这是我的密码:

n = int(input())
fin = n
number = long(1)
counter = long(0)
while n>0:
    n = n - number
    number = number+2
    counter = counter + 1
mid = long((counter-1)*(2+2*(counter-1))/2+1)

place = long(counter - abs(mid-fin))

if fin==0:
    print 0
else:
    print place

我们有几组数字:

[1] [1 2 1] [1 2 3 2 1] ...
k
组中的数字总数为:

1 + 3 + 5 + ... + k*2-1 
这是一个算术级数,它的和等于

(1 + k*2-1) * k / 2 = k^2
现在,让我们找出在序列中第n个数字之前的完整组数
k

k = ⌊sqrt(n-1)⌋
现在我们知道我们的第n个数字是在组编号
k+1
中,该组有
k*2+1
元素。让我们先放弃
k
组(它们有
k^2
编号),现在我们需要找到索引为
n-k^2
的编号。其值将等于
k+1-|n-k^2-(k+1)|
。对于相对较小的
n
我们可以使用以下代码:

n = int(input())
k = int(math.sqrt(n-1))
print(k+1 - abs(n-k*k - (k+1)))

但是看到
n大于9的中心会发生什么情况(假设数字在base9中)?换句话说,
12345678987654321
后面的顺序是什么?同样的模式:1234345678109764321非常感谢!但是你能解释一下这行吗:k=lsqrt(n-1)l?@arkang,
sqrt
-是一个数字的平方根,
⌊x⌋
x
四舍五入到最接近的整数。不幸的是,此代码对某些输入(未知)不起作用。但无论如何,非常感谢你的帮助@阿康,你能给我一个问题的链接吗?也许这个序列是以零为基础的?我认为与这个问题的链接将是无用的,因为它不是以英语为基础的),但我可以肯定地告诉你,任务中没有其他内容,序列也不是以零为基础的。