您现在的位置是:首页 > 文章详情

求质数的算法

日期:2019-03-09点击:544

求质数的算法

比如,求10 000 000中有多少个质数

质数是只能被1和自己整除的自然数(不包括1)。

笨办法就是一个个计算,用到两层嵌套的循环,数字一大算死人,代码如下:

public class PrimeNumbers {

    public static void main(String[] args) {

        final int max = 100;
        int count = 0;
        boolean flag = true;
        for (int i = 2; i <= max; i++) {
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    flag = false;
                    break;
                }
                flag = true;
            }
            if (flag) {
                count++;
            }
        }
        System.out.println("质数数是:" + count);

    }
}

运行时间,如果求100 000以内的质数,大概2800毫秒,决定每次运行程序时系统的软硬件情况,不过就是这个数量级,没有大的变化。

那么如果不是质数,这个数就是合数,合数的最小因数小于它的平方根。

好了,聪明一点的办法来了,时间大大节省。

public class PrimeNumbers {

    public static void main(String[] args) {

        final int max = 100;
        int count = 0;
        boolean flag = true;
        for (int i = 2; i <= max; i++) {
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if (i % j == 0) {
                    flag = false;
                    break;
                }
                flag = true;
            }
            if (flag) {
                count++;
            }
        }
        System.out.println("质数数是:" + count);

    }
}

运行时间,如果求100 000以内的质数,大概30毫秒,决定每次运行程序时系统的软硬件情况,没有大的变化。
两次运行时间相差两个数量级,算法重要吗,当然很重要!
还有更好的算法吗?思考ing···

原文链接:https://yq.aliyun.com/articles/693011
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章