Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查素数:有素数吗?_Python - Fatal编程技术网

Python 检查素数:有素数吗?

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!!! 使用

你好,亲爱的社区

我被困在一件很容易的事情上,我想有时候你只是摆脱了它。总之,我写这篇文章是为了检查素数:

num=输入 如果num>1: 对于范围2中的i,num-1: 如果num%i==0: printnum,不是素数 打破 其他: printi,PRIME!!! 原始代码没有打印任何内容,但我遇到了问题,因此为了调试目的,我重写了它

不管怎样,它正确地识别了非素数,但打印出了素数,比如说7:

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,您可以给人们提供有用的答案,以感谢他们,并从所有答案中选择任何一个。