Description:

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

推断一个数是否是质数主要有下面几种方法:

1)直接用该数除于全部小于它的数(非0。1),假设均不能被它整除,则其是质数。

2)除以小于它一半的数。由于大于其一半必然是无法整除。假设均不能被它整除。则其是质数;

3)除以小于sqrt(a)的数,原因例如以下:

除了sqrt(a)之外,其它的两数乘积为a的,一定是比个比sqrt(a)小,一个比sqrt(a)大。所以推断到sqrt(a)就能够了,由于还有一半就是刚才做除法的商的那部份。

4)除以小于sqrt(a)的质数就可以。

  由于质数不能被除自身和1外的全部数整除。非质数则不然,且其必定能被某一质数整除。假设一个数能被某一非质数整除。则其必定能被组成这一非质数的最小质数整数。

从上能够看出,推断一个数是否是质数。其计算量取决于整除的个数。上述四种方法,除数逐渐变少。

通过以上分析,这是本人自己的程序:

class Solution {
public:
int countPrimes(int n) {
if (n == 0 || n == 1 || n==2)
return 0; vector<int> vec;//质数容器 vec.push_back(2);
for (int i = 3; i < n; ++i)
{
int j = 0;
int length=vec.size();
for (; j<length && vec[j]*vec[j]<i; ++j)//除数是小于sqrt(i)的全部质数
{
if (i%vec[j] == 0)
break;
}
if (vec[j]*vec[j]>i)
vec.push_back(i);
}
return vec.size();
}
};

以下是在网上找到一个程序,非常具体:

这道题给定一个非负数n,让我们求小于n的质数的个数,题目中给了充足的提示。解题方法就在第二个提示埃拉托斯特尼筛法Sieve
of Eratosthenes
中。这个算法的步骤例如以下图所看到的,我们从2開始遍历到根号n,先找到第一个质数2,然后将其全部的倍数全部标记出来。然后到下一个质数3。标记其全部倍数。一次类推,直到根号n,此时数组中未被标记的数字就是质数。我们须要一个n-1长度的bool型数组来记录每一个数字是否被标记,长度为n-1的原因是题目说是小于n的质数个数。并不包含n。

然后我们用两个for循环来实现埃拉托斯特尼筛法,难度并非非常大。代码例如以下所看到的:

class Solution {
public:
int countPrimes(int n) {
vector<bool> num(n - 1, true);
num[0] = false;
int res = 0, limit = sqrt(n);
for (int i = 2; i <= limit; ++i) {
if (num[i - 1]) {
for (int j = i * i; j < n; j += i) {//为什么要从i*i開始,由于小于i*i的数可能已经被小于i的数整除了。假设没有,那它就是质数
num[j - 1] = false;
}
}
}
for (int j = 0; j < n - 1; ++j) {
if (num[j]) ++res;
}
return res;
}
};

leetCode(49):Count Primes的更多相关文章

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

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

  2. [LeetCode] 204. Count Primes 质数的个数

    Count the number of prime numbers less than a non-negative number, n. Example: Input: 10 Output: 4 E ...

  3. [LeetCode] 204. Count Primes 计数质数

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

  4. Java [Leetcode 204]Count Primes

    题目描述: Description: Count the number of prime numbers less than a non-negative number, n. 解题思路: Let's ...

  5. LeetCode 204. Count Primes (质数的个数)

    Description: Count the number of prime numbers less than a non-negative number, n. 题目标签:Hash Table 题 ...

  6. LeetCode 204 Count Primes

    Problem: Count the number of prime numbers less than a non-negative number, n. Summary: 判断小于某非负数n的质数 ...

  7. Java for LeetCode 204 Count Primes

    Description: Count the number of prime numbers less than a non-negative number, n. 解题思路: 空间换时间,开一个空间 ...

  8. 【leetcode】Count Primes(easy)

    Count the number of prime numbers less than a non-negative number, n 思路:数质数的个数 开始写了个蛮力的,存储已有质数,判断新数字 ...

  9. (easy)LeetCode 204.Count Primes

    Description: Count the number of prime numbers less than a non-negative number, n. Credits:Special t ...

随机推荐

  1. swiper3初始化/swiper-init/用data实例化swiper/data-swiper

    Framework7直接用data属性实例化swiper用起来很爽,刚好最近又用到swiper插件,自己写一个 HTML <div class="swiper-container sw ...

  2. ubuntu查看系统资源占用(内存,cpu和进程)

    http://blog.csdn.net/vivian187/article/details/51476043 http://bluexp29.blog.163.com/blog/static/338 ...

  3. Java线程及Jvm监控工具

    Java线程状态 线程的五种状态 * 新建:new(时间很短) * 运行:runnable * 等待:waitting(无限期等待),timed waitting(限期等待) * 阻塞:blocked ...

  4. 网页内容爬取:如何提取正文内容 BEAUTIFULSOUP的输出

    创建一个新网站,一开始没有内容,通常需要抓取其他人的网页内容,一般的操作步骤如下: 根据url下载网页内容,针对每个网页的html结构特征,利用正则表达式,或者其他的方式,做文本解析,提取出想要的正文 ...

  5. DatePickerDialog日期对话框以及回调函数的用法

    DatePickerDialog类的实例化需要用到回调接口,如下定义: android.app.DatePickerDialog.DatePickerDialog(Context context, O ...

  6. CNN:测试一下YoloV3

    项目地址:https://pjreddie.com/darknet/yolo/ mAP提升了不少,在VS上试一把 V3 的权值: https://pjreddie.com/media/files/yo ...

  7. parsley.js验证的基本引用

    前段时间看到博客有些parsley.js验证,只是对parsley.js验证框架基本的应用,对parsley.js更深层理解没有介绍和demo 比如:异步请求,扩展验证的写法,我把我学到的parsle ...

  8. 梦想MxWeb3D,三维CAD协同设计平台 2019.04.09更新

    SDK开发包下载地址: http://www.mxdraw.com/ndetail_10140.html 在线演示网址: http://www.mxdraw.com:3000/ 1.  增加上传dwg ...

  9. 09Java Server Pages 错误处理

    Java Server Pages 错误处理 通常JSP在执行的时候,在两个阶段会发生错误.第一个是JSP网页转译成Servlet类的时候,另一个就是Servlet类处理每一个请求的时候.在第一个阶段 ...

  10. 数组--P1980 计数问题

    题目描述 题解 试计算在区间 1 到 n的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1到 11中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 ...