Python 素数检查

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

伙计们!

我有一个 Codecademy Python 课程练习,其中我必须检查传递的参数是否为素数。我的代码如下所示:

def is_prime(x):
    for n in range(2, x-1):
        if (x < 2):
            return False
        elif(x % n == 0):
            return True
        else:
            return False

在我看来,我已经涵盖了所有可能性,但它不断显示此错误:

Your function fails on is_prime(0). It returns None when it should return False.

据我所知,这属于第一个 if 条件。有人可以解释一下这怎么可能吗?

python error-handling primes
3个回答
4
投票

提示,当 x 为 0 时,

range(2, x-1)
里面有哪些数字?


2
投票

这个版本可能有效。

def is_prime(x):
    if (x < 2): 
        return False
    for n in range(2, x-1): 
        if(x % n == 0): 
            return False
    return True

0
投票

这里。 这有点快了。 它仅除以可能的素数。 它使用 6k±1 假设。所有大于 3 的素数都是 6(k)±1,因此 6(2)±1 是 11,13 6(6)±1 是 35,37 35 不是素数,但 for 循环 n%5 中的第一个除法测试将抓住所有这些。所有 6k±1 个数除以 6 后都会得到 1 或 5 作为余数。 e 可以用这一行消除 2/3 的数字。

def is_prime(n): 
    if n<=3: return n > 1
    if n%6 not in [1,5]: return False #check 6k±1
    for i in range(5,int(n**.5)+1,6): 
        if (n%i ==0 or n%(i+2)==0): return False
    return True
© www.soinside.com 2019 - 2024. All rights reserved.