筛法由2400多年前的埃拉托斯特尼发明而出。
埃拉托斯特尼是古希腊著名的数学家、地理学家、历史学家、诗人、天文学家,他最出名的成就就是他在当时的条件下测出了地球的周长。
他同时也发明了求素数的筛法。
这是我整理的一张思维导图,可以看一下。
更加具体的做法就是:
一、找出1到30之间的所有数
二、由于已知一不为素数,则划去1,得到2,3,4,5......29,30
三、找出所有2的倍数并划去,但保留2,得到2,3,5,7,9,11,13,15,17,19,21,23,25,27,29
四、找出所有3的倍数并划去,但保留3,得到2,3,5,7,11,13,17,19,23,25,29
五、以此类推分别从左往右挨个找数(找2,3,5,7,11......),不断划去它们的倍数,就可得出素数
代码解释:
N = int(input("请输入一个大于2的整数:"))
for i in range(2,N):
a = 1
for j in range(2,i):
if (i % j ) == 0:
a = 0
break
if a == 1:
print(i)
N可以显示你输入一个大于2的整数
然后重复执行2到N(你输入的数)次。
再重复一遍,次数:由2到i(第一次循环的i)。
如果再第二次循环中i除以j余数为0,也就是可以整除,则a就等于0
break可加可不加,主要用于加快运行速度
回到第一个循环当中,在二次循环时,如果没有成功整除,a也就没有变为0,则如果二次循环后a还是1,就代表这个数是素数,就会打印它。
结果:
请输入一个大于2的整数:150
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
101
103
107
109
113
127
131
137
139
149