热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode204:计算质数

本题要求计算小于给定非负整数n的所有质数的数量。感谢@mithmatt为此问题提供测试案例。

计算质数

题目描述:

给定一个非负整数n,计算所有小于n的质数的数量。

感谢:
特别感谢@mithmatt添加此问题并创建所有测试用例。

方法解析:

每当找到一个质数时,将其所有整数倍的数字标记为非质数。

如下面的示意图所示:

注意事项:

1. 当发现质数i时,应从i*i开始排除其整数倍的数,而非从i+i开始,因为小于i*i的数已经被之前的小于i的质数排除过了。

2. 在计算i*i时应注意数据类型的转换,以防止数值溢出。

代码实现:

class Solution {
public:int countPrimes(int n) {int count = 0;if(n <= 2)return count; // 如果n小于等于2,则没有质数
vector isPrime(n, true);
for(int i = 2; i if(isPrime[i]) {
count++; // 计数器加1
// 排除i的所有整数倍
for(long long j = (long long)i * i; j isPrime[(int)j] = false;
}
}
return count;
}

示例图解:


推荐阅读
author-avatar
阿连AND王进_893_799
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有