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)