Leetcode204-Count Primes
来源:互联网 发布:total tide软件下载 编辑:程序博客网 时间:2024/06/17 15:05
Leetcode204-Count Primes
Description:
Count the number of prime numbers less than a non-negative number, n
题意:
求出小于非负整数n的质数个数。
分析:
这个题相当于求小于n的所有质数,曾在编程之美中看到过一个求一组质数的算法,叫厄拉多塞筛法,时间复杂度仅有O(nloglogn),这是一个相当好的算法(如果从1到n-1分别判断质数,时间复杂度为O(n*sqrt(n)))。
厄拉多塞筛法的步骤:建立从2到n的集合G={2, 3, 4, ..., n},每次从集合中取出最小的数A,这个数就是质数;然后将数A * times从集合中删除,其中1<=times<=n/A。得到一个新的集合G',重复上述步骤直到集合为空,就取出了所有质数。
举例一个集合{2, 3, 4, ..., 12}:
stp1:最小值为2,取出2并删除2,4,6,8,10,12,集合变为{3, 5, 7, 9, 11};
stp2:最小值为3,取出3并删除3,6,9,集合变为{5, 7, 11}
...
最后得到质数为2,3,5,7,11。
注意:
1. 一开始我用unordered_set来标记一个数是否被删除,后来内存使用超出要求。后来改用bool数组来记录就AC了。
2. 注意是小于n,而非小于等于n。
AC代码:
<span style="font-size:14px;">class Solution {public: int countPrimes(int n) { bool isDeleted[n]; for (unsigned i = 0; i < n; ++i) isDeleted[i] = false; int count = 0; for (unsigned i = 2; i < n; ++i) { if (!isDeleted[i]) { ++count; for (unsigned times = 1; i * times <= n; ++times) { isDeleted[i*times] = true; } } } return count; }};</span>
0 0
- Leetcode204-Count Primes
- LeetCode204:Count Primes
- leetcode204. Count Primes
- LeetCode204. Count Primes
- leetcode204: Count Primes
- LeetCode204—Count Primes
- leetcode204. Count Primes
- Leetcode204.Count Primes
- LeetCode204——Count Primes
- Count Primes
- Count Primes
- Count Primes
- Count Primes
- count primes
- Count Primes
- Count Primes
- Count Primes
- Count Primes
- android坐标
- exec函数家族总结
- 字符串翻转
- zoj 3870 Team Formation(位运算,超时)
- direct path read/write (直接路径读/写)
- Leetcode204-Count Primes
- 我们来讲下C#中的@符号的使用及注意事项。应用c#保留字
- 排序算法总结之归并排序 Merge Sort
- python byte 数组 和 16进制字符串转换
- 字符串转换成整型
- wait和sleep的区别
- 左旋转字符串
- svn分支和标记
- 线程之间的通信