这是我在python中的第一个代码,我完全不明白为什么第5个字符串中的代码必须包含math.sqrt(i))+1
而不是math.sqrt(i)
,因为否则会将质数的平方添加到结果。
如何解决这是最简单,最自然的方法?谢谢大家
import math
n=int(input("Print n: "))
prime_list=list(range(2,n))
for i in range(2,n):
for j in range (2, math.ceil(math.sqrt(i))+1):
if i % j == 0:
try:
prime_list.remove(i)
except:
j+=1
continue
print(prime_list)
答案 0 :(得分:1)
您需要j
才能贯穿i
的sqrt。请记住,Python范围不不包含终端值。
例如,range(2, 7)
不包括7
。要发现49不是素数,您需要range(2, 7+1)
,以便j
取值为7
。
答案 1 :(得分:1)
这是因为它是Python。
在Python中,语法range(x, y)
生成序列
x, x+1, x+2, ..., y-2, y-1
因此,如果要在范围中包含一个值,则第二个参数必须大于该值(不等于),这就是为什么应使用math.floor(...) + 1
并且不能省略+1
的原因部分。否则,当我是素数的平方时,j不会在素数上进行迭代,从而导致您面临错误。