hiho 1295 数论二·Eular质数筛法【线性筛】
来源:互联网 发布:村淘宝服务站怎么赚钱 编辑:程序博客网 时间:2024/05/21 17:10
描述
小Ho:小Hi,上次我学会了如何检测一个数是否是质数。于是我又有了一个新的问题,我如何去快速得求解[1,N]这个区间内素数的个数呢?
小Hi:你自己有什么想法么?
小Ho:有!我一开始的想法是,自然我们已经知道了如何快速判定一个数是否是质数,那么我就直接将[1,N]之间每一个数判定一次,就可以得到结果。但我发现这个方法太笨了。
小Hi:确实呢,虽然我们已经通过快速素数检测将每一次判定的时间复杂度降低,但是N个数字的话,总的时间复杂度依旧很高。
小Ho:是的,所以后来我改变了我的算法。我发现如果一个数p是质数的话,那么它的倍数一定都是质数。所以我建立了一个布尔类型的数组isPrime,初始化都为true。我从2开始枚举,当我找到一个isPrime[p]仍然为true时,可以确定p一定是一个质数。接着我再将N以内所有p的倍数全部设定为isPrime[p*i]=false。
写成伪代码为:
isPrime[] = trueprimeCount = 0For i = 2 .. NIf isPrime[i] ThenprimeCount = primeCount + 1multiple = 2While (i * multiple ≤ N)isPrime[i * multiple] = falsemultiple = multiple + 1End While End IfEnd For
小Hi:小Ho你用的这个算法叫做Eratosthenes筛法,是一种非常古老的质数筛选算法。其时间复杂度为O(n log log n)。但是这个算法有一个冗余的地方:比如合数10,在枚举2的时候我们判定了一次,在枚举5的时候我们又判定了一次。因此使得其时间复杂度比O(n)要高。
小Ho:那有没有什么办法可以避免啊?
小Hi:当然有了,一个改进的方法叫做Eular筛法,其时间复杂度是O(n)的。
提示:Eular质数筛法
输入
第1行:1个正整数n,表示数字的个数,2≤n≤1,000,000。
输出
第1行:1个整数,表示从1到n中质数的个数
9
4
AC代码(模板):
<strong><span style="font-size:12px;">#include <iostream>#include <stdio.h>using namespace std ;int isprime[1000000+10] ;int primelist[1000000+10] ;int eular(int n ){ int ans = 0 ; for(int i = 2 ; i <= n ; i++) { if(!isprime[i]) primelist[ans++] = i; for(int j = 0 ; j < ans ; j++) { if(i*primelist[j] > n) break; isprime[i*primelist[j]] = 1; if(i%primelist[j]==0) break; } } return ans ;}int main(){ int n ; scanf("%d",&n); cout<<eular(n)<<endl; return 0 ;}</span></strong>
0 0
- HIHO #1295 : 数论二·Eular质数筛法
- hiho 1295 数论二·Eular质数筛法【线性筛】
- 数论二·Eular质数筛法
- hiho一下 第九十三周 数论二·Eular质数筛法
- hiho一下 第九十三周 数论二·Eular质数筛法
- hiho第九十三周 数论二·Eular质数筛法
- hihocoder 1295 : 数论二·Eular质数筛法
- hihocoder 数论二·Eular质数筛法
- hihocoder第九十三周 数论二·Eular质数筛法
- Eular质数筛法
- Eular质数筛法
- ACM:数论专题(2)——Eular质数筛法
- HihoCoder 93week Eular质数筛法
- HIHO #1287 : 数论一·Miller-Rabin质数测试
- hiho一下 第九十二周 数论一·Miller-Rabin质数测试
- hiho一下 第九十二周 数论一·Miller-Rabin质数测试
- Hiho 数论一·Miller-Rabin质数测试,大素数判断
- hiho第九十二周数论一·Miller-Rabin质数测试
- 第八部分:案例研究
- 一个用x86汇编编写的、页式管理、图形化的CS -- Core篇
- 让Apache支持PHP5
- 按钮点击切换背景图片(两种情况)
- 滚动条滚动到底部(这里用的是 触摸事件哦 , 而且依赖jq)
- hiho 1295 数论二·Eular质数筛法【线性筛】
- Android 自动更新功能
- 翻译windows internals 第12章文件系统(持续更新)
- Java 打印数组
- Android 动画 - AlphaAnimation渐变动画
- 命名空间
- Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用
- linux基础(36)--xfs文件系统管理--RHEL7.2
- jQuery实现点击除了特定div的页面其它地方,隐藏该div功能。