筛选法求素数

题目

给出一个数N,输出2-N之间的所有素数。

算法思路

  1. 将长度为N+1的列表全赋值为1
  2. 首先将索引0和1处的值为0
  3. 然后遍历列表,将值为1处的索引的倍数索引值为0
  4. 最后剩下的值为1的索引就是素数
  5. 将索引值存入另一个列表

程序实现

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 + '\t'+ str(s) 
print(str1)

image.png


posted @ 2020-05-17 22:01  sinlearn  阅读(278)  评论(0编辑  收藏  举报