[英]checking prime number in python
我写了这个程序来检查天气。 是素数与否,但它多次显示该数字是素数。 我该如何解决
要检查天气,该数字是否为素数。
num = int(input("please enter the number you want to check\n"))
if num > 1:
for i in range(2, num):
if (num % i) == 0:
print("the number is not prime")
print(str(i) + " times " + str(num//i) + " is "+ str(num))
break
else:
print("the number is prime")
elif(num == 1):
print("the number is not prime")
else:
print('enter a positive value')
您的问题是 for 循环的else
部分是错误的。 每次除法检查失败时都打印"the number is prime"
,而不仅仅是在最后。
我添加了一个isPrime
布尔值来跟踪单个检查是否失败。 只有当它们都没有失败时,您才能打印该数字是素数。
num = int(input("please enter the number you want to check\n"))
if num > 1:
isPrime = True
for i in range(2, num):
if (num % i) == 0:
print("the number is not prime")
print(str(i) + " times " + str(num//i) + " is "+ str(num))
isPrime = False
break
if isPrime:
print("the number is prime")
elif(num == 1):
print("the number is not prime")
else:
print('enter a positive value')
您可以使用名为for-else的 python 构造进一步简化它(归功于@TheGamer007 ):
num = int(input("please enter the number you want to check\n"))
if num > 1:
for i in range(2, num):
if (num % i) == 0:
print("the number is not prime")
print(str(i) + " times " + str(num//i) + " is "+ str(num))
break
else:
print("the number is prime")
elif(num == 1):
print("the number is not prime")
else:
print('enter a positive value')
它之所以有效,是因为 Python 的for
-loops 可以有一个else:
以下,它仅在您不break
循环时才触发。
这可能正是您想要做的。 在那种情况下,您做错的只是缩进。
此外,从算法的角度来看,还有更好的检查方法。 第一个简单的改进是你不需要检查range(2,num)
,而只需要检查range(2, int(math.sqrt(num))+1)
这是我检查一个数字是否为素数的代码,希望对您有所帮助
# Program to Check whether given number is prime
def isPrime(number):
limit = int(number/2) # limit indicates how many times we need to run the loop
flag=0 # to keep track whether the number is prime or not
if number==0 or number==1:
print(f"The Given Number {number} is Not Prime")
return
for i in range(2,limit+1):
if number%i==0:
flag=1
break
if flag==0:
print(f"The Given Number {number} is Prime")
else:
print(f"The Given Number {number} is Not Prime")
isPrime(1)
使用变量,例如 flag 并将其初始化为 0。如果数字不是素数,即 i%2==0 将 flag 设置为 1 并中断,否则 flag = 0 。
之后从 for 块中出来,并借助 if 条件显示数字是否为素数。 也就是说,如果 flag==0 数字是素数,否则不是。
为了确定一个数是否为素数,您只需要找到一个大于或等于 2 的数来整除该数。
在您的循环中,您打印出一条消息,为每个不能整除给定数字的数字显示“该数字是质数”。
例如,如果您想检查数字 9 是否为质数,您将循环从 2 到 8 的所有数字并检查它们是否可以整除 9。因此在您的 for 循环中,例如数字 5 -> 9%5 != 0 -> "the number is prime" 消息会弹出,这是错误的。
下面的代码显示了当数字不是素数时如何使用布尔值来提升标志。
num = int(input("please enter the number you want to check\n"))
isPrime = True
while num < 1:
int(input("enter a positive value\n"))
if num == 1:
print("the number is not prime")
return
for i in range(2, num):
if (num % i) == 0:
isPrime = False
break
print(str(num) + " is prime? " + str(isPrime))
我建议以下实现
我们只需要检查/循环到数字的平方根而不是数字本身,因此速度更快。
for-else 结构使您摆脱了原本需要的isPrime
标志。 它的工作方式是,如果循环正常完成而没有中断(意味着您还没有找到您要找的else
),它就会进入else
import math
num = int(input("please enter the number you want to check\n"))
if num > 1:
for i in range(2, int(math.sqrt(num))+1):
if (num % i) == 0:
print("the number is not prime")
print(i, "times", num//i, "is", num)
break
else:
print("the number is prime")
else:
print("the number is not prime")
一种方法:
def is_prime(n):
count = 0
if x > 1:
for i in range(1, n + 1):
if x % i == 0:
count += 1
return count == 2
number = int(input("Insert a number: "))
if is_prime(number):
print(str(number) + " is a prime number")
else:
print(str(number) + " is not a prime number!")
is_prime(7) # >> 返回真
它是如何工作的:
质数 (n) 必须满足以下规则:
迭代执行从 1 到 n 的模数运算。 每次结果为 0 时递增变量计数。如果输入满足上面的第二个条件,则计数应等于 2。如果计数等于 2,则该数字为素数。
前任:
is_prime(7): 7 % 1 = 0 (count += 1), 7 % 2 = 1, 7 % 3 = 1, 7 % 4 = 3, 7 % 5 = 2, 7 % 6 = 1, 7 % 7 = 0(计数+= 1); >> 7 是素数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.