您的位置:首页 > 其它

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

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;

}

上面的代码中有一些地方可以优化,比如只将奇数放入数组,所需空间即可减半。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: