Fibonacci和Prime数字Python

时间:2014-12-30 16:03:27

标签: python math primes fibonacci

F[n]P[n]分别为n斐波那契和素数。 nF[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}}

2 个答案:

答案 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):