思想
以100
以内为例。
- 生成一个全是
True
的101
大小的数组 -
2
开始,遇到2的倍数(4,6,8,10...)都赋值为False
因为这些数字都有因子 2
-
3
开始,遇到3
的倍数(6,9,12...)都赋值为False
因为这些数字都有因子 3
- 以此类推,把所有数字的倍数都赋值为
False
- 输出值是
True
的数组下标
代码
""" 求100以内的素数 """
n = 100
l1 = [True for i in range(n+1)]
for i in range(2,n+1):
j=i+i
while j<n:
l1[j]=False
j = j + i
print("素数:")
for i in range(2,n):
if l1[i]==True:
print(i,end=" ")
改进
此算法有几个缺点:
- 除了
2
之外的偶数都是合数,因此,完全可以建一半
大小的数组 -
3
的倍数有12
,6
的倍数也是12
, 这样两个的赋值就是重复的、无效的