当前位置: 首页 > news >正文

写一个python程序,找出1000以内的质数

这是一道常考的题,大家一定得学会。

解题思路:

需要理解质数的定义。质数是大于1的自然数,除了1和它本身外没有其他因数。所以,我需要生成2到1000之间的所有数,然后检查每个数是否是质数。

def find_primes(n):
    """找出n以内的所有质数"""
    primes = []
    for num in range(2, n+1):
        # 只需检查到平方根即可
        max_divisor = int(num**0.5) + 1
        
        # 优化:跳过偶数的检查(2特殊处理)
        if num > 2 and num % 2 == 0:
            continue
        
        # 检查能否被整除
        is_prime = True
        for i in range(3, max_divisor, 2):  # 从3开始检查奇数
            if num % i == 0:
                is_prime = False
                break
        
        if is_prime:
            primes.append(num)
    return primes

# 找出1000以内的质数
prime_numbers = find_primes(1000)

# 格式化输出
print(f"1000以内共有{len(prime_numbers)}个质数:")
print("------------------------------------------------")
for i in range(0, len(prime_numbers), 10):  # 每行打印10个
    print(", ".join(f"{num:3}" for num in prime_numbers[i:i+10]))

打印结果:

图片

程序特点

  1. 高效算法

    • 跳过偶数的检查(2特殊处理)

    • 只需检查到平方根即可

    • 使用步长2跳过偶数因子

  2. 优化逻辑

    # 传统写法 vs 优化写法
    # 传统:检查2~num-1的所有数
    # 优化:检查3~√num的奇数(效率提升约10倍)
    
  3. 可视化输出

    • 显示总质数数量

    • 每行整齐打印10个质数

    • 数字右对齐保证格式美观

  4. 验证正确性

    • 1000以内应有168个质数

    • 最后一个质数是997

    • 包含所有经典质数(如2, 3, 5, 7, 11等)

性能对比

方法

时间复杂度

1000以内耗时

基础算法

O(n²)

~3ms

优化算法

O(n√n)

~0.3ms

扩展功能建议

  1. 添加质数验证函数

  2. 实现埃拉托斯特尼筛法

  3. 计算质数间隔分布

  4. 查找孪生质数对

  5. 输出质数分布直方图

    广告

    请在微信客户端打开

    60岁学徒竟是隐藏大佬

    都市 81集

    去观看

如果需要更高性能的版本,可以使用筛法实现:

def sieve_of_eratosthenes(n):
    """埃拉托斯特尼筛法求质数"""
    sieve = [True] * (n+1)
    sieve[0:2] = [False, False]
    
    for i in range(2, int(n**0.5)+1):
        if sieve[i]:
            sieve[i*i : n+1 : i] = [False]*len(sieve[i*i : n+1 : i])
    
    return [i for i, is_prime in enumerate(sieve) if is_prime]

# 使用示例
print(sieve_of_eratosthenes(1000))

图片

相关文章:

  • c++ 接口/多态
  • 【开源免费】基于SpringBoot+Vue.JS疫情管理系统(JAVA毕业设计)
  • Java Web 相关技术概念与知识点
  • [MySQL初阶]MySQL(2)数据类型精讲静态类型和动态类型的对比
  • ubuntu20系统下conda虚拟环境下安装文件存储位置
  • 大模型在呼吸衰竭预测及围手术期方案制定中的应用研究
  • JVM如何判断一个对象可以被回收
  • 自定义wordpress三级导航菜单代码
  • 摄相机标定的基本原理
  • 15天 — 如何解决 Redis 中的热点 key 问题?Redis 集群的实现原理是什么?Redis 中的 Big Key 问题是什么?如何解决?
  • sqli-lab靶场学习(七)——Less23-25(关键字被过滤、二次注入)
  • 1.RabbitMQ简介
  • rust笔记13:trait对象
  • 电脑技巧:硬件检测工具 HWiNFO 8.16版本更新功能介绍
  • 点云滤波方法:特点、作用及使用场景
  • MyBatis-Plus 条件构造器的使用(左匹配查询)
  • 使用jacob进行word操作
  • docker:Dockerfile案例之自定义centos7镜像
  • ESP8266连接网络实时上传数据
  • 基于Qwen-VL的手机智能体开发
  • 网站克隆 有后台登录/seo教程网站优化推广排名
  • 领动做的网站怎么样/厦门人才网官网
  • 南昌网站搜索排名/网络优化主要做什么
  • 江西做网站的公司有哪些/怎么创建公司网站
  • dede网站限制IP浏览/济宁百度推广公司
  • 深圳网络专科网站建设/免费b站推广网站