• 传统求质数

    • 全部遍历,是否有因数可以整除
private boolean isPrime(int n){if(n < 2){return false;}if(n == 2 || n == 3 || n == 5 || n == 7){return true;}if(n % 2 == 0 || n % 3 == 0 || n % 5 == 0 || n % 7 == 0){return false;}for(int i = 5; i < n; ++i){if(n % i == 0){return false;}}return true;
}

  • 开放求质数

    • 定理:

      • 如果一个数是合数(不是质数),那么它的最小质因数肯定小于等于他的平方根
private boolean isPrime(int n){if(n < 2){return false;}if(n == 2 || n == 3 || n == 5 || n == 7){return true;}if(n % 2 == 0 || n % 3 == 0 || n % 5 == 0 || n % 7 == 0){return false;}for(int i = 11; i <= Math.sqrt(n); ++i){if(n % i == 0){return false;}}return true;}

  • 埃氏筛法

    • 以200以内的质数为例

      • 首先建立一个下标与数字对应的boolean数组,内存为201(==主要是下标对应,1下标对应数字 1 是否为质数)
      • 初始化201个数组全为true
      • 运用上面的定理解决问题:
        • 200的开方(int)sqrt(200) == 14
        • 从 2 开始循环:
          • 2的倍数全置为false,代表不为质数,例如:4,6,8,…200全为false
          • 3的倍数全置为false,例如:6,9,12,15…198全为false
          • 14的倍数全置为false,例如:28,42,56…
      • 返回数组,为true均为质数(0、1除外)。
public int countPrimes(int n) {if(n < 2){return 0;}//埃氏筛法 (不包含 n)boolean[] isPrimeArr = new boolean[n];isPrimeArr[0] = false;isPrimeArr[1] = false;//填充[2,n)  全为true (左闭右开)Arrays.fill(isPrimeArr, 2, isPrimeArr.length, true);int sqrtN = (int)Math.sqrt(n);//注意小于等于   for(int i = 2; i <= sqrtN; ++i){//是否一直被判断为falseif(isPrimeArr[i]){for(int j = i; i*j < n; ++j){//不包含本身isPrimeArr[i*j] = false;}}}int sum = 0;for(boolean item : isPrimeArr){if(item){++sum;}}return sum;
}

埃氏筛法求质数(例如:200以内的质数)相关推荐

  1. 【中国大学MOOC】java程序设计-week3-用“埃氏筛法”求2~100以内的素数

    1.题目 用"埃氏筛法"求2-100以内的素数.2-100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,--依此类推,最后剩下的就是素数. 要求使用数组及增强的for语 ...

  2. 用“埃氏筛法”求2~10000以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。

    需求:用"埃氏筛法"求2-100以内的素数.2-100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,--依此类推,最后剩下的就是素数.(JAVA语言编写) 埃氏筛选:要 ...

  3. Week 2互评作业:用“埃氏筛法”求2~100以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。

    用"埃氏筛法"求2-100以内的素数.2-100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,--依此类推,最后剩下的就是素数. 要求使用数组及增强的for语句. pa ...

  4. Week3 互评作业:用“埃氏筛法”求2~100以内的素数。java实现

    问题描述 用"埃氏筛法"求2-100以内的素数.2-100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,--依此类推,最后剩下的就是素数. 要求使用数组及增强的for语 ...

  5. 埃氏筛法求素数(C语言)

    问题要求: 用埃氏筛法求100000以内的素数,并输出总个数. 知识简介: 埃氏筛法,全名埃拉托斯特尼筛法,也叫爱氏筛法,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法. 要得到 自然数 ...

  6. Java用“埃氏筛法”求素数

    用"埃氏筛法"求素数. 先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,--依此类推,最后剩下的就是素数. 要求:使用数组,使用数组的长度,使用增强的for语句 import ja ...

  7. C语言 埃氏筛法求素数

    题目 用埃拉托色尼筛选法求素数,n(<1000)由用户输入.每行输出5个: 原理 首先将0.1排除: 对于初始队列{2,3,4,5,6,7,8,9,10,11,12,13,14--n},操作步骤 ...

  8. 埃拉托色尼筛选法巧解质数问题(埃氏筛法求解素数问题)

    背景: 素数(即质数)问题是老问题了,程序员面试问题,大小比赛的热门题. 比如 最简单的判断素数问题,或者计算素数的个数,等等. 简单的判断素数函数: 素数的定义:指在大于1的整数中,只能被1和它本身 ...

  9. 线性筛法求素数c语言,[算法]素数筛法(埃氏筛法线性筛法)

    一.素数筛的定义 给定一个整数n,求出[1,n]之间的所有质数(素数),这样的问题为素数筛(素数的筛选问题). 二.埃氏筛法(Eratosthenes筛法) 埃氏筛法又叫做Eratosthenes筛法 ...

最新文章

  1. sprintboot-learn(一)
  2. java写左侧导航栏界面,jQuery----左侧导航栏面板切换实现
  3. js打开本地文件夹_vue + ArcGIS 地图应用系列一:arcgis api本地部署(开发环境)
  4. hdu_5761_Rower Bo(xjb猜公式)
  5. 动态添加表格点击事件
  6. 基于珞珈一号夜间灯光数据的GDP空间化
  7. python罗盘时钟代码,罗盘时钟(原创)
  8. 强大的Bigdecimal
  9. 如何零基础入门PS软件?
  10. 不得不看的黑客工具集
  11. 推荐一个开源 Java 小说网站项目
  12. 每天5分钟玩转Kubernetes | Liveness探测
  13. 网页版魔兽争霸游戏策划
  14. 一个网页设计需求方眼中的网页设计
  15. 快速开发~Rafy框架的初步认识
  16. Python合成音视频(分别使用ffmpeg和moviepy)
  17. c语言二级编程实例,二级c语言编程 -实例
  18. opencv图像处理—项目实战:答题卡识别判卷
  19. JQuery入门级-基础
  20. Oracle产品服务和技术级别的介绍

热门文章

  1. 公司注销后公章怎么处理,自行保管风险
  2. 加州伯克利计算机专业录取条件,加州大学伯克利分校计算机专业申请要求
  3. linux 域名怎么平台,linux平台搭建DNS域名服务与常用配置
  4. linux开关机日志文件,Linux开关机命令(shutdown,reboot,halt,init)
  5. 英语-汉语600句-会见:Making an Appointment/约会
  6. BZOJ3529: [Sdoi2014]数表(莫比乌斯反演,离线)
  7. 不要相信程序员在加班时间写的代码
  8. 6410裸机开发教程下载
  9. C#之数据库编程:从入门到精通
  10. 关于updatepanel回传之后JS失效问题