最近对简单的素性测试感兴趣。我有以下两个函数,它们返回给定输入之前的所有素数列表。我制作的第一个,另一个是基于维基百科的素性测试伪代码。然后,我将我的稍微修改为我认为最接近维基百科的。
当我给它们计时(输入/限制为 10000)时,我的时间比另一个长一个数量级。我不太清楚为什么,至于我,他们正在做非常相似的事情。我的检查一个带有“any”的素数列表,而wiki检查这些相同的数字,但使用while循环生成它们。我错过了什么?
def my_primality(lim):
count = 5
slbprimes = [2,3];
while count<lim:
if count%3==0:
pass
elif any(count%i==0 for i in slbprimes if i**2<=count):
pass
else:
slbprimes.append(count)
count+=2
return slbprimes
def evenbetter(lim):
count = 5
ebprimes=[2,3];
while count < lim:
if count%3==0:
count+=2
continue
i=5
while i**2<=count:
if count%i==0 or count%(i+2)==0:
count+=2
break
i=i+6
else:
ebprimes.append(count)
count+=2
return ebprimes