计算n以内质数的个数
Posted 咕噜咕噜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算n以内质数的个数相关的知识,希望对你有一定的参考价值。
本人渣笔记本使用Java能在14秒内计算完int上限2147483647内的质数、6秒内计算完10亿内的质数个数
以下代码供大家参考:
public static int PrimeCount(int a) {
if (a <= 1) return 0;
int N = (a - 1) / 2; //只考虑奇数 空间占用减半
int count = 1;//初始值为1, 忽略 2 这个质数
boolean[] bl = new boolean[N + 1];//默认为false
int i = 1; //对应值为2i+1 3、5、7、9
int p = 4; //对应2P+1,即i平方 9 25 49 81
while (p <= N) { //当N≥4 ,即a≥9(对应i平方)时进入循环
if (!bl[i]) {
count++;
for (int j = p; j <= N; j += 2 * i + 1) bl[j] = true;//将大于i平方的奇数倍排除
}
/*这两步为了对应值的 p = i*i */
i++;
p += 4 * i;
}
//读取剩余的质数
while (i <= N) {
if (!bl[i]) count++;
i++;
}
return count;
}
算法对减少了对偶数和平方的计算,但是还有大量的重复计算。应该还有更好的算法,欢迎大家讨论。
以上是关于计算n以内质数的个数的主要内容,如果未能解决你的问题,请参考以下文章