素数判定(素数筛法)(欧拉)
来源:互联网 发布:linux安装yum 编辑:程序博客网 时间:2024/06/05 18:04
这里主要说一下素数筛法,该方法可以快速的选取出1~N数字中的所有素数。时间复杂度远小于O(N*sqrt(N))
方法为:从2开始,往后所有素数的倍数都不是素数。最后剩下的数都是素数。
再说说欧拉公式,用来解决所有小于n中的数字有多少个与n互质,用Ψ(n)表示。
Ψ(n)=n*(1-1/q1)*(1-1/q2)*……*(1-1/qk),n为和数,其中qi为n的质因数。
Ψ(n)=n-1,n为质数
Ψ(n)=n-1,n为质数
下面有网上的几种表示,
<span style="color:#ff6666;">// 1:这是最原始的筛法,还有待优化 </span>#define Max 1000000bool prime[Max];void IsPrime(){ prime[0]=prime[1]=0;prime[2]=1; for(int i=3;i<max;i++) prime[i]=i%2==0?0:1; int t=(int)sqrt(Max*1.0); for(int i=3;i<=t;i++) if(prime[i]) for(int j=i;j<Max;j+=i) prime[j]=0;}<span style="color:#ff6666;">//2:优化后的筛法,手动地模拟原始筛法就可以发现,某个数字可能被不止一次地删去// 优化后的筛法就可以避免这种不必要的删去操作 </span>#define Max 1000000bool prime[Max];void IsPrime(){ prime[0]=prime[1]=0;prime[2]=1; for(int i=3;i<max;i++) prime[i]=i%2==0?0:1; int t=(int)sqrt(Max*1.0); <span style="color:#ff9900;"><span style="color:#330033;">for(int i=3;i<=t;i++) if(prime[i]) for(int j=i*i;j<Max;j+=2*i)//优化 prime[j]=0;}</span></span>
<span style="color:#ff9900;">//这就是素数的二次筛法//与前两种筛法不同,此种筛法中prime[i]=2*i+3(即:我们只存储奇数,偶数肯定不是素数的) </span>#define Max 1000000bool prime[Max>>1];void IsPrime(){ memset(prime,true,sizeof(prime)); int n=Max>>1,m=(int)(sqrt(Max*1.0)/2.0); for(int i=0;i<=m;i++) if(prime[i]) for(int j=2*i*i+6*i+3;j<=n;j+=2*i+3) isprime[j]=false;}
上面两种方法的运行速率都比较快,以前用的素数比较法,虽然看起来简单,但是效率低;这种方法还是要靠自己理解。
0 0
- 素数判定(素数筛法)(欧拉)
- 素数判定(2012)
- csu(欧拉函数+筛素数)
- hdoj2012素数判定(素数打表)
- 素数判定 (素数)【HDU】-2012
- CODE【VS】2849 素数判定 3(米勒拉宾素数测试的方法)
- 100以内素数判定(筛选法)
- hdu1286 找朋友 (欧拉函数+素数筛法)
- 欧拉素数筛
- nefu 582 素数判定(素数筛法和基本法双排)
- 素数判定(费马小定理)
- 梅森素数(判定)
- 质数(素数)判定算法
- 素数的判定(常规)
- BZOJ 4802 欧拉函数(素数判定Miller-Rabin+素因子分解Pollard-rho+欧拉函数)
- hdu 1395 欧拉定理+快速幂+素数判定
- 线性筛选素数(欧拉筛选)
- 素数判定 & 素数筛法 & poj_3292_Semi-prime H-numbers
- Android 属性动画(Property Animation) 完全解析
- Spring JdbcTemplate 与 事务管理
- LeetCode-226:Invert Binary Tree
- Android 关于监听键盘状态的一个偏方
- java常量池以及“==”字符串比较
- 素数判定(素数筛法)(欧拉)
- linux 下oracle 11g sys和system密码丢失
- C++中类的组合与构造函数
- hdoj1222Wolf and Rabbit
- PAT 1015Graduate Admission (30)
- spark 1.6.0 core源码分析9 从简单例子看action
- jdk1.6 完美卸载
- hdu5727 Necklace(枚举+匈牙利)
- 如何进行mysql的优化