求一千万以内的所有素数的个数
本文主要介绍的是“埃氏筛法”。
素数筛法的关键在于一个“筛”字。其基本思路是,从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个。
求一千万以内的所有素数的个数相关推荐
- 求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序进行排序
已知数据文件IN14.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中.请编制一个函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再把所有满足此 ...
- C语言求一万以内的超级素数,用C语言求素数的优化.doc
用C语言求素数的优化 用C语言求素数的优化 这个程序运行了8个小时,求一亿以内的素数和超级素数. 大家帮忙看看,我求一亿以内的素数和超级素数.从下午5:30开始,一直到零晨0点30才结束.我的电脑配置 ...
- 【千律】C++基础:求出M以内的全部素数-方案1
质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数. 求解思路:对于任意大于1的正整数M,若采用该正整数M对全部小于等于M的正整数进行除法运算,若仅存在两次整除,则该数M为素 ...
- C语言求边长500以内的毕达哥拉斯三元组的个数
#include<stdio.h> #include<math.h> #include<stdlib.h>int main() {int side1; //直角边1 ...
- 求1~100以内的素数(判断一个数是否为素数)
[定义] 即只能被1或者自身整除的自然数(不包括1),称为素数/质数. 1.求1~100以内的所有素数 #include<iostream> using namespace std; in ...
- 求出100~200之间的素数
求出100~200之间的素数的个数,并求出所有的素数. 分析:素数定义是只能被1和该数本身整除 package com.math.forth;/*** 求出100~200之间的素数的个数,并求出所有的 ...
- [算法]浅谈求n范围以内的质数(素数)
汗颜,数学符号表达今天才学会呀-_-# 下面是百度百科对质数的定义 质数(prime number)又称素数,有无限个. 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数. 求质数的方法 ...
- c语言 sqrt求100以内素数,C语言实现判断一个数是否为素数并求100以内的所有素数...
判断一个数是否为素数 算法思想 设一个正整数x,sqrt(x)为x开平方后的值,若x不为素数,则x=a*b,a,b为2~x-1之间的整数,且当2=< a <= sqrt(x)时,必有sqr ...
- 埃氏筛法(求n以内有多少个素数)
题目大意:给定整数n,请问n以内有多少个素数 思路:想必要判断一个数是否是素数,大家都会了,并且可以在O(根号n)的复杂度求出答案,那么求n以内的素数呢,那样求就显得有点复杂了,下面看一下这里介绍的? ...
最新文章
- ajax分页node,分页数据(使用 paginate 方法)《 Node.js 应用:分页器 》
- BI+Tableau
- css不常用重要属性
- Day45--js基本小结
- mysql 数据分析的步骤_数据分析8个主要步骤
- Python的内建属性和内建函数
- pandas 转换为文本类型_分享5个高效的pandas函数!
- 计算机图形学生活应用,计算机图形学的应用实例(计算机图形作业).doc
- 打印准考证服务器异常显示,2020准考证打印30个常见问题汇总及解决办法
- MATLAB实现多元正态Copula分布
- 在pycharm中查看opencv版本
- 京瓷m1025维修模式进不去_京瓷1025打印机无法扫描怎么处理?
- 戴维斯计算机科学值得读吗,2018加州大学戴维斯分校计算机科学专业基本信息详细解读...
- mhl数据线_利用MHL数据线 手机同屏到乐视电视X50air上
- java 建造者模式的实际应用场景
- 泰坦尼克号 第三章 模型搭建和评估
- CAS单点登录四-单点登出
- 学计算机专业选i5四核还是6核,计算机CPU的4核和6核有什么区别?
- innodb存储引擎学习总结
- 项目管理(PMP)项目相关方管理