MySQL数素数_素数个数-欧拉筛法
求1,2,\cdots,N1,2,⋯,N 中素数的个数。
输入输出格式
输入格式:
1 个整数N。
输出格式:
1 个整数,表示素数的个数。
输入输出样例
输入样例#1: 复制
10
输出样例#1: 复制
4
说明
• 对于40% 的数据,1 \N \10^6
• 对于80% 的数据,1 \lN \10^7
• 对于100% 的数据,1 \N \10^8
当看到这道题的时候,我直接写下了逐个取余判断的代码,然而看到数据范围的时候我就慌了。。。
当时由于没学过关于素数筛选的算法,很显然除了打表我什么也干不了。。。
好吧,不废话了,直接步入正题:
由于这道题的数据范围较大,因此枚举肯定是行不通的,就算是使用正常筛法,面对10的八次方的数据也是显得十分的吃力,由此,我们要引入欧拉筛法(这里先介绍一下朴素筛法):
由于任何合数都可以拆分成若干素数的乘积,因此每当我们找到一个素数的时候,就可以将部分合数筛选出来,那么我们就解决的部分的问题。
并且讲到这里有一个隐含条件:就是没有被筛选出来的数就是素数(这个可以简化代码长度,也是理解这道题的关键),至于证明,我们可以用反证法:如果它不是素数,那么它一定是合数,而合数又可以拆分成两个素数的乘积,那么在找到它的因子的时候就一定会将其筛选出来。 证完
强忍着没有在证明的时候说显然。。。
但是,可能大家在证明的时候会发现一个问题:就是一个合数一次拆分时的素数因子可能不止一个,那么不就重复计算了吗?
因此我们要优化!!!(由此诞生了欧拉筛法)
由于下面讲解问题,我们先看代码:
1 #include
2 #include
3 int prime[100000005];4 bool vis[100000005];5 int Prime(intn)6 {7 int ans=0;8 for(int i=2; i<=n; i++)9 {10 if(!vis[i])11 prime[ans++]=i;12 for(int j=0; j
其实也很好理解:由于合数可以拆分成不同素数*k(k∈Z),那么当我们筛选时只要筛选出最小素数因子即可,比如12
12=4*3=6*2 很显然,我们需要的就是用素数2来筛选掉12,那么怎么实现呢?
其实这其中有一个规律:由于i是由小到大枚举的,并且数组中的素数也是由小到大枚举的,那么显然我们会先看到4*3,又因为4在和素数2筛掉8时发现竟然能被整除,并且接下来的4*3是没有意义的计算,那么每当i%素数==0是跳出即可。
如果你要问我具体该如何证明那我可以简单说一下:
由于p[j]*k(k∈Z)=i,那么a[j+1]*i=a[j]*k*a[j+1],所以a[j]乘以某个数一定在将来会把这个合数筛掉,由于a[j]比a[j+1]小,那么a[j]才可能是最小素数因子。
好的,我讲完了(好长啊qwq)
MySQL数素数_素数个数-欧拉筛法相关推荐
- 素数计算之埃氏筛法、欧拉筛法
埃氏筛法 int main() {const int maxNumber=200;int isPrime[maxNumber];int i;int x;for (i=0;i<maxNumber; ...
- 快速求素数表——埃氏筛法与欧拉筛法
快速求素数表--埃氏筛法与欧拉筛法 快速求素数表埃氏筛法与欧拉筛法 埃氏筛法 埃氏筛法原理 埃氏筛法时间复杂度 埃氏筛法代码求出1000000以内的素数并且输出n个素数 欧拉筛法 欧拉筛法原理 欧拉筛 ...
- 素数筛法(传统普通、朴素筛法、埃式筛法、欧拉筛法(线性筛))
素数筛法(普通.朴素筛法.埃式筛法.欧拉筛法) 1.题目 2.分析 3.代码 传统普通 朴素筛法 朴素筛法(6.14) 埃式筛法 埃式筛法(6.14) 欧拉筛法(线性筛) 欧拉筛法(线性筛 6.14) ...
- UVA12039 Goldbach‘s Cardinality【欧拉筛法】
Goldbach's cardinality (GC) of an even number means the number of ways the even number can be expres ...
- 埃拉托色尼筛法和欧拉筛法
筛法 筛法的基本思想是:把从1开始的.某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉.剩下的数中最小的数是素数,然后去掉它的倍数.依次类推,直到筛子为空时结束. 比如,要产生[2,n] ...
- UVA11876 N + NOD (N)【欧拉筛法+前缀和】
Consider an integer sequence N where, N0 = 1 Ni = Ni−1 + NOD(Ni−1) for i > 0 Here, NOD(x) = n ...
- 筛质数—(朴素筛法、埃氏筛法、欧拉筛法(线性筛法))
筛质数时首先要了解质数的定理:1~n中有 个质数 下面再来看具体算法: 1.朴素筛法: 直接把2~n-1中质数和合数的倍数都筛一遍,其代码如下所示: int primes[N],cnt=0; boo ...
- 欧拉筛法(线性筛)的学习理解
前言 在刚接触编程语言时,对于寻找素数,第一时间想到的便是二重循环暴力查找,其复杂度O(n^2),通过循环中只判断到根号n可以优化一些,不过复杂度也达不到预期.在数论的学习中,我学到了埃氏筛法,O(n ...
- 质数c语言欧拉筛选,Python|欧拉筛法求质数
欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 我们知道第一个质数是 2.第二个质数是 3.第三个质 ...
- UVA516 POJ1365 LA5533 ZOJ1261 Prime Land【欧拉筛法】
Everybody in the Prime Land is using a prime base number system. In this system, each positive integ ...
最新文章
- 希尔伯特著名的第六问题 – 原来麦克斯韦早就有解?
- 屏蔽storm ui的kill功能
- 《压缩感知理论及其研究进展》读书笔记
- python config配置文件的读写--configparser
- matlab数学实验课件4,数学实验4_数学实验_doc_大学课件预览_高等教育资讯网
- 博客堂怎么连个搜索功能都没有
- WinCE的I2C驱动程序设计
- 作者:李廉(1951-),男,合肥工业大学计算机与信息学院教授
- MySQL GTID复制Slave跳过错误事务Id以及复制排错问题总结
- 视觉SLAM笔记(55) 位姿图
- 算法导论 练习9.3-8两个有序数组的中位数
- mysql swarm_【Docker】 Swarm简单介绍
- 数组、字符串长度的计算(转)
- 域名被hold了怎么办?
- detectron2 c++ 部署笔记
- Linux学习-redis主从架构
- 追风人拍到壮观龙卷风
- 判断字符串是否为回文串
- 三维pcd地图转二维栅格地图
- 浅谈运营商线路-----TDM、SDH、MSTP,OTN