在 Python 中寻找素数

Finding prime numbers in Python

我需要编写一个函数,is_prime(),它接受一个整数 n > 1 和 returns TRUE 如果数字是质数和 False除此以外。但是当我输入2时,它总是returns False。有没有办法纠正这个问题?

def is_prime(x):
    if(x > 1):
        for i in range(2,x+1):
            if( x % i == 0):
                return False
            else:
                return True
    else:
        return False

两期:
第一个问题是范围包括数字本身,这意味着它总是 return true(对于数字 > 1),因为质数可以自除...

修复:将 range(2,x+1) 更改为:range(2, x)

第二个问题,第一个else应该与for对齐(我们return只有在尝试所有数字并确保其中none之后才正确除 x)

固定码:

def is_prime(x):
    if x > 1:
        for i in range(2,x):
            if x % i == 0:
                return False
        else:
            return True
    else:
        return False

尽管@alfasin 的解决方案是正确的 (+1),但我发现 else 的使用使理解起来更具挑战性。

for 循环中的 else 特别需要我重新阅读 Python 文档,因为大多数消息来源都说 else 意味着 no break但确实表示正常完成,在一个根本没有 运行 的循环!

这是我的修改,删除了并非严格需要的 else 语句:

def is_prime(x):
    if x > 1:
        for i in range(2, x):
            if x % i == 0:
                return False

        return True

    return False

正如其他人会指出的那样,这可能是您可以编写的最低效的主要测试。但它有效。

除此之外,您还可以使用 SymPy 模块

import sympy

sympy.isprime(5)

结果:

True