码迷,mamicode.com
首页 > 其他好文 > 详细

生成素数序列----埃拉托斯特尼筛法

时间:2015-08-13 22:13:15      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

下面是埃拉托斯特尼筛法的实现代码:

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;
}

上面的代码中有一些地方可以优化,比如只将奇数放入数组,所需空间即可减半。


版权声明:本文为博主原创文章,未经博主允许不得转载。

生成素数序列----埃拉托斯特尼筛法

标签:

原文地址:http://blog.csdn.net/wangfengfan1/article/details/47621897

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!