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算法题的曲折过程及引发的思考

最新文章

  1. window.onload与$(document).ready()区别
  2. C语言中的union
  3. Sublime 保存时自动转换tab成空格
  4. java中解决组件重叠的问题(例如鼠标移动组件时)
  5. JS创建类以及类的方法(StringBuffeer类)
  6. .Net SSRS(rdlc) 报表经验总结
  7. android XML格式颜色
  8. 【踩坑】近来在Firefox上遇到的一些坑
  9. cocos2d-x3.0rc 版 设置模拟器窗体大小
  10. JS和H5做一个音乐播放器,附带源码
  11. NIO内存映射
  12. adb模拟操作之event
  13. Android 开发 values目录里定义数组、颜色、文本、尺寸xml配置文件并且获取数据 附录Android符号转码表
  14. SecureCRT连接开发板 串口传输、tftp传输
  15. django 静态css js文件配置
  16. cumtoj 一起来选课
  17. js文件的版本控制
  18. [数据结构]迪杰斯特拉(Dijkstra)算法
  19. mysql 数据操作 单表查询 目录
  20. 为什么学Python语言,只需四步全面了解Python语言

热门文章

  1. BizTalk开发系列(十一) 在Orchestration中执行Pipeline
  2. Windows内核 基本数据结构
  3. 【iCore3 双核心板_FPGA】实验二十四:Niosii——SDRAM读写实验
  4. json.parse 与 json.stringfy
  5. bootstrap插件学习
  6. P1311 选择客栈
  7. 字节流与字符流的区别&amp;&amp;用字节流好还是用字符流好?
  8. Nosql学习笔记
  9. Java集合框架使用总结
  10. react-native win7环境搭建