leetcode地址:https://leetcode-cn.com/problems/count-primes/

Day5:计数质数

一. 问题背景:

统计所有小于非负整数 的质数的数量。

二. 解决思路:

    埃拉托色尼筛选法:

先将(2,N)的各数放入表中,然后在 2 的上面画一个圆圈,然后划去 2 的其他倍数;第一个既未画圈又没有被划去的数是 3,将它画圈,再划去 3 的其他倍数;现在既未画圈又没有被划去的第一个数是 5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于N的各数都画了圈或划去为止。这时,表中画了圈的以及未划去的那些数正好就是小于 N 的素数。

转换为代码就是如果需要求<n的所有质数个数,则创建一个长度为n的整数数组,所有元素值变为1,1表示对应的索引值为质数,0表示对应的索引值为非质数。从2开始遍历,如果当前数字值为1,则获取其所有倍数,将元素值变为0(标记为非质数)。遍历完成后再次遍历数组,从2开始,记录元素为1的个数,即为对应的质数个数。

三. 算法实现:

#原方法
import numpy as npdef eratosthenes(n):p = np.ones(n, dtype=np.int8)for i in range(2, int(n**0.5 + 1)):if(p[i] == 1):p[i*i::i] = 0return p[2:].sum()result = eratosthenes(25)
print(result)#改进版,直接删去全部偶数
import numpy as npdef eratosthenes(n):if n < 3:return 0n = n >> 1p = np.ones(n, dtype=np.int8)i, j = 1, 3  #i表示位置,j表示位置实际代表的数,j=i*2+1while i < n**0.5:if p[i]:p[j**2 >> 1::j] = 0i, j = i + 1, j + 2     return p.sum()result = eratosthenes(25)
print(result)#不借助numpy,使用列表的方法
def countPrimes(n):if n < 3:return 0     else:# 首先生成了一个全部为1的列表output = [1] * n# 因为0和1不是质数,所以列表的前两个位置赋值为0output[0],output[1] = 0,0# 此时从index = 2开始遍历,output[2]==1,即表明第一个质数为2,然后将2的倍数对应的索引# 全部赋值为0. 此时output[3] == 1,即表明下一个质数为3,同样划去3的倍数.以此类推.for i in range(2,int(n**0.5)+1): if output[i] == 1:output[i*i:n:i] = [0] * len(output[i*i:n:i])# 最后output中的数字1表明该位置上的索引数为质数,然后求和即可.return sum(output)result = countPrimes(25)
print(result)

Day5:计数质数(埃拉托色尼筛选法)相关推荐

  1. 埃拉托色尼筛选法------筛选质数

    前戏:本篇介绍一种特定数据范围内统计该段数据内所有质数的高效算法,埃拉托色尼筛选法. 正文: 1.埃拉托色尼筛选法: 埃拉托色尼筛选法(the Sieve of Eratosthenes)简称埃氏筛法 ...

  2. c语言埃拉托色尼筛选法数组,埃拉托色尼筛选法 算法

    埃拉托色尼筛选法 埃拉托色尼选筛法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家埃拉托色尼(Eratosthenes 274B.C.-194B.C.)提出的一种筛选 ...

  3. 埃拉托色尼筛选法 C++实现

    在公元前3世纪,古希腊天文学家埃拉托色尼发现了一种找出不大于n的所有自然数中的素数的算法,即埃拉托色尼筛选法. 具体筛选步骤: 这种算法首先需要按顺序写出2到n中所有的数. 然后把第一个元素画圈,表示 ...

  4. [编程] 2 python 实现埃拉托色尼筛选法

    1.1简介: 埃拉托色尼筛选法是用来生成质数的经典计算机编程算法,一般用来衡量计算机的速度. 我们知道,质数是能被自己和1整除的整数. 2,3,5,7,11都是质数. 那么算法是如何实现质数的识别呢? ...

  5. 埃拉托色尼筛选法计算素数个数

    埃拉托色尼筛选法计算素数个数 素数:指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数. int main() {int MAXNUM = 1000; // 在这里以1000为例int n ...

  6. Java 埃拉托色尼筛选法

    埃拉托色尼筛选法 埃拉托色尼筛选法 概念 步骤 优化 代码 埃拉托色尼筛选法 概念 埃拉托色尼筛选法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家埃拉托色尼提出的一 ...

  7. python filter求素数-埃拉托色尼筛选法

    质数:只可以被两个数整除,1和该数本身: 埃拉托色尼筛选法说明; (1)先把1删除(现今数学界1既不是质数也不是合数) (2)读取队列中当前最小的数2,然后把2的倍数删去 (3)读取队列中当前最小的数 ...

  8. Java实现埃拉托色尼筛选法

    1 问题描述 Compute the Greatest Common Divisor of Two Integers using Sieve of Eratosthenes. 翻译:使用埃拉托色尼筛选 ...

  9. python算法设计 - 埃拉托色尼筛选法

    python算法设计源码:https://github.com/MakerChen66/Python3Algorithm 版权声明:原创不易,本文禁止抄袭.转载,侵权必究! 目录 一.埃拉托色尼筛选法 ...

最新文章

  1. mysql int 做排序_Mysql数据库按照varchar字符串类型排序和按照int整型类型排序的区别和注意点及解决方案...
  2. 改变2020年及未来的8大人工智能趋势
  3. postgresql中DML操作
  4. matlab手写遗传算法解决一元函数最值问题(实例)
  5. 七十六、Python | Leetcode二分查找和分治算法系列
  6. [BZOJ4815][CQOI2017]小Q的表格 数论+分块
  7. 程序猿 - 超实用的工具、素材、学习网站分享
  8. 【浏览器】浏览器下载CSV文件的方法
  9. 信奥中的数学:前缀和与差分、大整数开方技巧
  10. 百度Q2扭亏为盈 李彦宏发信勉励:变革带来阵痛 但能走得更稳更远
  11. linuxweb服务器域名网站,linux web服务器目录
  12. 推荐系统与GNN擦出的火花竟如此绚丽多彩
  13. ssh配置公钥_CentOS配置SSH免密登陆
  14. getAttribute实例例java,Java AttributedCharacterIterator.getAttribute方法代码示例
  15. Linux软链接的创建,删除,修改
  16. 用最火的python实现最常用、最靓、最实用图表~~
  17. 周爱民:详解架构的核心原则
  18. win10 C盘右边是OEM分区扩容的解决办法
  19. 三星Q950T全景声回音壁测试心得
  20. 计算机中的二进制实验报告,大学计算机-实验报告一.doc

热门文章

  1. vue时间转换为字符串
  2. 数据挖掘人员工作领域分为哪几类,各自需要掌握哪些知识?
  3. 工作票不宜使用计算机管理,什么情况下使用动火工作票
  4. 使用线性回归对身高体重数据集分析
  5. 处理QQ五笔(2.3.622.400)不能保存中文状态使用英文标点的问题
  6. miniGUI编译详细过程以及示例
  7. 命令行系列:cmd打开计算器、记事本、画图
  8. win10计算机查看用户组,Win10怎么查询用户组及组中用户
  9. Headroom.js 的使用
  10. C#调用百度翻译API实现自己的简单翻译工具