0
点赞
收藏
分享

微信扫一扫

统计素数个数

七千22 2022-05-02 阅读 170

统计素数个数

暴力算法和埃氏筛选法

/**
 * 统计素数个数
 */
public class SuShu {

    /**
     * 埃氏筛选
     *  将所有的合数做上标记
     * @param n
     * @return
     */
    public static  int eratosthenes(int n){
        boolean[] isPrime = new boolean[n]; //false代表素数
        int count = 0 ;
        for (int i = 2; i < n ; i++) {
            if (!isPrime[i]){
                count++;
                for (int j = i * i; j<n; j+=i){  // j 就是合数的标记位;好好理解 j+=i  相当于递增了系数i ;
                    isPrime[j] = true;
                }
            }

        }
        return count;
    }

    /**
     * 暴力算法
     * @param n
     * @return
     */
    public  static  int bf( int n ){
        int count = 0 ;
        for (int i = 2 ; i <= n; i++){
            count += isPrime(i) ? 1 : 0 ;
        }
        return  count;
    }

    private  static  boolean isPrime(int x)
    {
        for (int i = 2; i <= Math.sqrt(x); i++) { //优化了只需要计算到根号x为止
            if (x % i == 0 ){
                return  false;
            }
        }
        return  true;
    }

    public static void main(String[] args) {
        System.out.println("请输入需要统计哪个数为止的素数");
        Scanner  sc = new Scanner(System.in);
        int num = sc.nextInt();
//        int count = bf(num);
        int count = eratosthenes(num);
        System.out.println("素数的个数是="+count);

    }

}
举报

相关推荐

0 条评论