繁体   English   中英

在 Python 中返回一个数字是否为素数作为 Boolean

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

对于上下文,我正在尝试使用 Python 解决Project Euler 问题 3

数字 600851475143 的最大质因数是多少?

作为第一步,我正在尝试编写一个 function,它返回一个数字是否为素数作为 Boolean。 我做了第一次尝试,并检查了以前是如何编写的。 我最终得到了以下代码:

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)将返回 True。

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

对我来说,问题似乎出在最后的else语句上。 我这样说是因为逻辑上写着“如果x%i == 0 ,这个数字不是素数”,但它没有明确说明在没有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

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

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

print(isprime(99))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM