跳到主要内容

Python 程序检查素数

要理解这个示例,你需要了解以下Python编程主题的知识:

一个大于1的正整数,如果没有其他因子,除了1和它本身,就被称为素数。2、3、5、7等都是素数,因为它们没有其他因子。但6不是素数(它是合数),因为2 x 3 = 6

示例1:使用标志变量

# 程序:检查数字是否为素数
num = 29

# 从用户获取输入
# num = int(input("输入一个数字:"))
# 定义一个标志变量
flag = False

if num == 1:
print(num, "不是素数")
elif num > 1:
# 检查因子
for i in range(2, num):
if (num % i) == 0:
# 如果找到因子,设置标志为True
flag = True
# 跳出循环
break
# 检查标志是否为True
if flag:
print(num, "不是素数")
else:
print(num, "是素数")

输出

29是素数

在这个程序中,我们检查了num是否为素数。小于或等于1的数字不是素数。因此,我们只在num大于1时继续。

我们检查num是否能被2num - 1之间的任何数字整除。如果在该范围内找到一个因子,那么该数字不是素数,所以我们将flag设置为True并跳出循环。

在循环外,我们检查flagTrue还是False

  • 如果是Truenum不是素数。
  • 如果是Falsenum是素数。

注意:我们可以通过减少查找因子的范围来改进我们的程序。

在上述程序中,我们的搜索范围是从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

# 从用户获取输入
# num = int(input("输入一个数字:"))
if num == 1:
print(num, "不是素数")
elif num > 1:
# 检查因子
for i in range(2,num):
if (num % i) == 0:
print(num, "不是素数")
print(i, "乘以", num // i, "是", num)
break
else:
print(num, "是素数")

# 如果输入的数字小于
# 或等于1,它不是素数
else:
print(num, "不是素数")

输出

407不是素数
11乘以37是407

在这里,我们使用了for..else语句来检查num是否为素数。

它的逻辑是,只有在我们没有跳出for循环的情况下,for循环的else子句才会运行。这种情况只有在没有找到因子时才会满足,这意味着给定的数字是素数。

因此,在else子句中,我们打印该数字是质数。