让F[n]
和P[n]
分别为n
斐波那契和素数。 n
有F[n] % P[n] = 0
的值k
。
让满足此条件的第一个n_1 < n_2 < ... < n_k
索引为k
。
我想计算第一个n_1 + ... + n_k
指数的总和(即k = 2
)。该程序适用于k = 5
但对def primelist(n):
prime = [True]*n
for p in range(3,n,2):
if p**2>n:
break
if prime[p]:
for i in range(p*p,n,2*p):
prime[i]=False
return [2]+[p for p in range(3,n,2) if prime[p]]
l= primelist(100000)
l.insert(0,0)
fib = [0,1]
for i in range(2,len(l)):
fib.append(fib[i-1]+fib[i-2])
k=0
sum_=0
i=1
while i<len(l):
if fib[i]%l[i]==0:
k=k+1
sum_=sum_+i
if k==5:
i=len(l)-1
i=i+1
print sum_
来说太慢(如下所示)。
有什么办法可以加快速度吗?
{{1}}
答案 0 :(得分:1)
这两个系列都是计算密集型的,换句话说,它并没有让我感到惊讶,因为它需要花费很多时间来计算值,特别是python是一种解释语言,这使得它在这些类型的计算中变得更慢。我建议您使用库numpy
进行所需的计算。它会使你的计算更快。
答案 1 :(得分:0)
首先,您应该重新定义变量,例如;
i+=1
不
i=i+1
第二个,元组进程比列表更快。因此,如果您不想更改任何内容,则可以使用元组而不是列表。
同样在本声明中;
for p in range(3,n,2):
if p**2>n:
break
如果p大于n的平方根,你可能想要做。所以你应该把那条线改为;
for p in range (3,int(n**0.5+1),2):