本文主要介绍的是“埃氏筛法”。

素数筛法的关键在于一个“筛”字。其基本思路是,从2开始,对所有的素数,筛去它所有的倍数。我们唯一需要知道的是2是一个素数。

设置一个整型数组prime[],用来装对应的素数,一个布尔型数组p[],判断每一个数是否为素数,是的话就是false,不是的话值为true。设置一个pNum统计素数的个数。

从2开始,因为2是素数,所以把2装进prime,并将2的倍数,4,6,8,10…所对应的p[2],p[4],p[8],p[10]…的布尔值全部改为true。pNum的值加1。
接下来是3,p[3]此时的值依然是false,则把3装进prime,并将3的倍数,6,9,12…对应的p[6],p[9],p[12]…的布尔值改为true。pNum的值加1。
接下来是4,p[4]此时的值是true,说明它不是素数。
接下来是5,p[5]此时的值是false,说明它是素数,则将5的倍数,10,15,20…对应的p[10],p[15],p[20]…的值改为true,pNum的值加1。

接下来的过程也是类似的。从小到大遍历到某数a的时候,若p[a]还是false,表示a并没有被筛去,也就是说小于a的数中没有a的因子,所以a就一定是一个素数。

最后附上本文的Java代码。

public class FindPrime {final int maxn = 10000001;int[] prime = new int[maxn];int pNum = 0;boolean[] judge = new boolean[maxn];public void init(){for(int i = 0;i < maxn;i++)judge[i] = false;}public void findPrime(){for(int i = 2;i < maxn;i++){if(judge[i] == false){pNum++;for(int j = i + i;j < maxn;j += i){judge[j] = true;}}}}public static void main(String[] args){//System.out.println(Integer.MAX_VALUE);FindPrime findPrime = new FindPrime();findPrime.findPrime();System.out.println(findPrime.pNum);}
}

总个数应为664579个。

求一千万以内的所有素数的个数相关推荐

  1. 求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序进行排序

    已知数据文件IN14.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中.请编制一个函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再把所有满足此 ...

  2. C语言求一万以内的超级素数,用C语言求素数的优化.doc

    用C语言求素数的优化 用C语言求素数的优化 这个程序运行了8个小时,求一亿以内的素数和超级素数. 大家帮忙看看,我求一亿以内的素数和超级素数.从下午5:30开始,一直到零晨0点30才结束.我的电脑配置 ...

  3. 【千律】C++基础:求出M以内的全部素数-方案1

    质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数. 求解思路:对于任意大于1的正整数M,若采用该正整数M对全部小于等于M的正整数进行除法运算,若仅存在两次整除,则该数M为素 ...

  4. C语言求边长500以内的毕达哥拉斯三元组的个数

    #include<stdio.h> #include<math.h> #include<stdlib.h>int main() {int side1; //直角边1 ...

  5. 求1~100以内的素数(判断一个数是否为素数)

    [定义] 即只能被1或者自身整除的自然数(不包括1),称为素数/质数. 1.求1~100以内的所有素数 #include<iostream> using namespace std; in ...

  6. 求出100~200之间的素数

    求出100~200之间的素数的个数,并求出所有的素数. 分析:素数定义是只能被1和该数本身整除 package com.math.forth;/*** 求出100~200之间的素数的个数,并求出所有的 ...

  7. [算法]浅谈求n范围以内的质数(素数)

    汗颜,数学符号表达今天才学会呀-_-# 下面是百度百科对质数的定义 质数(prime number)又称素数,有无限个. 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数. 求质数的方法 ...

  8. c语言 sqrt求100以内素数,C语言实现判断一个数是否为素数并求100以内的所有素数...

    判断一个数是否为素数 算法思想 设一个正整数x,sqrt(x)为x开平方后的值,若x不为素数,则x=a*b,a,b为2~x-1之间的整数,且当2=< a <= sqrt(x)时,必有sqr ...

  9. 埃氏筛法(求n以内有多少个素数)

    题目大意:给定整数n,请问n以内有多少个素数 思路:想必要判断一个数是否是素数,大家都会了,并且可以在O(根号n)的复杂度求出答案,那么求n以内的素数呢,那样求就显得有点复杂了,下面看一下这里介绍的? ...

最新文章

  1. ajax分页node,分页数据(使用 paginate 方法)《 Node.js 应用:分页器 》
  2. BI+Tableau
  3. css不常用重要属性
  4. Day45--js基本小结
  5. mysql 数据分析的步骤_数据分析8个主要步骤
  6. Python的内建属性和内建函数
  7. pandas 转换为文本类型_分享5个高效的pandas函数!
  8. 计算机图形学生活应用,计算机图形学的应用实例(计算机图形作业).doc
  9. 打印准考证服务器异常显示,2020准考证打印30个常见问题汇总及解决办法
  10. MATLAB实现多元正态Copula分布
  11. 在pycharm中查看opencv版本
  12. 京瓷m1025维修模式进不去_京瓷1025打印机无法扫描怎么处理?
  13. 戴维斯计算机科学值得读吗,2018加州大学戴维斯分校计算机科学专业基本信息详细解读...
  14. mhl数据线_利用MHL数据线 手机同屏到乐视电视X50air上
  15. java 建造者模式的实际应用场景
  16. 泰坦尼克号 第三章 模型搭建和评估
  17. CAS单点登录四-单点登出
  18. 学计算机专业选i5四核还是6核,计算机CPU的4核和6核有什么区别?
  19. innodb存储引擎学习总结
  20. 项目管理(PMP)项目相关方管理

热门文章

  1. 闲鱼如何0到1搭建一套发布引导链路
  2. Echarts3实例 加载地图
  3. 电脑连上WIfi但无网络的问题解决办法
  4. 【Eelectron-vue】构建桌面应用(20)-electron的退出quit和exit
  5. linux usb gadget printer使用
  6. 全球与中国医疗计费软件市场深度研究分析报告
  7. 解决:Mac brew Error: Your CLT does not support macOS 11.2
  8. 案例分析第一课预习笔记
  9. 成都天瑞地安:零基础学Java最快捷的7个计划
  10. 【图形图像处理】之位图图像和矢量图形有何区别?