以洛谷p3912为例

题目描述

求 1,2,⋯,N 中素数的个数。

输入格式

一行一个整数 N。

输出格式

一行一个整数,表示素数的个数。

示例:

输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。


解法一(检测)

一般只用于求是否为素数、质数。
思路:从头开始对数据依次进行判断,如果是质数则进行计数。有两个地方:

首先是判断一个数x是否是质数时,只需要检测到sqrt x 

其次由于偶数本身肯定不是质数,自增步长为2
时间复杂度:O(n sqrt n )
空间复杂度:O(1)

bool zhishu(int n)
{if(n==2) return 1;for(int a=3;a<=sqrt(n);a++){if(n%a==0){return 0;}}return 1;
}

解法二(赋值)

1.也可以叫做埃氏筛
思路:基于空间换时间的思路,不对每个数值进行单独判断,而是直接从前到后,使用已知的质数对后面未知的数据进行排除,即将质数的倍数本身进行排除,剩下的就是质数本身了。

初始化保存质数的空间
若当前数值没被标记过则为质数,即将质数的倍数进行标记为非质数
时间复杂度:小于O(nlog(n))
空间复杂度:O(n)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,ans;
bool a[100000005]; int main()
{scanf("%d",&n);a[1]=1;for(int i=2;i*i<=n;i++){if(a[i]==0){for(int j=i*i;j<=n;j=j+i){a[j]=1;}}}for(int i=1;i<=n;i++){if(a[i]==0)ans++;}cout << ans<<endl;return 0;} 

2.埃氏筛存在重复筛的情况,如30会被2(*15)、3(*10)和5(*6)筛三次。
如何更快速地筛出一定上限内的素数?
下面这种方法(欧拉筛)可以保证范围内的每个合数都被删掉(在 bool 数组里面标记为非素数),而且任一合数只被:
“最小质因数 × 最大因数(非自己) = 这个合数”
的途径删掉。由于每个数只被筛一次,时间复杂度为O(n)。

#include<bits/stdc++.h>
using namespace std;bool isPrime[100000010];
//isPrime[i] == 1表示:i是素数
int Prime[6000010], cnt = 0;
//Prime存质数、质数表 void GetPrime(int n)//筛到n
{memset(isPrime, 1, sizeof(isPrime));//以“每个数都是素数”为初始状态,逐个删去isPrime[1] = 0;//1不是素数for(int i = 2; i <= n; i++){if(isPrime[i])//没筛掉 Prime[++cnt] = i; //i成为下一个素数for(int j = 1; j <= cnt && i*Prime[j] <= n/*不超上限*/; j++) {//从Prime[1],即最小质数2开始,逐个枚举已知的质数,并期望Prime[j]是(i*Prime[j])的最小质因数//当然,i肯定比Prime[j]大,因为Prime[j]是在i之前得出的isPrime[i*Prime[j]] = 0;if(i % Prime[j] == 0)//i中也含有Prime[j]这个因子break; //重要步骤。见原理}}
}int main()
{int n,ans=0;scanf("%d",&n);GetPrime(n);for(int i=1;i<=n;i++)if(Prime[i])ans++;printf("%d\n", ans);return 0;
}

