求質數的算法

求質數的算法

比如,求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);

    }
}

那麼如果不是質數,這個數就是合數,合數的最小因數小於它的平方根。

好了,聰明一點的辦法來了,時間大大節省。

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

    }
}

還有更好的算法嗎?思考ing···

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章