Python 阶段一综合案例之质数判断算法

通过前面的学习,本章将会通过一个综合案例进行巩固


一、质数判断算法

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

六、总结提升

  1. 掌握逻辑运算符的短路特性可提升代码效率

  2. 算法优化思路:

    • 减少不必要的计算(如排除偶数)
    • 缩小检查范围(平方根上限)
  3. 实际应用时建议:

    • 预处理小质数列表
    • 使用Miller-Rabin算法处理大数

最后通过本教程,您已具备实现基础算法的能力。下一步可尝试:

  • 实现埃拉托斯特尼筛法
  • 开发质数生成器类
  • 研究RSA加密算法中的质数应用
相关推荐
土司大王15 分钟前
LeetCode hot100——35.搜索插入位置:Java 二分模板、左闭右开区间与插入点分析
java·算法·leetcode
微三云生态系统架构师-彭丹32 分钟前
远方好物S2B2C系统架构:一级分销与保证金托管的合规技术实现
人工智能·算法
颜颜yan_33 分钟前
ESP-IDF 鸿蒙 PC 适配全记录:打通 Python、构建工具链与 ESP32-P4 固件生成
python·华为·harmonyos
言乐636 分钟前
Python加速器4跨境网络加速器
运维·服务器·开发语言·网络·python
土司大王37 分钟前
LeetCode hot100——34.在排序数组中查找元素的第一个和最后一个位置:Java 二分模板、边界分析
java·算法·leetcode
weixin_4407305043 分钟前
线程02-并发串行-互斥锁-Semaphore-Event
python·thread
金金计较.1 小时前
Go语言-3
java·开发语言·golang
张小凡vip2 小时前
python--爬虫--经验积累的遇到的坑
开发语言·爬虫·python
罗西的思考2 小时前
机器人模型(WM / WAM / VLA)综合分析与对比:从「看」到「想」再到「做」
人工智能·算法·机器学习
毕业设计7032 小时前
(免费领源码) 基于微信小程序的预制菜商城的设计与实现25172-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·python·mysql·微信小程序·pycharm·微信开发者工具·推荐算法