letecode [204] - Count Primes
Count the number of prime numbers less than a non-negative number, n.
Example:
Input: 10 Output: 4 Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.
题目大意:
求所有小于非负整数n的质数的数量。
理 解:
最直接的做法就是求每个数i 是否有2到 i-1间的因子。统计质数个数。但该方法时间复杂度太高,会超出时间限制。
所有的非质数都含有质数因子,每找到一个质数变存入容器中,判断一个数i是否为质数时判断容器中元素是否为它的因子,没找到则该数为质数,也加入容器,但这个时间和空间复杂度也比较高。
看了其他人的方法,厄拉多塞筛法,所有元素都设置为未访问状态,每访问一个状态为true的元素,将它的倍数都设置为false。最终得到的为true的元素即为质子。
代 码 C++:
class Solution { public: int countPrimes(int n) { vector<bool> visited(n,true); int count = 0; for(int i=2;i<=sqrt(n);++i){ if(visited[i]==true){ for(int j=2;i*j<n;++j){ visited[i*j] = false; } } } for(int i=2;i<n;++i){ if(visited[i]==true) count++; } return count; } };
运行结果:
执行用时 :100 ms, 在所有C++提交中击败了32.49%的用户
内存消耗 :8.5 MB, 在所有C++提交中击败了76.65%的用户