通过前面的学习,本章将会通过一个综合案例进行巩固
一、质数判断算法
1. 质数定义
- 大于1的自然数
- 只能被1和自身整除
- 最小质数是2
2. 基础实现
python
def is_prime_basic(n):
if n <= 1:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
# 测试
print(is_prime_basic(17)) # True
print(is_prime_basic(9)) # False
3. 优化实现(平方根法)
python
复制
import math
def is_prime_optimized(n):
if n <= 1:
return False
if n == 2:
return True
if n % 2 == 0:
return False
max_divisor = math.isqrt(n) + 1
for i in range(3, max_divisor, 2):
if n % i == 0:
return False
return True
# 性能对比
%timeit is_prime_basic(1000003) # 约 58 ms
%timeit is_prime_optimized(1000003) # 约 0.03 ms
二、算法流程图解
是 否 是 否 是 否 是 否 开始 n <= 1? 返回False n是2? 返回True 能被2整除? 返回False 计算平方根 遍历3到平方根奇数 发现因数? 返回False 返回True
三、常见错误分析
1. 边界处理错误
python
# 错误:未处理1和2的情况
def wrong_prime(n):
for i in range(2, n):
if n % i == 0:
return False
return True # 当n=2时会错误返回False
2. 循环范围错误
python
# 错误:range参数不正确
def wrong_range(n):
max_div = math.sqrt(n) # 应使用isqrt
for i in range(3, max_div): # 未+1可能漏检
四、扩展应用场景
1. 区间质数筛选
python
def find_primes(start, end):
return [n for n in range(start, end+1) if is_prime_optimized(n)]
print(find_primes(10, 50))
# [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
2. 质因数分解
python
def prime_factors(n):
factors = []
while n % 2 == 0:
factors.append(2)
n //= 2
i = 3
while i*i <= n:
while n % i == 0:
factors.append(i)
n //= i
i += 2
if n > 2:
factors.append(n)
return factors
print(prime_factors(84)) # [2, 2, 3, 7]
五、综合练习
1. 双质数验证
python
复制
def is_twin_prime(n):
return is_prime(n) and (is_prime(n+2) or is_prime(n-2))
print(is_twin_prime(17)) # True (17与19)
2. 回文质数检测
python
def is_palindrome_prime(n):
return str(n) == str(n)[::-1] and is_prime(n)
print(is_palindrome_prime(131)) # True
六、总结提升
-
掌握逻辑运算符的短路特性可提升代码效率
-
算法优化思路:
- 减少不必要的计算(如排除偶数)
- 缩小检查范围(平方根上限)
-
实际应用时建议:
- 预处理小质数列表
- 使用Miller-Rabin算法处理大数
最后通过本教程,您已具备实现基础算法的能力。下一步可尝试:
- 实现埃拉托斯特尼筛法
- 开发质数生成器类
- 研究RSA加密算法中的质数应用