leetcode204. 计数质数(vip题)

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

示例:

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

思路:筛法,见代码。

class Solution {
    public int countPrimes(int n) {
        // 1. 给数加上标记
        byte[] nums = new byte[n];
        for (int i = 0; i < n; i++) {
            nums[i] = 1;
        }

        // 2. 非质数标记清除
        for (int i = 2; i < n; i++) {
            if (nums[i] == 1) {
                // 如果当前数为质数,筛掉倍数数字
                for (int j = 2; i * j < n; j++) {
                    nums[i * j] = 0;
                }
            }
        }
        //3. 统计
        int count = 0;
        for (int i = 2; i < n; i++) {
            if (nums[i] == 1)
                count++;
        }
        return count;
    }
}
发布了468 篇原创文章 · 获赞 8611 · 访问量 108万+

猜你喜欢

转载自blog.csdn.net/hebtu666/article/details/104088200
今日推荐