【leetcode】204. Count Primes
2016-07-03 23:56
288 查看
一、题目描述
Description:
Count the number of prime numbers less than a non-negative number, n.
题目解读:给一个数n,求出比n小的所有质数的总数
思路:使用找质数算法之埃拉托色尼筛选法(Sieve
of Eratosthenes算法),详细可以查看http://blog.csdn.net/xiaoquantouer/article/details/51817803
用一个bool数组,存储n个数的状态,初始化都为true,然后从2开始,如果2的状态为true,就开始遍历比n小的所有的2的倍数,将其全部置为false。把2的倍数遍历完后,继续往下找下一个状态为true的数,即3,遍历比n小的所有的3的倍数(按3*3,3*4,3*5这样遍历,注意不需要从3*2开始了)。.....最后剩下的状态为true的数全为质数。
c++代码(56ms,80.83%)
class Solution {
public:
int countPrimes(int n) {
if(n<=1) //小于等于1的都不是质数
return 0;
bool* a = new bool[n+1];
for(int i=0; i<n; i++)
a[i] = true;
for(int i=2; i*i<n; i++){
if(a[i] == true){
for(int j=i; i*j<n; j++){
a[i*j] = false;
}
}//if
}//for
int result =0;
for(int i=2; i<n; i++){
if(a[i])
result++;
}//for
return result;
}
};
Description:
Count the number of prime numbers less than a non-negative number, n.
题目解读:给一个数n,求出比n小的所有质数的总数
思路:使用找质数算法之埃拉托色尼筛选法(Sieve
of Eratosthenes算法),详细可以查看http://blog.csdn.net/xiaoquantouer/article/details/51817803
用一个bool数组,存储n个数的状态,初始化都为true,然后从2开始,如果2的状态为true,就开始遍历比n小的所有的2的倍数,将其全部置为false。把2的倍数遍历完后,继续往下找下一个状态为true的数,即3,遍历比n小的所有的3的倍数(按3*3,3*4,3*5这样遍历,注意不需要从3*2开始了)。.....最后剩下的状态为true的数全为质数。
c++代码(56ms,80.83%)
class Solution {
public:
int countPrimes(int n) {
if(n<=1) //小于等于1的都不是质数
return 0;
bool* a = new bool[n+1];
for(int i=0; i<n; i++)
a[i] = true;
for(int i=2; i*i<n; i++){
if(a[i] == true){
for(int j=i; i*j<n; j++){
a[i*j] = false;
}
}//if
}//for
int result =0;
for(int i=2; i<n; i++){
if(a[i])
result++;
}//for
return result;
}
};
相关文章推荐
- PKCS5Padding与PKCS7Padding的区别
- 通过blktrace, debugfs分析磁盘IO
- LeetCode第3题
- 浅谈C++类(7)--析构函数
- 径向基网络(RBF network)之BP监督训练
- Spring AOP定义以及注解形式实现
- C++中的rand()、srand()
- losetup命令:设置循环设备
- [git] github 使用简单记录
- iOS --- 协议部分(swift2.3)
- 机器学习:核函数的一个小题目
- Hadoop初学笔记
- 千百万以上海量连接的select、poll和epoll等网络I/O模型的性能测试与分析提纲
- 3.2.8 虚拟内存管理
- linux系统卸载openJDK操作步骤
- 图论(网络流,分数规划):COGS 2047. [ZOJ2676]网络战争
- Linux输入子系统(Input Subsystem)
- 对这次实习的想法
- 找质数算法之埃拉托色尼筛选法(Sieve of Eratosthenes算法)
- 安卓事件分发机制