evolone的专栏

每天一小步

leetcode-204 Count Primes

Count the number of prime numbers less than a non-negative number, n.
计算小于n的素数的个数。
素数,从2开始,2,3,5,7,11……
素数定义,除了被1和自身整除外,没有其他因数。
最直接的想法就是从2开始到n的平方根,如果有能整除的,就不是素数。
最直接的往往效率最低。

果然,虽然不断剪枝,但是本身的效率低下,再怎么努力也总是超时。
查看了discuss,果然是自己的思路不对,没有找到更高效的算法。

大神的思路是,从2开始到平方根的范围,如果一个数i是素数,那么它的倍数k*i就不是素数,而且,是从i*i开始的。果然厉害!

最后跟着大神的思路总算解决了。
https://leetcode.com/discuss/42097/short-c-sieve-of-eratosthenes-solution
大神代码:

class Solution {
public:
    int countPrimes(int n) {
        vector<bool> prime(n, true);
        prime[0] = false, prime[1] = false;
        for (int i = 0; i < sqrt(n); ++i) {
            if (prime[i]) {
                for (int j = i*i; j < n; j += i) {
                    prime[j] = false;
                }    
            }    
        }
        return count(prime.begin(), prime.end(), true);
    }
};
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/evolone/article/details/46779285
个人分类: leetcode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

leetcode-204 Count Primes

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