examination questions

Description:

Count the number of prime numbers less than a non-negative number, n

Please use the following function to solve the problem:

int countPrimes(int n){

}


解题代码

int countPrimes(int n) {
if (n == || n == || n == ){
return ;
}
if (n == ){
return ;
} int temp = ;
bool flag = false;
int arr[] = { '\0' };
int k = ;
arr[] = ; for (int i = ; i < n; i++){
for (int j = ; j <= k; j++){
if (i%arr[j] == ){
flag = true;
break;
}
} if (flag == false){
if (k < ){
k++;
arr[k] = i;
          i++;
}
temp++;
}
else{
flag = false;
}
} return temp+;
}

基本算法思想

判断一个数是否是质数, 仅需判断这个数是否能被比这个数小的质数整除, 若不能, 就是质数.

代码注释分析

int countPrimes(int n) {
//题目要求输入的测试值是非负数,所以必须包含0,1的特殊情况
//由于2的结果也是0,所以也包含了进去
if (n == || n == || n == ){
return ;
}
//为了方便后面的算法设计,要单独把3拿出来
if (n == ){
return ;
} int temp = ;//定义一个计数器,用来记有多少个质数
bool flag = false;//标记,用来判断该数是否是质数
int arr[] = { '\0' };//最为基数的质数的量的最大值设置为200,可以测试10的6次方量级
int k = ;//用来计数质数的个数的,也就是arr的下标
arr[] = ;//第一个质数赋值为2 for (int i = ; i < n; i++){ //这个循环符合n>=4的情况,遍历所有小于n的数,一一进行检测
for (int j = ; j <= k; j++){ //如果这个数能被arr[0]~arr[k]整除,说明它不是质数,flag变为true
if (i%arr[j] == ){
flag = true;
break;
}
} if (flag == false){ //如果flag没有变成true,那么说明它是质数
if (k < ){ //我们要求arr质数仅需要200个,超出的不计入!
k++;
arr[k] = i; //把这个质数也加入arr数组中
i++;//一个质数被判断为质数后,它的后面一个数字不可能是质数(除了2和3之外),所以用i++来减少对不不要数的检测
}
temp++; //质数量+1
}
else{
flag = false; //把flag 再初始化为false,回到最初状态,用于判断下一个数值
}
} return temp + ;//+1是因为要加上 2 这个质数,上面的temp中不包括2
}

此外, 有以下解题方法供参考(由 stevenczp 提供):

int countPrimes(int n) {
bool* map = (bool*)malloc(n * sizeof(bool));
memset(map, , n * sizeof(bool)); for (int i = ; i <= sqrt(n); i++)
{
if (map[i])
continue;
int t = * i;
while (t < n)
{
map[t] = true;
t += i;
}
} int result = ;
for (int i = ; i < n; i++)
{
if (!map[i])
result++;
}
return result;
}

关于本题的详细解题过程, 请点击这里:

解决一道leetcode算法题的曲折过程及引发的思考

Count Primes - LeetCode的更多相关文章

  1. 204. Count Primes - LeetCode

    Queston 204. Count Primes Solution 题目大意:给一个数,求小于这个数的素数的个数 思路:初始化一个boolean数组,初始设置为true,先遍历将2的倍数设置为fal ...

  2. Count Primes ——LeetCode

    Description: Count the number of prime numbers less than a non-negative number, n. 题目大意:给一个int,返回小于它 ...

  3. [leetcode] 204. Count Primes 统计小于非负整数n的素数的个数

    题目大意 https://leetcode.com/problems/count-primes/description/ 204. Count Primes Count the number of p ...

  4. [leetcode] Count Primes

    Count Primes Description: Count the number of prime numbers less than a non-negative number, n click ...

  5. leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes

    263. Ugly Number 注意:1.小于等于0都不属于丑数 2.while循环的判断不是num >= 0, 而是能被2 .3.5整除,即能被整除才去除这些数 class Solution ...

  6. 【刷题-LeetCode】204. Count Primes

    Count Primes Count the number of prime numbers less than a non-negative number, *n*. Example: Input: ...

  7. LeetCode_204. Count Primes

    204. Count Primes Easy Count the number of prime numbers less than a non-negative number, n. Example ...

  8. HDU 5901 Count primes 论文题

    Count primes 题目连接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5901 Description Easy question! C ...

  9. hdu 5901 Count primes (meisell-Lehmer)

    Count primes Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

随机推荐

  1. Adding supplementary tables and figures in LaTeX【转】

    \renewcommand{\thetable}{S\arabic{table}} \renewcommand{\thefigure}{S\arabic{figure}} 这样就以Table S1, ...

  2. JAVA程序设计 实验一

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计 班级:1353  姓名:李海空  学号:20135329 成绩:             指导教师:娄嘉鹏 ...

  3. token原理

    token原理1.和session有很大关系哦. jsp生成表单时,在表单中插入一个隐藏<input>字段,该字段就是保存在页面端的token字符串,同时把该字符串存入session中.等 ...

  4. ArcGIS Server,4000端口被占用

    server使用的端口:http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#//015400000537000000 cmd 输入命 ...

  5. Swift声明参考

    一条声明可以在你的程序里引入新的名字和构造.举例来说,你可以使用声明来引入函数和方法,变量和常量,或者来定义 新的命名好的枚举,结构,类和协议类型.你也可以使用一条声明来延长一个已经存在的命名好的类型 ...

  6. C输入输出函数与缓冲区

    #转 对C语言输入输出流和缓冲区的深入理解C语言缓冲区(缓存)详解缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的 ...

  7. 什么是core dump linux下用core和gdb查询出现"段错误"的地方

    什么是core dump   linux下用core和gdb查询出现"段错误"的地方 http://blog.chinaunix.net/uid-26833883-id-31932 ...

  8. SynchronousQueue应用

    SynchronousQueue是无界的,是一种无缓冲的等待队列,但是由于该Queue本身的特性,在某次添加元素后必须等待其他线程取走后才能继续添加:可以认为SynchronousQueue是一个缓存 ...

  9. JavaScript函数的调用模式

    我们说一个函数的调用模式是作为一个函数来调用,是要与其它三种调用模式做区分函数其他的三种调用: 方法调用模式,构造器调用模式,apply/call调用模式. 方法的调用模式: var obj={ fu ...

  10. 15. 星际争霸之php设计模式--策略模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...