• leetcode 204. Count Primes 计数质数 (Easy)


    一、题目大意

    https://leetcode.cn/problems/count-primes

    给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。

    示例 1:

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

    示例 2:

    输入:n = 0
    输出:0

    示例 3:

    输入:n = 1
    输出:0

    提示:

    • 0 <= n <= 5 * 106

    二、解题思路

    输入一个整数,输出也是一个整数,表示小于输入数的质数的个数。
    埃拉托斯特尼筛法,是判断一个整数是否是质数的方法。并且它可以在判断一个整数n时,同时判断所小于n的整数,因此非常适合这个问题。其原理是:从1到n遍历,假设当前遍历到m,则把所有小于n的、且是m的倍数的整数标为和数;遍历完成后,没有被标为和数的数字即为质数。

    三、解题方法

    3.1 Java实现

    public class Solution {
        public int countPrimes(int n) {
            if (n <= 2) {
                return 0;
            }
            boolean[] prime = new boolean[n];
            Arrays.fill(prime, true);
    
            int i = 3;
            int sqrtn = (int) Math.sqrt(n);
            // 偶数一定不是质数
            int count = n / 2;
            while (i <= sqrtn) {
                // 最小质因子一定小于等于开方数
                for (int j = i * i; j < n; j += 2 * i) {
                    // 避免偶数和重复遍历
                    if (prime[j]) {
                        count--;
                        prime[j] = false;
                    }
                }
                do {
                    i+= 2;
                    // 避免偶数和重复遍历
                } while (i <= sqrtn && !prime[i]);
            }
            return count;
        }
    }
    

    四、总结小记

    • 2022/8/1 7月结束了贪心算法的题,开启“巧解数学问题”类的题目
  • 相关阅读:
    函数
    A × B problem
    求n的阶乘
    自己构建一个vector函数
    int与string的互相转化
    列一列(斐波那契数列)
    找一找
    c++大数计算模板
    JSON--js中 json字符串转对象、对象转字符串
    JSON
  • 原文地址:https://www.cnblogs.com/okokabcd/p/16541954.html
Copyright © 2020-2023  润新知