博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
艾拉托斯特你筛法(java实现)
阅读量:4072 次
发布时间:2019-05-25

本文共 1175 字,大约阅读时间需要 3 分钟。

艾拉托斯特你筛法能够非常高效的生成素数序列,原理是剔除所有可能被素数整除的非素数。

给出要筛数值的范围n,找出 n 以内的素数 p1 , p2 , , pk 。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去……。
这里写图片描述
以下是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

以上代码还可以优化计算次数,即只把奇数放进数组,即可减半。

你可能感兴趣的文章
Java实现DES加密解密
查看>>
HTML基础
查看>>
Java IO
查看>>
Java NIO
查看>>
Java大数据:Hbase分布式存储入门
查看>>
Java大数据:全文搜索引擎Elasticsearch入门
查看>>
大数据学习:Hadoop入门学习书单
查看>>
大数据学习:Spark SQL入门简介
查看>>
大数据学习:Spark RDD操作入门
查看>>
大数据框架:Spark 生态实时流计算
查看>>
大数据入门:Hive和Hbase区别对比
查看>>
大数据入门:ZooKeeper工作原理
查看>>
大数据入门:Zookeeper结构体系
查看>>
大数据入门:Spark RDD基础概念
查看>>
大数据入门:SparkCore开发调优原则
查看>>
大数据入门:Java和Scala编程对比
查看>>
大数据入门:Scala函数式编程
查看>>
【数据结构周周练】002顺序表与链表
查看>>
C++报错:C4700:使用了非初始化的局部变量
查看>>
【数据结构周周练】003顺序栈与链栈
查看>>