python素数检查的难度

Oli*_*Oli 4 python primes

我一直试图让这段代码工作,将输入数字作为2到49之间的素数返回,但它所做的就是将大多数数字作为素数返回,即使它们不是......为了练习,我得到了无论如何,3,5和7都是素数,所以请忽略那一点......

def prime(a):
if a < 2: return False
if a % 2 == 0: return False
if a == 3 or a == 5 or a == 7: return True
for n in range(3,int(a ** 0.5) + 1): 
    if a % n == 0: return False
    if a % n != 0: return True

a = input("Enter a number between 1 and 49: ")

if prime(a) is False:
    print a, " is not a prime number"

if prime(a) is True:
    print a, " is a prime number"
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 5

for n in range(3,int(a ** 0.5) + 1): 
    if a % n == 0: return False
    if a % n != 0: return True  # This if condition is not needed
Run Code Online (Sandbox Code Playgroud)

你不需要那个第二条件.否则当数字不能被当前值整除时,它会立即返回n.但你不希望如此.如果当前n不能划分您的号码,您需要检查下一个值.

所以,只需删除if,并return True在循环结束后添加一个..

所以,你的prime()方法应该是这样的: -

def prime(a):
    if a < 2: return False
    if a % 2 == 0: return False
    if a == 3 or a == 5 or a == 7: return True
    for n in range(3,int(a ** 0.5) + 1): 
        if a % n == 0: return False

    return True
Run Code Online (Sandbox Code Playgroud)