大家好,我想知道这段代码如何:
def is_prime(n):
for i in range(2, int(n**.5 + 1)):
if n % i == 0:
return False
return True
能够在第2行上检查素数:for i in range(2, int(n**.5 + 1)):
范围不是:range(2, n)
?它是否不必遍历每个数字直到n
但要排除它?这个不是这样做,而是以某种方式起作用。请有人解释一下它为什么起作用。
循环对从2到n
的平方根的所有数字进行迭代。对于任何除数,它都可以在该平方根的上方找到(如果继续迭代到n - 1
),则显然在其下方会有另一个除数。
..此外,试验因素的适用范围不超过
n
因为,如果sqrt(n)
可被某个数字sqrt(n)
整除,则n
和如果p
小于n = p × q
,则会更早地检测到q
被p
或素数n
整除。
在旁注中,审判庭检查原始性或可能的原始性很慢。有更快的概率测试,例如q
,可以快速检查数字是否为整数或质数。