理论依据:
任何大于等于1的数都可以表示为素数的乘积
这其实是素因式分解的唯一性定理。
若一个数n是素数,显然成立。
若n是合数,则必然可分解成大于1小于n的2个数的乘积,若均是素数,刚好得证,否则其中的合数可再分成范围更小的两个数的乘积,直到都是素数为止。所以n是合数时也成立。
综上得证。
注:0,1既不是素数也不是合数
所以不妨把从2开始的每一个结果作为除数,让下一个数来依次除以它们,如果都除不尽说明这个数就是素数了,再把它加入到素数集
import time
start = time.time()
sushu = [2]
for x in range(1,1000000):
if x<2:
continue
for i in range(0,len(sushu)):
if x%sushu[i] == 0:
break
else:
sushu.append(x)
print(sushu)
end = time.time()
print(end-start)
关于效率:
计算100000以内的素数用时6s出头,计算1000000以内的素数用时就比较久了,用了426s,至于要算更大数目以内的素数估计就不能用这个了