leetCode(49):Count Primes
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的更多相关文章
- [leetcode] 204. Count Primes 统计小于非负整数n的素数的个数
题目大意 https://leetcode.com/problems/count-primes/description/ 204. Count Primes Count the number of p ...
- [LeetCode] 204. Count Primes 质数的个数
Count the number of prime numbers less than a non-negative number, n. Example: Input: 10 Output: 4 E ...
- [LeetCode] 204. Count Primes 计数质数
Description: Count the number of prime numbers less than a non-negative number, n click to show more ...
- Java [Leetcode 204]Count Primes
题目描述: Description: Count the number of prime numbers less than a non-negative number, n. 解题思路: Let's ...
- LeetCode 204. Count Primes (质数的个数)
Description: Count the number of prime numbers less than a non-negative number, n. 题目标签:Hash Table 题 ...
- LeetCode 204 Count Primes
Problem: Count the number of prime numbers less than a non-negative number, n. Summary: 判断小于某非负数n的质数 ...
- Java for LeetCode 204 Count Primes
Description: Count the number of prime numbers less than a non-negative number, n. 解题思路: 空间换时间,开一个空间 ...
- 【leetcode】Count Primes(easy)
Count the number of prime numbers less than a non-negative number, n 思路:数质数的个数 开始写了个蛮力的,存储已有质数,判断新数字 ...
- (easy)LeetCode 204.Count Primes
Description: Count the number of prime numbers less than a non-negative number, n. Credits:Special t ...
随机推荐
- WordPress腾讯云存储搭建教程,完美解决
写在前面的话: 为什么会有今天的话题:WordPress+腾讯云存储? 因为博主不想使用七牛云,也不想使用又拍云,所以才有了今天的话题. 在使用腾讯云存储的过程中是很不顺利的,万幸的是现在终于完美融合 ...
- web测试--登录界面怎么测?
具体需求: 有一个登陆页面, 上面有2个textbox, 一个提交按钮. 请针对这个页面设计30个以上的测试用例. 此题的考察目的: 面试者是否熟悉各种测试方法,是否有丰富的Web测试经验, 是否了 ...
- python自动化--语言基础五面向对象、迭代器、range和切片的区分
面向对象 一.面向对象简单介绍: class Test(): #类的定义 car = "buick" #类变量,定义在类里方法外,可被对象直接调用,具有全局效果 def __ini ...
- Python中深拷贝与浅拷贝的区别
转自:http://blog.csdn.net/u014745194/article/details/70271868 定义: 在Python中对象的赋值其实就是对象的引用.当创建一个对象,把它赋值给 ...
- Spartan6系列之器件引脚功能详述
1. Spartan-6系列封装概述 Spartan-6系列具有低成本.省空间的封装形式,能使用户引脚密度最大化.所有Spartan-6 LX器件之间的引脚分配是兼容的,所有Spartan-6 L ...
- C语言中结构体大小计算
1.普通结构体 struct student { char sex; char a; char b; int age; char name[100]; }; 该结构体大小为108 解答:1.先算str ...
- codeforces_456C_dp
链接:http://codeforces.com/problemset/problem/456/C C. Boredom time limit per test 1 second memory lim ...
- Eigen库笔记整理(一)
首先熟悉Eigen库的用途,自行百度. 引入头文件: // Eigen 部分 #include <Eigen/Core> // 稠密矩阵的代数运算(逆,特征值等) #include < ...
- 洛谷——P1549 棋盘问题(2)
P1549 棋盘问题(2) 搜索||打表 #include<cstdio> #include<cstring> #include<iostream> #includ ...
- openpyxl操作excel文件
https://blog.csdn.net/hunter_wyh/article/details/78498323