题目
算法思路
- 将长度为N+1的列表全赋值为1
- 首先将索引0和1处的值为0
- 然后遍历列表,将值为1处的索引的倍数索引值为0
- 最后剩下的值为1的索引就是素数
- 将索引值存入另一个列表
程序实现
def getPrime(N):
prime = []
flag = [1 for i in range(0,N+1)]
flag[0] = 0
flag[1] = 0
for i in range(1,N+1):
if flag[i] == 1:
step = i
for j in range(i+i,N+1,step):
flag[j] = 0 # 将是i索引倍数的值值为0
for i in range(len(flag)):
if flag[i] == 1:
prime.append(i)
return prime
测试用例
N = 30
prime = getPrime(N)
str1 = ''
for s in prime:
str1 = str1 + ' '+ str(s)
print(str1)