添加素数和斐波纳契数

时间:2013-01-03 21:27:52

标签: python numbers fibonacci

  

可能重复:
  Find out 20th, 30th, nth prime number. (I’m getting 20th but not 30th?) [Python]
  Fastest way to list all primes below N in python

素数:

P=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, …] 

斐波那契数字:

F=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …] 

我希望用户在(1,100000)和程序之间提供一个随机数,以汇总结果(F[n]+P[n]),例如n=3 F[3]+P[3]=7+2=9

我写了以下代码:

import math
def F(n):
    return int(((1+math.sqrt(5))**n-(1-math.sqrt(5))**n)/(2**n*math.sqrt(5)))
L=[]
L.append(2)
L=[]
for n in range(2, 10000):
    for x in range(2, n):
        if n % x == 0:
            break
    else:
        # loop fell through without finding a factor
        L.append(n)

while True:
    x = raw_input().strip()
    if x == "END" or x == "end":
        break
    else:
        num = int(x)
        print F(num)+L[num]

我很容易从def F(n)中找到Fib数字,但是创建素数列表实际上是一个令人头痛的原因,因为数字增加需要一些时间来创建列表,并且几乎可以不可能将n到达那些巨大的数字..我试图做一个def而不是创建列表但只是为了用户提供的n计算素数。任何想法??

提前谢谢你!

1 个答案:

答案 0 :(得分:1)

对于Prime Numbers,您可以实现多个primality tests。我喜欢天真的方法,检查到sqrt(n),还有Marcus Stuhr指出的Erathostenes筛子。如果仅检查奇数的素数,则可以稍微优化一下。