验证输入数字是否为素数

问题描述 投票:0回答:5

尝试编写一个程序来检查一个数字是否为素数。 写了下面的代码,但不明白为什么我有两行输出:

num = int(input("Provide number to check if prime: "))
if num <=1:
    print("Invalid choice, try again")
    num = int(input("Provide number to check if prime: "))

for i in range(2,num):
    if num% i ==0:
        print("Number is not prime")
        break
    if num %i !=0:
        print("Number is prime")

我的输出是:

Provide number to check if prime: 15
Number is prime
Number is not prime
python python-3.x numbers primes
5个回答
5
投票

sympy.isprime()是SymPy模块下的内置函数,可用于检查可能的素数。它是一个直接函数,如果要检查的数字是质数则返回 True,如果要检查的数字不是质数则返回 False。

>>> import simpy
  
>>> sympy.isprime(8)

False

>>> sympy.isprime(11)

True

或者定义一个像这样的函数

>>> def isPrime(k):
    
    # 1 is not prime number
    if k==1:
        return False

    # 2, 3 are prime
    if k==2 or k==3: 
        return True

    # even numbers are not prime
    if k%2==0: 
        return False

    # check all numbers till square root of the number , 
    # if the division results in remainder 0
    # (skip 2 since we dont want to divide by even numbers)

    for i in range(3, int(k**0.5)+1, 2):
        if k%i==0:
            return False

    return True

>>> print(isPrime(13))

True

>>> print(isPrime(18))

False


1
投票

首先,您应该记住,根据定义,

1
不是素数,即使它不能被任何其他数字整除:

if (num == 1):
    print("The number is NOT prime")
else:
    for i in range(2, num):
        if (num%i == 0): # If the number has a divisor
            print("The number is NOT prime")
            break
    else: # If the for loop ends without reaching any break
        print("The number IS prime")

当循环结束而未到达任何

else
并且循环至少执行一次时,即到达
for
循环的
break
分支。

为了更好地理解我的答案,我建议阅读this


您的解决方案的错误是由于每次循环打印该数字都是素数而导致的

num%i == 0
,所以取
num = 6

6%4 != 0 # The number is prime
6%5 != 0 # The number is prime             

正如

Rajarshi Ghosh
所建议的,你应该知道,在编程时最好使用
import
ed函数来完成这些简单的操作,以避免如此简单的工作需要长时间操作。

如果您不想使用导入的函数,我建议您阅读这篇文章,其中他们解释了在不使用其他人制作的函数的情况下查找数字是否为素数的 6 种方法。


1
投票

您的输出存在问题,不仅对于

15
的情况,而且对于小于
1
的情况也是如此。下面的代码应该可以工作。它有两个改进。

  1. 它会打印 15 的正确输出。关键是移动
    else
    块以与
    for
    循环对齐。
  2. 它会打印任何小于 1 的数字的正确输出,该数字不是素数。关键是使用while-break方法让用户输入正确的数字,直到它大于1。
num = int(input("Provide number to check if prime: "))
while num <=1: #you need to use while loop
    print("Invalid choice, try again")
    num = int(input("Provide number to check if prime: "))
    if num > 1: #only evaluate number is prime or not if it is greater than 1
        for i in range(2,num):
            if num% i ==0:
                print("Number is not prime")
                break
        else: #to move the `else` block to align with the `for` loop.
            print("Number is prime")
        break #add a break here

输出:

enter image description here

什么是 while 循环? while 循环测试输入条件。每次循环结束时,都会重新评估条件(仅评估数字是否大于 1)。只要输入的数字是

<=1
,循环就会一直执行(不断要求用户输入)。


0
投票

如果您只想检查一个数字是否是素数,只需执行以下操作:

num = int(input("Provide number to check if prime: "))

flagNotPrime = False

if num > 1:
    for i in range(2, num):
        if (num % i) == 0:
            flagNotPrime = True
            break

if flagNotPrime:
    print("Number is not prime")

else:
    print("Number is prime")

首先,

<= 1
的数字不是素数。因此,只有当
num
大于 1 时,上述代码才会继续。

其次,代码检查

num
是否可以被 2 到
num - 1
之间的任意数字整除。如果该范围内有一个因子,则该数字不是质数,因此标志设置为
True
并使用
break
中断循环。

最后,在循环之外,如果标志是

True
那么
num
不是质数。


0
投票

#100到200之间的质数** def isprime(n): 如果 n<2: return False for i in range(2,int(n*.5)+1): if n%i==0: return False else: return True primenum=[x for x in range(100,201) if isprime(x)] print(primenum)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.