java求素數的方式

//比1大的整數中,除了1和它本身以外,不再有別的因數,這種整數叫做質數或素數
    private static void testSushu() {
        List<String> sushuList = new ArrayList<String>();

        int num = 1000;
        int j;
        boolean isSushu;
        for (int i = 2; i <= num; i++) {//找2~1000之間素數
            //備註:這裏加上這個判斷其實有些時候也不一定會提升性能很明顯,加了判斷本身也是需要消耗計算機資源。數量比較大,提升會比較明顯
            if(i == 1 || (i % 2 == 0 && i != 2 ) )  continue; //偶數和1排除


            isSushu = true;
            for (j = 2; j < i; j++) {//當前循環變量2~i的數,能否被i整除,如果能,表明不是素數
                if (i % j == 0) {
                    isSushu = false;
                    break;
                }
            }

            //打印
            if ( isSushu) {
                sushuList.add(i+"");
            }
        }

        System.out.println("數量:" + sushuList.size());
        System.out.print("元素:");
        for (String str : sushuList) {
            System.out.print(str + "   ");
        }

    }
    //除2
    private static void testSushu2() {
        List<String> sushuList = new ArrayList<String>();
        int num = 1000;

        int j;
        boolean isSushu;
        for (int i = 2; i <= num; i++) {
            //備註:這裏加上這個判斷其實有些時候也不一定會提升性能很明顯,加了判斷本身也是需要消耗計算機資源。數量比較大,提升會比較明顯
            if(i == 1 || (i % 2 == 0 && i != 2 ) )  continue; //偶數和1排除

            isSushu = true;
            for (j = 2; j <= i/2 ; j++) {//這裏比上一步:性能提升一倍,主要考慮2 ~ i/2之間的數,如果找到一個數j能被i整除,表明不是素數
                if (i % j == 0) {
                    isSushu = false;
                    break;
                }
            }

            //打印
            if (isSushu) {
                sushuList.add(i+"");
            }
        }

        System.out.println("數量:" + sushuList.size());
        System.out.print("元素:");
        for (String str : sushuList) {
            System.out.print( str + "   ");
        }
    }

    //開方:最高效
    private static void testSushu3() {
        List<String> sushuList = new ArrayList<String>();

        int num = 1000;
        int j;
        boolean isSushu;
        for (int i = 2; i <= 1000; i++) {
            //備註:這裏加上這個判斷其實有些時候也不一定會提升性能很明顯,加了判斷本身也是需要消耗計算機資源。數量比較大,提升會比較明顯
            if(i == 1 || (i % 2 == 0 && i != 2 ) )  continue; //偶數和1排除

            isSushu = true;
            for (j = 2; j <= Math.sqrt(i); j++) {
                if (i % j == 0) {
                    isSushu = false;
                    break;
                }
            }
            if (isSushu) {
                sushuList.add(i+"");
            }
        }


        System.out.println("數量:" + sushuList.size());
        System.out.print("元素:");
        for (String str : sushuList) {
            System.out.print( str + "   ");
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章