Python 爱筛法实现任意整数N以内的素数

  • 定义:
    Python 爱筛法实现任意整数N以内的素数_第1张图片
  • 核心实现
   for i in range(2, int(numpy.sqrt(n)) + 1):
       for j in range(2, n // 2):
           if i*j <= n and p[i*j] == 1:
               p[i*j] = 0

踩雷点:
第二层循环的范围也是(2, int(numpy.sqrt(n)) + 1)
一开始循环的结果是后面基本上依次输出了,但是前面还是对的
可是我,没有滑到前面去看!导致我浪费了很多时间!
后面分析为啥,大数不行,仔细一想,如果第二层也是(2, int(numpy.sqrt(n)) + 1),那当i =2时,最大能够到达的地方是2*numpy.sqrt(n)),这显然是不够的。
所以起码得让i=2时实现,因此第二层的范围为n//2,注意是//

  • 为了打素数表看起来不要那么多行 这里选择了十个一行

不换行。

  print(str(i)+' ', end='')

换行。

  print('\n')

源代码

import numpy


def prime(n):
    p = []
    for i in range(n+1):
        p.append(1)

    for i in range(2, int(numpy.sqrt(n)) + 1):
        for j in range(2, n // 2):
            if i*j <= n and p[i*j] == 1:
                p[i*j] = 0

    cum = 0
    for i in range(2, n+1):
        if p[i] > 0:
            print(str(i)+' ', end='')
            cum = cum + 1
            if cum % 10 == 0:
                print('\n')


a = int(input("输入数N:"))
prime(a)

你可能感兴趣的:(Python)