关闭

leetcode-204 Count Primes

267人阅读 评论(0) 收藏 举报
分类:

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);
    }
};
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34275次
    • 积分:927
    • 等级:
    • 排名:千里之外
    • 原创:61篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章分类