计算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以内质数的个数的主要内容,如果未能解决你的问题,请参考以下文章

需要两个办法,100以内找出质数?

10000以内质数的分布规律是啥?

求50到100以内的质数

n以内的素数

质数和合数那个多,为啥

求n以内的质数(质数的定义:在大于1的自然数中,除了1和它本身意外,无法被其他自然数整除的数)