测试大素数
来源:互联网 发布:EX30A1怎么编程 编辑:程序博客网 时间:2024/06/04 18:04
/* 测试大素数1.筛选法+试除法2.Miller_Rabin方法*//*下面是Miller_Rabin方法1.如果n是素数,且与a互质,则a^(n-1)≡1(mod n)(1<=a<=n);2.由于a≡a(mod n) =>a^n≡a(mod n)3.但是满足a^(n-1)≡1(mod n)的n不一定是素数4.想要知道n是否为素数,还需不断选取a,有可能出现伪素数5.时间复杂度0(k*(log2)^3(n))6.如果a^2≡1(mod n) 则必有a≡1(mod n)或者a≡n-1(mod n); 现在如果有一个大于2的质数n,零n-1=2^s*d,其中d为奇数, 则根据费马小定理,如果a不能被素数n整除,则a^(n-1)≡1(mod n); ==>a^d≡1(mod n)或者a^2≡1(mod n),a^(2^r*d)≡n-1( mod n),0<=r<=s,其中a为任意自然数。 这样,我们只要找到一个a,满足a^!≡1(mod n) 或者存在一个自然数r(0<=r<=s),使a^(2^r*d)!≡n-1( mod n),就可以说明不是素数7.事实上经过反复的实验,可以得出这样一个结论:对于32位内的任何一个整数n,如果其通过了一2,7,61为底的Miller-Rabin测试,那么n一定是素数,反之则一定不是*/#include<iostream>#include<cstdio>#include<cstring>#include<time.h>using namespace std;__int64 qpow(__int64 a,__int64 b,__int64 M){__int64 ans=1;while(b){if(b&1) ans*a,ans%=M;a*=a;a%=M;b>>=1;}return ans;}bool MillerRabinTest(__int64 x,__int64 n){__int64 y=n-1;while(!(y&1)) y>>=1;x=qpow(x,y,n);while(y<n-1&&x!=1&&x!=n-1){x=(x*x)%n,y<<=(__int64)1;}return x==n-1||y&1==1;}bool isprime32(__int64 n){if(n==2||n==7||n==61) return 1;if(n==1||(n&1)==0) return 0;return MillerRabinTest(2,n)&&MillerRabinTest(7,n)&&MillerRabinTest(61,n);}int main(){for(int i=2;i<=100;i++){if(isprime32(i)){cout<<i<<endl;}}cout<<"Time:"<<clock()<<endl;return 0;}
0 0
- 大素数测试
- 大素数“测试”
- 测试大素数
- Miller Rabbin 大素数测试
- Miller-Rabin测试-大素数问题
- 大素数测试的Miller-Rabin算法
- 大素数判断_fermat素性测试+Miller-Rabin素性测试
- 生成和测试N位大素数的方法
- 大范围素数筛法性能测试(2^64)
- 【算法编程】基于Miller-Rabin的大素数测试
- Miller_Rabin大素数测试与Pollard_rho整数分解模版
- Miller-Rabin素数测试和Pollard-rho大整数分解
- 大素数测试和大数素因子分解
- Miller_Rabin大素数测试 与 Pollard_rho整数分解模版
- 素数测试
- 素数测试
- 素数测试
- 素数测试
- python 深拷贝使用
- 数据结构绪论
- 项目预研:Android简略、快速的网络库: Volley ( Google IO 2013 )
- 【SAS系列】card语句与隐含循环
- Spotlight on mysql 监控[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
- 测试大素数
- NYOJ 50 爱摘苹果的小明
- Error LNK2001 无法解析的外部符号解决办法 .
- 心急的C小加
- 电子签章(Electronic Signature)在C#中的实现方法
- 理解 Android Build 系统
- VS2008下使用CppSQLite3访问xgs黑名单表(SQLite数据库)
- 酒店点餐系统c语言版
- Android 进阶 - Looper进程内通讯