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

python经典百题之求10000之内的素数

题目:求10000之内的素数

程序分析

求10000之内的素数是一个常见的问题。素数是大于1且只能被1和自身整除的整数。我们可以使用循环遍历10000以内的每个数,判断其是否是素数。

方法1: 简单遍历法

遍历2到10000之间的每个数,判断其是否为素数。从2开始,依次将当前数除以2、3、4、…、它本身的前一个数,若能被整除,则不是素数。

def is_prime(num):if num < 2:return Falsefor i in range(2, num):if num % i == 0:return Falsereturn Truedef find_primes_simple(limit):primes = []for i in range(2, limit + 1):if is_prime(i):primes.append(i)return primes# Find primes up to 10000
primes_simple = find_primes_simple(10000)
print("Prime numbers up to 10000:", primes_simple)

方法2: 优化遍历法

遍历2到10000之间的每个数时,只需判断是否能被2到sqrt(n)之间的数整除,可减少循环次数。

import mathdef is_prime(num):if num < 2:return Falsesqrt_num = int(math.sqrt(num))for i in range(2, sqrt_num + 1):if num % i == 0:return Falsereturn Truedef find_primes_optimized(limit):primes = []for i in range(2, limit + 1):if is_prime(i):primes.append(i)return primes# Find primes up to 10000
primes_optimized = find_primes_optimized(10000)
print("Prime numbers up to 10000:", primes_optimized)

方法3: 埃拉托斯特尼筛法

利用埃拉托斯特尼筛法可以更高效地找出素数。该方法是一种筛选法,从2开始,依次排除2的倍数、3的倍数、4的倍数,直至sqrt(n)。

def sieve_of_eratosthenes(limit):is_prime = [True] * (limit + 1)is_prime[0] = is_prime[1] = Falsep = 2while (p * p <= limit):if is_prime[p]:for i in range(p * p, limit + 1, p):is_prime[i] = Falsep += 1primes = [i for i in range(2, limit + 1) if is_prime[i]]return primes# Find primes up to 10000
primes_eratosthenes = sieve_of_eratosthenes(10000)
print("Prime numbers up to 10000:", primes_eratosthenes)

解题思路及优缺点

  • 简单遍历法:
    • 优点:
      • 简单易懂,实现直接。
    • 缺点:
      • 效率较低,需要对每个数都进行多次除法运算。
  • 优化遍历法:
    • 优点:
      • 减少了循环次数,只需判断2到sqrt(n)的数即可。
    • 缺点:
      • 仍然需要进行除法运算。
  • 埃拉托斯特尼筛法:
    • 优点:
      • 最高效的方法,只需进行一次筛选,不需要除法运算。
    • 缺点:
      • 需要额外空间存储每个数是否为素数。

总结推荐

推荐使用埃拉托斯特尼筛法,它是最高效的方法,只需要进行一次筛选即可找出素数。虽然需要额外的空间存储素数信息,但可以大大提高计算效率,特别是在大数范围内。

http://www.lryc.cn/news/175801.html

相关文章:

  • ROS2 从头开始:第 5 部分 - 并发、执行器和回调组
  • 笔试强训Day3
  • 软考软件设计师-存储管理-文件管理-计算机网络(中
  • Vue3的学习
  • 什么是Peppol ID?如何创建?
  • Spring注解大揭秘:@Component、@Service、@Repository详解
  • Innodb底层原理与Mysql日志机制
  • 浅谈大数据背景下用户侧用电数据在电力系统的应用与发展分析
  • 20230919在WIN10下使用python3将PDF文档转为DOCX格式的WORD文档
  • PCR检测试剂——博迈伦
  • spring一个项目多个模块聚合打包问题解决方案
  • Linux设备树(Device Tree)何时被解析
  • 【Elasticsearch】数据简单操作(二)
  • 4 vCPU 实例达成 100 万 JSON API 请求/秒的优化实践
  • 呼叫中心系统有什么优势
  • 如何在linux操作系统下安装nvm
  • Linux 入门:基本指令
  • IP转地理位置:探讨技术与应用
  • 关于埋点上报
  • 最新博客园图片上传接口,模拟实现图片上传
  • ROS2 从头开始:第 08/8回 - 使用 ROS2 生命周期节点简化机器人软件组件管理
  • Vue组件库Element
  • broadcast自动扩展
  • 【Pm4py第七讲】关于visualization
  • 通过 BigQuery 中的 11 个新链增强 Google Cloud 的区块链数据服务
  • C++笔记之文档术语——将可调用对象作为函数参数
  • 【Android知识笔记】FrameWork中的设计模式
  • 机器学习西瓜书+南瓜书吃瓜教程第三章学习笔记
  • JUnit5单元测试提示“Not tests were found”错误
  • C++ -- IO流