我一直在尝试编写一个程序,该程序将输入一个数字,然后检查它是否是素数.如果数字实际上是素数,我到目前为止编写的代码可以完美运行.如果该数字不是质数,则它的行为很奇怪.我想知道是否有人可以告诉我代码有什么问题.
I have been trying to write a program that will take an inputed number, and check and see if it is a prime number. The code that I have made so far works perfectly if the number is in fact a prime number. If the number is not a prime number it acts strange. I was wondering if anyone could tell me what the issue is with the code.
a=2 num=13 while num > a : if num%a==0 & a!=num: print('not prime') a=a+1 else: print('prime') a=(num)+1输入24时给出的结果是:不是素数不是素数不是素数素数
the result given when 24 is inputed is: not prime not prime not prime prime
我将如何通过报告每个奇数的质数而不是每个偶数的质数来解决错误
How would i fix the error with the reporting prime on every odd and not prime for every even
推荐答案一旦你知道一个数字不是质数,你就需要停止迭代.找到质数后添加 break 退出 while 循环.
You need to stop iterating once you know a number isn't prime. Add a break once you find prime to exit the while loop.
只需对代码进行最少的更改即可使其正常工作:
Making only minimal changes to your code to make it work:
a=2 num=13 while num > a : if num%a==0 & a!=num: print('not prime') break i += 1 else: # loop not exited via break print('prime')你的算法相当于:
for a in range(a, num): if a % num == 0: print('not prime') break else: # loop not exited via break print('prime')如果你把它扔到一个函数中,你可以省去break和for-else:
If you throw it into a function you can dispense with break and for-else:
def is_prime(n): for i in range(3, n): if n % i == 0: return False return True即使您要像这样对素数进行暴力破解,您也只需要迭代到 n 的平方根.此外,您可以跳过测试两个之后的偶数.
Even if you are going to brute-force for prime like this you only need to iterate up to the square root of n. Also, you can skip testing the even numbers after two.
有这些建议:
import math def is_prime(n): if n % 2 == 0 and n > 2: return False for i in range(3, int(math.sqrt(n)) + 1, 2): if n % i == 0: return False return True请注意,此代码无法正确处理0、1 和负数.
Note that this code does not properly handle 0, 1, and negative numbers.
我们通过使用带有生成器表达式的 all 来替换 for 循环来简化此操作.
We make this simpler by using all with a generator expression to replace the for-loop.
import math def is_prime(n): if n % 2 == 0 and n > 2: return False return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))更多推荐
Python质数检查器
发布评论