基于CSS3的3D立方体旋转动画

统计一定范围内素数的个数

基础算法练习:统计一定范围内素数的个数

/**
 * @author JH_Y
 * @version 1.0
 */
public class CountPrimeNumber {

    public static void main(String[] args) {

        /*
         * 统计一定范围内素数的个数
         * 提示: 素数是只能被1和自身整除的自然数,  注意: 0、1除外
         * 例:输入:100
         * 输出:25
         */

        System.out.println("暴力破解素数个数为 :" + blast(5));
        System.out.println("埃筛法解素数个数为 :" + essayMethod(5));


    }


    // 暴力破解
    public static int blast(int num) {
        int count = 0;
        //注意: 0、1除外 ,循环从2开始
        for (int i = 2; i < num; i++) {
            count += isPrime(i) ? 1 : 0;
        }
        return count;
    }


    //判断时是否为素数 , 输入数n只要能被 2~(n-1)整除,就不是素数
    public static boolean isPrime(int x) {
        for (int i = 2; i * i <= x; i++) { // 这里 i <= Math.sqrt(x) 或者 i*i <= x 其实就可以了
            if (x % i == 0) {
                return false;
            }
        }
        return true;
    }


    /*
    素数 , 非素数(合数)
    埃筛法 通过给素数,合数做上标记
     */
    public static int essayMethod(int num) {

        boolean[] isPrime = new boolean[num];//false代表素数, 默认所有数都是素数
        int count = 0;
        for (int i = 2; i < num; i++) {

            if (!isPrime[i]) {//第一个数 2 肯定是素数直接通过
                count++;

                for (int j = 2 * i; j < num; j += i) {//就是合数的标记位 , 可优化为 int j = 2 * i 判断了2、5就不用在判断10
                    isPrime[j] = true;
                }
            }
        }
        return count;
    }

}
posted @ 2021-09-21 22:29  只会写error  阅读(157)  评论(0)    收藏  举报