Python 检查素数:有素数吗?
你好,亲爱的社区 我被困在一件很容易的事情上,我想有时候你只是摆脱了它。总之,我写这篇文章是为了检查素数: num=输入 如果num>1: 对于范围2中的i,num-1: 如果num%i==0: printnum,不是素数 打破 其他: printi,PRIME!!! 原始代码没有打印任何内容,但我遇到了问题,因此为了调试目的,我重写了它 不管怎样,它正确地识别了非素数,但打印出了素数,比如说7:Python 检查素数:有素数吗?,python,Python,你好,亲爱的社区 我被困在一件很容易的事情上,我想有时候你只是摆脱了它。总之,我写这篇文章是为了检查素数: num=输入 如果num>1: 对于范围2中的i,num-1: 如果num%i==0: printnum,不是素数 打破 其他: printi,PRIME!!! 原始代码没有打印任何内容,但我遇到了问题,因此为了调试目的,我重写了它 不管怎样,它正确地识别了非素数,但打印出了素数,比如说7: 7 2 PRIME!!! 3 PRIME!!! 4 PRIME!!! 5 PRIME!!! 使用
7
2 PRIME!!!
3 PRIME!!!
4 PRIME!!!
5 PRIME!!!
使用下面的逻辑查找数字是否为素数。这适用于python,因为for循环有一个else块,当循环在执行过程中没有中断时,该块将被执行,这意味着该数字是prime
if num > 1:
# Iterate from 2 to n / 2
for i in range(2, num//2):
# If num is divisible by any number between
# 2 and n / 2, it is not prime
if (num % i) == 0:
print(num, "is not a prime number")
break
else:
print(num, "is a prime number")
else:
print(num, "is not a prime number")
如果您关心较大数字的性能,最好使用平方根而不是数字地板分区2。因子大于平方根的任何数字也将有小于1的1 以下是一个常见的解决方案:
def check_for_prime(p_in):
is_prime = True
for n in range(2, int(p_in ** 0.5) + 1):
if p_in % n == 0:
is_prime = False
break
return is_prime
num = int(input(""))
if check_for_prime(num):
print(f'{num} is prime')
else:
print(f'{num} is not prime')
不是最注重性能的,但会完成工作,而且很简单
n = input("Enter a number to check if it is prime [returns True or False]: ")
n = int(n)
if n < 2:
quit()
if all(n % i for i in range(2, n)):
print(n, "PRIME!!!")
没有第三方模块,您可以通过以下方式轻松执行:
def is_prime(number):
return all(number % n for n in range(2, number))
这样,您可以检查:
指定数字之间的所有除法,以及介于2和数字前一个之间的任何数字
诀窍是考虑这样一个事实,如果任何数字%n给出0,这意味着它是一个倍数,所以它不能是素数,并且你会立即得到结果。
你只需要检查它是否可以被2整除,然后马上做出决定。当你第一次找到一个不可以被2整除的数字时,你就把它声明为素数。你需要等到你检查了所有可能的因素之后才能得出结论,这是最好的。但尽管如此,它至少应该报告4不是素数,当我运行它时,它就是这样做的,所以我不能复制您的示例输出。您甚至需要第一个else语句吗?难道这就是它自己的路线吗?如果这个数字不是素数,它无论如何都会跳出for循环。@Ewitch如果它不是素数,循环就会中断,并且随着你提议的更改,它会立即自相矛盾,说它是素数。所以,是的,它是需要的。@TomKarzes,没错,是的。我想知道Python如何处理:xxx-else:yyy语句?if语句中断时,for循环终止,代码前进到第一个else。这里检查的是什么语句?@peptinewitch如果在循环中执行中断,则不执行else。如果循环到达终点时没有执行中断,则执行else。这是一个重要的区别。否则你是对的,其他人也不会有什么不同。@TomKarzes谢谢你花时间解释这一点@mn2609关于Stackoverflow,您可以给人们提供有用的答案,以感谢他们,并从所有答案中选择任何一个。