一、素数的定义
质数(prime number)又称素数,有无限个。除了1和它本身以外不再有其他的除数整除。从定义知道;1不是素数,最小的素数是2。
二、N以内素数常用实现方法
首先教科书写法(暂时不做任何代码优化):
import math
def prime(n):
if n <= 1:
return 0
#for i in range(2,int(math.sqrt(n)+1)):
for i in range(2,n):
if n%i == 0:
return 0
return 1
if __name__ == "__main__":
n = int(input(">>"))
for i in range(2,n+1):
if prime(i):
print (i)
代码中注释行是取了[2,√n+1]作为除数范围,通过对比测试,显然,[2,√n+1]范围下,效率快了很多。
三、优化方法
原理层面
1、除了2以外,其余的偶数显然不可能是素数,再来看奇数,1不是素数,从3开始看,除了3以外,其余能被3整除的都是合数,再看5,除了5以外,其余能被5整除的都是合数,加起来,一共在[2,√n+1]范围内排除了近3/4的计算量。
2、另外使用埃拉托斯特尼筛法(希腊语:κόσκινον Ἐρατοσθένους