【问题标题】:How does this python loop check for primality, if it loops less than the number n?如果这个 python 循环的循环小于数字 n,它如何检查素数?
【发布时间】:2020-05-08 11:22:23
【问题描述】:

大家好,我想知道这段代码是怎么回事:

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。这是纯粹的数学。合数的因数必须小于该数的平方根。
  • @Austin 哦,好的,谢谢

标签: python python-3.x primes


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    .. 此外,试验因素只需sqrt(n) 因为,如果n 可以被某个数字p 整除,那么n = p × q 和 如果q 小于p,则n 会更早被检测为 可以被qq 的素数整除。

    在旁注中,审判部门检查素数或可能的素数的速度很慢。有更快的概率测试,例如 Miller-Rabin test,它可以快速检查一个数字是合数还是可能是素数。

    【讨论】:

    • 因此,如果在 n % divisor == 0 到达范围 2 的末尾直到 sqrt(n) 之前找不到任何除数 n % divisor == 0 那么 n 是素数并且不需要检查更进一步?
    • @CodingGrind,没错
    猜你喜欢
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    相关资源
    最近更新 更多