Leetcode 204 Count Primes
2015-06-06 20:06
435 查看
Description:
Count the number of prime numbers less than a non-negative number, n.
求小于n的素数的数量。
最传统的做法就是做一个判定函数,从2开始到n判断,看有多少素数。判定素数的方法就是从2到根号n,看看是不是可以被n整除。但是看了提示后,发现还有别的便捷的方法来解,就是原始的Sieve of Eratosthenes方法,http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes,维基百科有具体介绍,(据说是Eratosthenes保留下来的仅有的一项成果,记录在Introduction to Arithmetic这本书上)这种方法可以直接找到小于n的所有素数,具体的做法是从2到根号n进行搜索,如果没有标记为非素数的话,那么就把他的所有倍数全部标记为非素数,这样最后剩下来的未标记的就都是素数了,但是稍有改进,首先,对于标记为非素数的数,不再对他的倍数进行标记操作,因为之前肯定已经标记过了,此外,对于某个数,可以从他的平方开始进行标记,因为之前的肯定都被标记过了,比如说5开始,那么2*5,3*5,4*5肯定都检测并标记过了,所以直接从5*5开始就可以了。
具体代码如下:
class Solution {
public:
int countPrimes(int n) {
bool *mapPrimeMark = new bool
;
for(int i = 2; i < n; i++)
{
mapPrimeMark[i] = true;
}
for(int i = 2; i * i < n; i++)
{
if(!mapPrimeMark[i])
continue;
for(int j = i * i; j < n; j += i)
{
mapPrimeMark[j] = false;
}
}
int ret = 0;
for(int i = 2; i < n; i++)
{
if(mapPrimeMark[i])
ret++;
}
delete[] mapPrimeMark;
return ret;
}
};
代码有个地方需要注意,数组比map要快,用map的话会直接tle。
Count the number of prime numbers less than a non-negative number, n.
求小于n的素数的数量。
最传统的做法就是做一个判定函数,从2开始到n判断,看有多少素数。判定素数的方法就是从2到根号n,看看是不是可以被n整除。但是看了提示后,发现还有别的便捷的方法来解,就是原始的Sieve of Eratosthenes方法,http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes,维基百科有具体介绍,(据说是Eratosthenes保留下来的仅有的一项成果,记录在Introduction to Arithmetic这本书上)这种方法可以直接找到小于n的所有素数,具体的做法是从2到根号n进行搜索,如果没有标记为非素数的话,那么就把他的所有倍数全部标记为非素数,这样最后剩下来的未标记的就都是素数了,但是稍有改进,首先,对于标记为非素数的数,不再对他的倍数进行标记操作,因为之前肯定已经标记过了,此外,对于某个数,可以从他的平方开始进行标记,因为之前的肯定都被标记过了,比如说5开始,那么2*5,3*5,4*5肯定都检测并标记过了,所以直接从5*5开始就可以了。
具体代码如下:
class Solution {
public:
int countPrimes(int n) {
bool *mapPrimeMark = new bool
;
for(int i = 2; i < n; i++)
{
mapPrimeMark[i] = true;
}
for(int i = 2; i * i < n; i++)
{
if(!mapPrimeMark[i])
continue;
for(int j = i * i; j < n; j += i)
{
mapPrimeMark[j] = false;
}
}
int ret = 0;
for(int i = 2; i < n; i++)
{
if(mapPrimeMark[i])
ret++;
}
delete[] mapPrimeMark;
return ret;
}
};
代码有个地方需要注意,数组比map要快,用map的话会直接tle。
相关文章推荐
- 网页开发之localStorage与sessionStorage
- (5)语句
- C++构造函数
- ACDREAM 05E 哗啦啦族的01背包问题(DFS专场)
- hdu 4550 贪婪 思考题 权
- 【点滴】Java Calendar 类的使用
- 黑马程序员——Java基础---多线程<一>
- Android在putString和getString使用方法
- MySQL的alter table
- ACDREAM 05D 哗啦啦族的加法计算(DFS专场)
- dom4j 使用总结
- dom4j 使用总结
- Linux学习笔记之权限与命令之间的关系(重要)及文件与目录知识总结
- VMware下Ubuntu 14.04静态ip配置
- varnish详解
- nyoj22素数求和问题
- 数据库——怎样实现数据完整性
- unix-ln 命令
- python 将命令行执行的屏幕输出赋值到out变量
- 设置64位机器上的IIS(IIS6/IIS7)兼容32位程序