在 Python 中返回一个数字是否为布尔值的素数

Returning whether or not a number is prime as a Boolean in Python

对于上下文,我正在尝试使用 Python:

来解决 Project Euler problem 3

What is the largest prime factor of the number 600851475143?

作为第一步,我正在尝试编写一个函数,return判断一个数字是否为布尔值的素数。我做了第一次尝试,并检查了之前的写法。我最终得到了以下代码:

def isprime(x):
    limit = x**0.5
    i = 2

    if x < 2:
        return False
    elif x == 2:
        return True
    else:
        while i <= limit:
            if x%i == 0:          
                return False
                i = i + 1       
            else:
                return True

由于某些原因,上面的代码不能完美运行。例如,isprime(99) 将 return 为真。

拜托,有人可以帮助我理解为什么这不起作用吗?我试图避免只是复制和粘贴别人的代码,因为我想确切地了解这里发生了什么。

对我来说,问题似乎出在最后的 else 语句上。我这样说是因为逻辑读取 "in the event that x%i == 0, this number is not prime" 但它没有明确说明在没有 x%i 迭代 == 0.

的情况下该怎么做

如有任何帮助,我们将不胜感激!我不一定要寻找最干净、最简洁的方法,而更多的只是试图首先让这段代码工作。

试试这个:

def isprime(x):
    limit = x**0.5
    i = 2
    if x <= 2:
        return False

    while i <= limit:
        if x%i == 0:          
            return False      
        i = i + 1
    return True 

我改变了很多东西。请记住这一点,当您在 if 块的末尾 return 时,不需要 else 子句。

你需要知道当 x%i==0 条件不满足并且 i 的值保持不变时会发生什么,还需要查看当所有条件都不满足时,它是素数

# your code goes here
def isprime(x):
    limit = x**0.5
    i = 2

    if x < 2:
        return False
    elif x == 2:
        return True
    else:
        while i <= limit:
            if x%i == 0:         
                return False
            i+=1
    return True
print(isprime(144)) # false
print(isprime(99)) # false
print(isprime(131)) # true

只是为了展示一个替代方案,您可以做的是检查从数字 2 到您的数字,如果操作 (x % i) 等于零。如果它从未发生过,那将是一个素数。

def isprime(x):
   # check for factors
   for i in range(2,x):
       if (x % i) == 0:
           return False
   else:
       return True

print(isprime(99))