【两次过】Leetcode 204: 计数质数

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:04   1762   0

* 统计所有小于非负整数 n 的质数的数量。

*

* 示例:

*

* 输入: 10

* 输出: 4

* 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。


解题思路:

不能想当然采用一个一个的去处理,否则时间复杂度为O(n^2)。

首先从 2 开始,我们知道 2 是一个质数,那么 2 × 2 = 4, 3 × 2 = 6, 4 × 2 = 8... 都不可能是质数了。

然后我们发现 3 也是质数,那么 3 × 2 = 6, 3 × 3 = 9, 3 × 4 = 12... 也都不可能是质数了。

所以利用boolean[]来标记质数,如果是质数则标记其倍数为非质数,最后标记剩下的数就是质数。

class Solution {
    public int countPrimes(int n) {
        int res = 0;

        //如果大于2,则一定拥有2这个质数
        if(n > 2)
            res++;

        boolean[] b = new boolean[n];//初始化默认为false,为质数标记 

        for(int i=3; i<n; i=i+2){
            if(!b[i]){
                for(int j=2; i*j<n; j++)
                    b[i*j] = true;  //将当前质数的整数倍都设置为非质数标记 true
                res++;
            }
        }

        return res;
    }
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP