204.Count Primes

Posted luo-c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了204.Count Primes相关的知识,希望对你有一定的参考价值。

给定一个正整数,求小于这个数的质数个数。
Input: 10
Output: 4
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.

思路:
一、暴力,利用for循环,对 2~n的数遍历,当遇到质数时,将其加入动态数组中,内一次对动态数组的质数求模,若这个数是质数,则加入动态数组。第一次提交,显示超时,后来用开方,每一次只遍历到这个数的开方,然后AC,但时间复杂度还是太高了。

int countprimes(int n) {
    vector<int> ans;
    int flag = 0;
    for (int i = 2; i < n; i++) {
        int sqnum = sqrt(i);
        flag = 0;
        for (int j = 0; j < ans.size() && ans[j] <= sqnum; j++) {
            if (i % ans[j] == 0) {
                flag = 1;
                break;
            }
        }
        if (flag == 0) ans.push_back(i);
    }
    return ans.size();
}

 二、利用空间换时间,将 长度为 n的数组,保存其属性,对所有2的倍数,3的倍数,5的倍数,7的倍数(当前已知质数的倍数)……写入到数组中。

int countprimes(int n) {
    vector<bool> prime(n, true);
    int ans = 0;
    for (int i = 2; i < n; i++) {
        if (!prime[i]) continue;
        ans += 1;
        for (int j = 2; i * j < n ; j++) {
            prime[i * j] = false;
        }
    }
    return ans;
}

 

以上是关于204.Count Primes的主要内容,如果未能解决你的问题,请参考以下文章

[leetcode]204.Count Primes

LeetCode----204. Count Primes(Java)

204. Count Primes

204. Count Primes

204. Count Primes

204. Count Primes