列表

详情


NC368. 质数的计数

描述

给定一个正整数 n ,请你计算小于 n 的质数的数量。
质数是除了 1 和自己以外不含有任何因数的数。

数据范围:

示例1

输入:

5

输出:

2

说明:

小于5的质数有 2 3

示例2

输入:

10

输出:

4

说明:

小于10的质数有 2 3 5 7

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 4ms, 内存消耗: 416KB, 提交时间: 2022-06-23

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return int整型
     */
    int primesCount(int n) {
        if(n==1) return 0;
        if(n==2) return 1;
        vector<bool> isPrime(n+1,true);
        for(int i=2;i*i<n;++i){
            if(isPrime[i]){
                for(int j=2*i;j<n;j+=i){
                    isPrime[j] =false;
                }
            }
        }
       int  count =0;
        for(int i=2;i<n;++i){
            if(isPrime[i]) count++;
        }
        return count;
    }
    
};

C++ 解法, 执行用时: 4ms, 内存消耗: 420KB, 提交时间: 2022-07-10

class Solution {
  public:
    int primesCount(int n) {
        if (n == 1) return 0;
        if (n == 2) return 1;        
        vector<bool> v(n + 1, true);
        for (int i = 2; i * i < n; ++i) {
            if (v[i]) {
                for (int j = 2 * i; j < n; j += i) {
                    v[j] = false;
                }
            }
        }       
        int c = 0;
        for (int i = 2; i < n; ++i) {
            if (v[i]) c++;
        }
        return c;
    }

};

C++ 解法, 执行用时: 4ms, 内存消耗: 440KB, 提交时间: 2022-05-30

class Solution {
public:
    int primesCount(int n) {
        if (n <= 1) return 0;

        isPrime.assign(n, true);
        isPrime[0] = isPrime[1] = false;

        for (int i = 2; i * i < n; i++) {
            if (isPrime[i]) {
                for (int j = i * i; j < n; j += i)
                    isPrime[j] = false;
            }
        }

        int ans = 0;
        for (int i = 2; i < n; i++) {
            if (isPrime[i]) ans++;
        }
        return ans;
    }

private:
    vector<bool> isPrime;
};

C++ 解法, 执行用时: 4ms, 内存消耗: 484KB, 提交时间: 2022-06-22

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return int整型
     */
    int primesCount(int n) {
        // write code here
        // 筛选法
        vector<bool> flag(n);
        int res = 0;
        for (int i = 2; i < n; i ++ ) {
            if (!flag[i]) {
                res ++;
                for (int j = i + i; j < n; j += i) flag[j] = true;
            }
        }
        return res;
    }
};

C++ 解法, 执行用时: 4ms, 内存消耗: 516KB, 提交时间: 2022-07-27

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return int整型
     */
    int primesCount(int n) {
        // write code here
      vector<bool> st(n + 1);
      vector<int> primes;
      
      for (int i = 2; i < n; i ++)
      {
        if(!st[i]) primes.push_back(i);
        for (int j = 0; primes[j] * i <= n; j ++)
        {
          st[primes[j] * i] = true;
          if(i % primes[j] == 0) break;
        }
      }
      return primes.size();
    }
};

上一题