求素数的一个快速算法 Python 快速输出素数算法

思想

100以内为例。

  1. 生成一个全是True101大小的数组
  2. 2开始,遇到2的倍数(4,6,8,10...)都赋值为False

    因为这些数字都有因子 2

  3. 3开始,遇到3的倍数(6,9,12...)都赋值为False

    因为这些数字都有因子 3

  4. 以此类推,把所有数字的倍数都赋值为False
  5. 输出值是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=" ")

改进

此算法有几个缺点:

  1. 除了2之外的偶数都是合数,因此,完全可以建一半大小的数组
  2. 3的倍数有126的倍数也是12, 这样两个的赋值就是重复的、无效的
posted @ 2018-10-26 18:33  何大卫  阅读(1114)  评论(0编辑  收藏  举报