质数,也叫素数,是大于 1 的自然数中,除了 1 和它自身外,不能被其他自然数整除的数。
质数的基本定义如下:
质数必须满足:
是大于 1 的自然数(2、3、5、7、11…)
正因数只有 1 和 它自己
与之相对的叫合数:大于 1,除了 1 和自身,还有其他因数。
1 既不是质数,也不是合数。
举例判断:
5:只能被 1、5 整除 → 质数
6:能被 1、2、3、6 整除 → 合数
9:能被 1、3、9 整除 → 合数
通过 for 循环判断指定的数能够被 2 ~ n-1 的数整除,如果可以,则不为质数。
示例代码:
def is_prime(num):
# 小于2的数不是质数
if num < 2:
return False
# 检查从 2 到 num-1 是否能整除
for i in range(2, num):
if num % i == 0:
return False
return True
# 测试
n = 29
if is_prime(n):
print(f"{n} 是质数")
else:
print(f"{n} 不是质数")运行结果:
29 是质数我们只需判断到 num 即可,不用遍历到 num-1,速度快很多。
示例代码:
import math
def is_prime(num):
if num < 2:
return False
if num == 2:
return True
if num % 2 == 0: # 偶数直接排除
return False
# 只检查奇数,且到平方根为止
max_divisor = int(math.sqrt(num)) + 1
for i in range(3, max_divisor, 2):
if num % i == 0:
return False
return True
# 测试多个数字
test_nums = [1, 2, 3, 10, 17, 29, 97, 100]
for n in test_nums:
print(f"{n:4d} → {'是质数' if is_prime(n) else '不是质数'}")运行结果:
1 → 不是质数
2 → 是质数
3 → 是质数
10 → 不是质数
17 → 是质数
29 → 是质数
97 → 是质数
100 → 不是质数下面通过极简的一行代码实现质数判断。
示例代码:
import math
# 定义质数判断函数(lambda 匿名函数)
# 判断逻辑:
# 1. n > 1:质数必须大于1
# 2. all(...):所有 2 ~ √n 之间的数都不能整除 n
# 3. range(2, int(math.sqrt(n)) + 1):遍历范围到 n 的平方根即可,提高效率
is_prime = lambda n: n > 1 and all(n % i != 0 for i in range(2, int(math.sqrt(n)) + 1))
# 调用函数判断 29 是否为质数
print(is_prime(29)) # True运行结果:
True