生成素数序列----埃拉托斯特尼筛法
2015-08-13 21:45
190 查看
下面是埃拉托斯特尼筛法的实现代码:
boolean[] sieveOfEratosthenes(int max)
{
boolean[] flags = new boolean[max + 1];
int count = 0;
init(flags);//将flags中0,1元素除外的所有元素设为true
int prime = 2;
while (prime <= max)
{
//划掉余下为prime倍数的数字
crossOff(flags, prime);
//找出下一个为true的值
prime = getNextPrime(flags, prime);
if (prime >= flags.length)
{
break;
}
}
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;
}
上面的代码中有一些地方可以优化,比如只将奇数放入数组,所需空间即可减半。
相关文章推荐
- GDOI2016模拟8.13生产汽车
- CNN for Visual Rcognition --- Stanford 2015 (二)
- POJ 3268 Silver Cow Party
- 对现有Hive的大表进行动态分区
- hive中的静态分区与动态分区
- 静态与非静态的区别
- iOS开发 -- UILable详解
- 判断一个java文件和邮箱格式是否合法
- 静态与非静态的区别
- 如何在Linux操作系统之上的MySQL数据库操作环境中使用清屏命令?
- 调优 PHP
- [笔记][Java7并发编程实战手册]第三章-线程同步辅助类-3.1概要
- OC第三天(内存管理)
- Go 并发
- strcmp,strlen,strcmp,strcat实现
- POJ 3026 Borg Maze BFS和prim
- 调优 PHP
- C++字符串string类提供的处理字符串的函数
- 黑马程序员——泛型
- const(一):(转) 一个函数名后面加const表示什么意思