这是一个简单直观的检查它是否是 RECURSIVE 函数中的素数的版本! :)(我是作为麻省理工学院的家庭作业完成的)
在 python 中它运行得非常快,直到 1900。如果你尝试超过 1900,你会得到一个有趣的错误 :) (你想检查你的计算机可以管理多少个数字吗?)
def is_prime(n, div=2):
if div> n/2.0: return True
if n% div == 0:
return False
else:
div+=1
return is_prime(n,div)
#The program:
until = 1000
for i in range(until):
if is_prime(i):
print i
当然……如果你喜欢递归函数,这个小代码可以用字典来升级,以大大提高它的性能,并避免那个有趣的错误。
这是一个带有 MEMORY 集成的简单 1 级升级:
import datetime
def is_prime(n, div=2):
global primelist
if div> n/2.0: return True
if div < primelist[0]:
div = primelist[0]
for x in primelist:
if x ==0 or x==1: continue
if n % x == 0:
return False
if n% div == 0:
return False
else:
div+=1
return is_prime(n,div)
now = datetime.datetime.now()
print 'time and date:',now
until = 100000
primelist=[]
for i in range(until):
if is_prime(i):
primelist.insert(0,i)
print "There are", len(primelist),"prime numbers, until", until
print primelist[0:100], "..."
finish = datetime.datetime.now()
print "It took your computer", finish - now , " to calculate it"
这是结果,我打印了找到的最后 100 个素数。
时间和日期:2013-10-15 13:32:11.674448
有 9594 个素数,直到 100000
[99991,99989,99971,99961,99929,99923,99907,99901,9981,99877,99871,99859,99839,99859,99839,99833,99839,99823,99817,99823,99817,99809,99793,99787,99793,99787,99767,99787,99767,99787,99767,99787,99767,99787,99767,99761,99767,99761,99767,99761,99733, 99721,99719,99713,99779,99707,99689,99679,99667,99661,99643,99661,9961,99623,99619,99607,99581,99577,99581,99577,99581,99563,9959,99563,99559,99563,99559,99563,99559,99563,99559,99551,99529,99527,99529,99527,99523,99527,99523,99497,99523,99497,99487,99469, 99439,99431,99397,99391,99397,99391,99377,99371,99367,99349,99347,99349,99289,99277,99289,99277,99259,99257,99259,99257,99251,99241,99233,99223,99191,992223,99191,99181,99173,99149,9911,99149,99139, 99137,99133,99131,99119,99109,99103,99089,99083,99089,99083,99079,99053,99041,99023,99017,9903,99017,9993,98999,98993,98981,98993,98981,98963,98953,98947,98939,98947,98939,98929,98939,98929,98939,98929,98927,98929,98927,98911,98927,98911,98927,98911,98927,98911,98909, 98899, 98897] ...
你的电脑用了 0:00:40.871083 来计算它
所以我的 i7 笔记本电脑花了 40 秒来计算它。 :)