求质数个数(求素数个数相关推荐

  1. 用c语言求1 n的素数个数 给出两种解法,【题目】求n以内的素数个数

    最近在leetCode上刷提,还是满锻炼人的,为以后面试打基础吧.不多说下面开始. 问题:求[2,n]之间的素数的个数. 来源:leetCode OJ 提示: Let's start with a i ...

  2. 素数的分布(素数定理),求1~10^n 素数个数的位数

    素数定理: 素数有无穷多个,能估计出一个小于正实数x的素数有多少个,并用π(x)来表示,这就是素数定理 定理内容: 随着x的增长,π(x)/(x/lnx)=1  具体数据见下表: n         ...

  3. 求1~n中素数个数的几种方法C/C++

    第一种:典型求法 #include<bits/stdc++.h> using namespace std;int main() {int n,f;cin >> n;int cn ...

  4. python中求质数_python求质数的3种方法

    本文为大家分享了多种方法求质数python实现代码,供大家参考,具体内容如下 题目要求是求所有小于n的质数的个数. 求质数方法1: 穷举法: 根据定义循环判断该数除以比他小的每个自然数(大于1),如果 ...

  5. 求1到n的素数个数C语言,求 1~n 之间素数的个数

    1. 筛选法 筛选掉偶数,然后比如对于 3,而言,筛选掉其整数倍数:(也即合数一定是某数的整数倍,比如 27 = 3*9) int n = 100000000; bool flag[100000000 ...

  6. Golang 实现求素数【 输入N,求N内素数个数 】

    简介 什么是素数?    素数也叫质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数. 判断素数的方法:    思路一:判断一个数是否素数,只需要把m 被 2~m-1之间的每一个整 ...

  7. 利用包含排斥原理求出给定范围内素数个数的问题

    一.前提 今天上离散数学课上看到一个题目:使用包含排斥原理求不超过120的素数个数,其实按照一般算法是这样的: count = 0 l = [] for x in range(121):#判断如果x是 ...

  8. Java 求1-100以内的所有素数,判断一个数是不是素数。Java代码实现附测试结果图

    质数(prime number)又称素数,有无限个. 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数. 小师弟问了我个这么个联系题,虽然看似简单,但是,大家都觉得简单的东西 ...

  9. python acm 素数个数_湘潭大学OJ-1098求区间内素数个数问题

    求区间内素数个数问题 题目描述 Description 给定两个非负整数a,b,其中0<= a,b<=1,000,000,请计算这两个数之间有多少个素数.限制:Time Limit : 1 ...

  10. Java求n以内素数_求0到n之间素数个数的序列(Java)

    要求: (1) 找出0-1000之间素数 (2) 设f(n)表示0-n之间的素数个数,计算出当n=0,1,2,3,.....,997时f(n)的值,并写入文件 分析: 首先找素数使用一个效率较高的方法 ...

最新文章

  1. Mask-RCNN论文解读
  2. 爱立信为T-Mobile荷兰全新的OTT TV业务提供强大支持
  3. vs2019使用python进行数据可视化_在Visual Studio2019中使用汇编语言编写程序
  4. zz 标 题: 求weka JVM outofMemory问题的解决方案【已解决】
  5. mongodb远程连接配置(亲测)
  6. 【五】每个球队胜率统计
  7. 前端学习(2893):导航组件的编写和属性技巧设置
  8. 娄底八中的初中计算机考试,众人同心勤耕耘 敢叫日月换新天
  9. CStatic类简介
  10. 读书:雨果的《巴黎圣母院》
  11. pycharm appiunm 公众号测试_知道答案公众号_知到APP笔尖上的艺术——书法基础与赏析单元测试答案_知道答...
  12. Linux 抓包工具 tcpdump
  13. 前端需要了解的色彩知识
  14. PostGIS 爆管分析之找出上游阀门
  15. sensor gyro_3d not found
  16. 西电计算机学院硕士生导师马,西安电子科技大学计算机学院研究生导师简介-周端...
  17. 【每天学一点】如何高效工作,进行项目管理
  18. keepass使用坚果云同步
  19. 建模方法(一)-博弈论中使用划线法求解纳什均衡
  20. html+css制作静态小米商城页面(含css手动轮播图)

热门文章

  1. 2022电赛C题:小车跟踪(方案1+核心代码)
  2. M,BB面试+职业求教
  3. Python实现BOA蝴蝶优化算法优化支持向量机回归模型(SVR算法)项目实战
  4. linux下qt使用谷歌拼音,GitHub - aron566/google_pinyinim: 谷歌拼音输入法移植至QT,纯widget实现...
  5. 中兴的知识产权之路:从防御到开放式竞争
  6. Shell 脚本 — 多行注释、开启子/不开启子进程执行、转义带颜色输出、读取键盘输入、输入输出重定向、单双引号、命令替换、读取变量、系统变量、正则过滤、算术运算、一行多条命令、字符串比较
  7. 如何选择GPS定位器
  8. OPPO Pad 2 参数 OPPOPad 2评测怎么样
  9. 双宾语与复合宾语,分词状语与独立主格状语
  10. 效果炸了,Drawable 实现红鲤鱼动画,点哪儿游哪儿(下)