验证输入数字是否为质数
Validate if input number is prime
正在尝试编写一个程序来检查一个数是否为素数。
写了下面的代码,但不明白为什么我有 2 行的输出:
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
首先,你应该记住 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")
当循环结束但未达到任何 break
且循环至少执行一次时,到达 for
循环的 else
分支。
为了更好地理解我的回答,我建议阅读 this。
你的解决方案的错误是由循环打印造成的,每次 num%i == 0
的数字都是素数,所以取 num = 6
:
6%4 != 0 # The number is prime
6%5 != 0 # The number is prime
正如 Rajarshi Ghosh
所建议的那样,您应该知道在编程时最好使用 import
ed 函数来执行此简单操作,以避免为这样一个简单的工作进行长时间操作。
如果您不想使用导入的函数,我建议您阅读 this article,他们解释了 6 种无需使用其他函数即可确定数字是否为质数的方法。
如果您只想检查一个数是否为质数,只需执行以下操作:
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
不是素数。
sympy.isprime() 是 SymPy 模块下的一个 built-in 函数,可用于检查可能的素数。它是一个直接函数,returns 如果要检查的数字是素数则为真,如果数字不是素数则为假。
>>> 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
您的输出有问题,不仅是 15
的情况,还有小于 1
的情况。下面的代码应该可以工作。它有两个改进。
- 它打印出 15 的正确输出。关键是移动
else
块以与 for
循环对齐。
- 它为任何小于 1 的非素数打印正确的输出。关键是使用 while-break method 让用户输入正确的数字,直到它大于 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
输出:
什么是 while 循环?
while 循环测试输入条件。每次循环结束时,都会重新评估条件(如果数字大于 1,则只评估数字是否为素数)。只要输入的数字是<=1
,循环就会一直执行(一直要求用户输入)。
正在尝试编写一个程序来检查一个数是否为素数。 写了下面的代码,但不明白为什么我有 2 行的输出:
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
首先,你应该记住 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")
当循环结束但未达到任何 break
且循环至少执行一次时,到达 for
循环的 else
分支。
为了更好地理解我的回答,我建议阅读 this。
你的解决方案的错误是由循环打印造成的,每次 num%i == 0
的数字都是素数,所以取 num = 6
:
6%4 != 0 # The number is prime
6%5 != 0 # The number is prime
正如 Rajarshi Ghosh
所建议的那样,您应该知道在编程时最好使用 import
ed 函数来执行此简单操作,以避免为这样一个简单的工作进行长时间操作。
如果您不想使用导入的函数,我建议您阅读 this article,他们解释了 6 种无需使用其他函数即可确定数字是否为质数的方法。
如果您只想检查一个数是否为质数,只需执行以下操作:
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
不是素数。
sympy.isprime() 是 SymPy 模块下的一个 built-in 函数,可用于检查可能的素数。它是一个直接函数,returns 如果要检查的数字是素数则为真,如果数字不是素数则为假。
>>> 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
您的输出有问题,不仅是 15
的情况,还有小于 1
的情况。下面的代码应该可以工作。它有两个改进。
- 它打印出 15 的正确输出。关键是移动
else
块以与for
循环对齐。 - 它为任何小于 1 的非素数打印正确的输出。关键是使用 while-break method 让用户输入正确的数字,直到它大于 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
输出:
什么是 while 循环?
while 循环测试输入条件。每次循环结束时,都会重新评估条件(如果数字大于 1,则只评估数字是否为素数)。只要输入的数字是<=1
,循环就会一直执行(一直要求用户输入)。