在 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))
对于上下文,我正在尝试使用 Python:
来解决 Project Euler problem 3What 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))