leetCode 204 计数质数 : 厄拉多塞筛法求质数

经过此题了解了下厄拉多塞筛法求质数:以下图

该算法在寻找素数时,采用了一种不同凡响的方法:先将 2-N 的各数放入表中,而后在 2 的上面画一个圆圈,而后划去 2 的其余倍数;第一个既未画圈又没有被划去的数是 3,将它画圈,再划去 3 的其余倍数;如今既未画圈又没有被划去的第一个数是 5,将它画圈,并划去5的其余倍数……依次类推,一直到全部小于或等于N的各数都画了圈或划去为止。算法

这时,表中画了圈的以及未划去的那些数正好就是小于 N 的素数。数组

所以代码以下:bash

public int countPrimes(int n) {
        //创建数组
        boolean[] nums = new boolean[n];
        
        //将2-N之间的数据设为true
        for (int i = 2;i<n;i++){
            nums[i] = true;
        }
        
        //将二、三、5等倍数的值“划去”(设为falsefor (int i = 2;i*i < n;i++) {
            if (nums[i]) {
                for (int j = 2;j*i<n;j++) {
                    nums[j*i] = false;
                }
            }
        }
        int res = 0;
        //最后取出为true的值,即为2-N之间画圈的数据
        for (boolean num : nums) {
            res+= num?1:0;
        }
        return res;
    }
复制代码
相关文章
相关标签/搜索