[leetcode 204] Count Primes
2015-12-12 17:15
417 查看
Question:
Description:
Count the number of prime numbers less than a non-negative number, n.
分析:
求解比n小的所有素数的个数;
暴力法:
判断比n小的数是否为素数。
采用埃拉托斯特尼筛法Sieve
of Eratosthenes方法,具体解析参考网上各路大神的解析:
2是最小的质数,那么2的倍数均不为质数(因为它们可以分解为一个数*2),所以我们可以将小于n的数中2的倍数,全部标记为FALSE;
标记掉2的整数倍后,剩下的数中大于2的最小的数就是下一个质数,也就是3.
同样我们可以标记掉小于n的数中3的整数倍的数,得到下一个质数为5.
根据上述思路处理,直到获得所有的质数为止。
从2开始直到n的开方即可。
代码如下:
Description:
Count the number of prime numbers less than a non-negative number, n.
分析:
求解比n小的所有素数的个数;
暴力法:
判断比n小的数是否为素数。
采用埃拉托斯特尼筛法Sieve
of Eratosthenes方法,具体解析参考网上各路大神的解析:
2是最小的质数,那么2的倍数均不为质数(因为它们可以分解为一个数*2),所以我们可以将小于n的数中2的倍数,全部标记为FALSE;
标记掉2的整数倍后,剩下的数中大于2的最小的数就是下一个质数,也就是3.
同样我们可以标记掉小于n的数中3的整数倍的数,得到下一个质数为5.
根据上述思路处理,直到获得所有的质数为止。
从2开始直到n的开方即可。
代码如下:
<span style="font-size:14px;">class Solution { private: bool ifPrimes(int n){ if(n == 1) return false; if(n == 2) return true; if(n % 2 == 0) return false; else{ int q = (int)sqrt(n); for(int i = 3; i * i <= n; i += 2){ if(n % i == 0) return false; } return true; } } public: int countPrimes(int n) { /*int cnt = 0; if(n <= 2) return 0; else{ ++cnt; } for(int i = 3; i < n; i += 2){ bool ifp = false; ifp = ifPrimes(i); if(ifp) ++cnt; } return cnt;*/ if (n <= 2) return 0; bool *p = new bool ; memset(p, true, sizeof(bool) * n); for (int i = 2; i * i < n; i++) { if (p[i]) { for (int j = 2; j * i < n; j++) p[i * j] = false; } } int cnt = 0; for (int i = 2; i != n; i++) if (p[i]) cnt++; delete[] p; return cnt; } };</span>
相关文章推荐
- 遥感影像处理
- 软件测试与软件质量-什么是软件测试
- android-Creating a Search Interface
- Java中的逆变与协变
- python学习吐槽
- cocoaPods的安装
- 遥感影像处理
- Android进阶:获取屏幕参数
- Objective-C中copy属性的概述
- 在状态栏上显示会闪烁的图标(类似qq消息提示)
- 【比较】构件图和部署图
- 时间格式转换
- WyBox用usb口驱动EC20
- 《机器学习:算法原理与编程实践》的读书笔记:SMO部分最难,大部分代码基于Scikit-Learn,决策树其实用处不大
- eclipse 报错 主类加载错误 或找不到主类
- javascript自定义函数
- MFC 小知识七 右键菜单
- C++ 学习点
- iOS 验证码倒计时时button一闪一闪的
- 谈谈关于PHP的代码安全相关的一些致命知识