此python循环如何循环检查素数,如果它的循环数小于n?

问题描述 投票:0回答:2

大家好,我想知道这段代码如何:

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但要排除它?这个不是这样做,而是以某种方式起作用。请有人解释一下它为什么起作用。

python python-3.x primes
2个回答
1
投票

循环对从2到n的平方根的所有数字进行迭代。对于任何除数,它都可以在该平方根的上方找到(如果继续迭代到n - 1),则显然在其下方会有另一个除数。


1
投票

因为prime factorisation of any number n (by trial division) needs only check the prime numbers up to sqrt(n)

..此外,试验因素的适用范围不超过n因为,如果sqrt(n)可被某个数字sqrt(n)整除,则n和如果p小于n = p × q,则会更早地检测到qp或素数n整除。

在旁注中,审判庭检查原始性或可能的原始性很慢。有更快的概率测试,例如q,可以快速检查数字是否为整数或质数。

© www.soinside.com 2019 - 2024. All rights reserved.