一个大于1的正整数,除了1和它本身以外没有其他因数,这个数就被称为素数(质数)。例如,2、3、5、7等都是素数,因为它们没有其他因数。但6不是素数(它是合数),因为 2 x 3 = 6
。
示例1:使用标志变量
# Program to check if a number is prime or not
num = 29
# To take input from the user
#num = int(input("Enter a number: "))
# define a flag variable
flag = False
if num == 0 or num == 1:
print(num, "is not a prime number")
elif num > 1:
# check for factors
for i in range(2, num):
if (num % i) == 0:
# if factor is found, set flag to True
flag = True
# break out of loop
break
# check if flag is True
if flag:
print(num, "is not a prime number")
else:
print(num, "is a prime number")
输出
29 is a prime number
在这个程序中,我们检查了 num 是否为素数。小于或等于1的数不是素数。因此,我们仅在 num 大于1时继续处理。
我们检查 num 是否能被从 2
到 num - 1
范围内的任何数整除。如果我们在该范围内找到一个因数,那么这个数就不是素数,于是我们将 flag 设置为 True
并跳出循环。
在循环之外,我们检查 flag
是 True
还是 False
。
- 如果它是
True
,num
就不是一个素数。 - 如果它是
False
,num
就是一个素数。
注意:我们可以通过减小寻找因数的数值范围来改进我们的程序。
在上面的程序中,我们的搜索范围是从2到 num - 1
。
我们可以使用 range(2,num//2)
或 range(2,math.floor(math.sqrt(num)+1))
。后一个范围基于这样一个事实:一个合数必定有一个小于或等于其平方根的因数。否则,这个数就是素数。
您可以更改上述源代码中变量 num 的值,以检查其他整数是否为素数。
在 Python 中,我们也可以使用 for...else
语句来完成这个任务,而无需使用额外的 flag
变量。
示例2:使用 for...else 语句
num = 407
# To take input from the user
#num = int(input("Enter a number: "))
if num == 0 or num == 1:
print(num, "is not a prime number")
elif num > 1:
# check for factors
for i in range(2,num):
if (num % i) == 0:
print(num,"is not a prime number")
print(i,"times",num//i,"is",num)
break
else:
print(num,"is a prime number")
# if input number is less than
# or equal to 1, it is not prime
else:
print(num,"is not a prime number")
输出
407 is not a prime number 11 times 37 is 407
这里,我们使用了 for..else
语句来检查 num
是否为素数。
它的工作原理是,for
循环的 else
子句仅在没有从 for
循环中 break
的情况下运行。这个条件只有在没有找到任何因数时才会满足,这意味着给定的数是素数。
因此,在 else
子句中,我们打印出该数是素数。
另请阅读