代码如下:
from math import sqrt
def hanshu(n):
for i in range(2,int(sqrt(n))+1):
if n%i==0:
return False
return True
print(hanshu(100))
代码输出:
False
注释:这个就没啥要说的了吧。
代码如下:
from math import sqrt
def hanshu(n):
ls,x,y=[True]*(n+1),2,int(sqrt(n))+1
while x<y:
for i in range(x*2,n+1,x):
ls[i]=False
x+=1
ls=[i for i in range(2,n+1) if ls[i]==True]
return ls
print(hanshu(100))
代码输出:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
注释:先创造一个含有(n+1)个元素的列表,标记它们全为质数。把下标为 2 的倍数列表元素标记为非质数(1倍除外),把下标为 3 的倍数列表元素标记为非质数(1倍除外),……,把下标为 int(sqrt(n)) 的倍数列表元素标记为非质数(1倍除外)。结束。
代码如下:
from math import sqrt
def hanshu(n):
ls,x,y=[True]*(n+1),2,int(sqrt(n))+1
while x<y:
if ls[x]==True:
for i in range(x*2,n+1,x):
ls[i]=False
x+=1
ls=[i for i in range(2,n+1) if ls[i]==True]
return ls
print(hanshu(100))
代码输出:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
注释:你自己想想啊。2的时候已经去掉了2的倍数,4的时候还要去掉4的倍数,这一步是不是很多余。所以欧拉筛法就是在埃式筛法的基础上加一句话 if ls[x]==True:
。
后记:好了,OVER,是不是很简单很粗暴。不太喜欢废话连篇。认为有用的话点个赞吧