j的范围有什么问题?

时间:2019-02-27 01:41:24

标签: python math

这是我在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)

2 个答案:

答案 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不会在素数上进行迭代,从而导致您面临错误。