艾拉托斯特你筛法(java实现)
来源:互联网 发布:plc编程工程师 编辑:程序博客网 时间:2024/05/23 00:41
艾拉托斯特你筛法能够非常高效的生成素数序列,原理是剔除所有可能被素数整除的非素数。
给出要筛数值的范围n,找出
以下是java实现代码:
public class PrimeNumber { public static void main(String[] args) { int max = 100; PrimeNumber pn = new PrimeNumber(); pn.sieveOfEratosthenes(max); } boolean[] sieveOfEratosthenes(int max){ boolean[] flags = new boolean[max+1]; int count = 0;//统计一共有多少个素数 int prime = 2; //初始化,设置flags数组全部为true for (int i = 0; i < max; i++) { flags[i] = true; } flags[0] = flags[1] = false; while (prime <= max) { //剔除prime的倍数 crossOff(flags, prime); //找出下一个为true的值 prime = getNextPrime(flags, prime); if (prime >= flags.length) { break; } count++; System.out.println("prime = "+prime); } System.out.println("count = "+count); return flags; } void crossOff(boolean[] flags,int prime){ /* * 剔除余下的prime倍数的数字,从prime*prime开始,因为如果k*prime且k<prime, * 在之前的迭代中已经被剔除了 */ for (int i = prime*prime; i < flags.length; i+=prime) { flags[i] =false; } } int getNextPrime(boolean[] flags,int prime){ int next = prime + 1; while (next < flags.length && !flags[next]) { next++; } return next; }}
以上代码还可以优化计算次数,即只把奇数放进数组,即可减半。
0 0
- 艾拉托斯特你筛法(java实现)
- 手把手教你用Java实现AOP
- 手把手教你用Java实现AOP
- 手把手教你用Java实现AOP
- JAVA带你一步一步实现微信公众号开发(一)
- 教你在Java中实现3d编程简介
- 手把手教你实现Java监听器全局监控
- NIO Framework 助你简单实现 Java 的异步网络通讯
- 你真的会写单例模式吗——Java实现
- 你真的会写单例模式吗——Java实现
- 你真的会写单例模式吗——Java实现
- 你真的会写单例模式吗——Java实现
- 你真的会写单例模式吗——Java实现
- 如何用java实现使用电子邮件控制你的电脑
- 你真的会写单例模式吗——Java实现
- 你画我猜游戏的java实现
- 你真的会写单例模式吗——Java实现
- 你真的会写单例模式吗-------Java实现
- html5 canvas
- Linux系统管理常用命令
- JsperReport导出PDF报表中文不显示
- 大数据系统的另一种解决方案-采用MPP架构的GreenPlum数据库
- [Ruby on Rails实战圣经]Ajax 应用程式
- 艾拉托斯特你筛法(java实现)
- android6.0 mount failed
- 使用jmeter HTTP代理服务器录制APP脚本
- eclipse安装spring 插件失败
- 破解Office文档密码的三个技巧
- android 动画
- Linux系统结构 详解
- ByteBuffer 到底怎么用?网络编程中一点总结!
- 虚拟机里面安装Openfiler 2.99