How to find prime numbers in 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 + "   ");
        }
    }

Guess you like

Origin blog.csdn.net/u010503822/article/details/78734371