POJ 1811 Prime Test --- Miller 素数测试
来源:互联网 发布:如何开手机淘宝 编辑:程序博客网 时间:2024/06/11 23:32
SOL:学下那个算法就OK了。。。
此题向我这么写只能用C++交,要不就RE,POJ 不让那么写随机数。
#include <stdio.h>#include <math.h>#include <cstring>#include <algorithm>#include <stdlib.h>#include <time.h>using namespace std;const int S = 8;//随即算法判定 long long mult_mod(long long a,long long b,long long c){a%=c;b%=c;long long ret=0;long long tmp=a;while(b){if(b&1){ret+=tmp;if(ret>c) ret-=c;}tmp<<=1;if(tmp>c) tmp-=c;b>>=1;}return ret;}long long pow_mod(long long a,long long n,long long mod){long long ret=1;long long tmp=a%mod;while(n){if(n&1) ret=mult_mod(ret,tmp,mod);tmp=mult_mod(tmp,tmp,mod);n>>=1;}return ret;}bool check(long long a,long long n,long long x,long long t){long long ret=pow_mod(a,x,n);long long last=ret;for(int i=1;i<=t;i++){ret=mult_mod(ret,ret,n);if(ret==1&&last!=1&&last!=n-1)return true;last=ret;}if(ret!=1) return true;else return false;}bool Miller_Rabin(long long n){if(n<2) return false;if(n==2) return true;if((n&1)==0) return false;long long x=n-1;long long t=0;while((x&1)==0){x>>=1;t++;}srand(time(NULL));for(int i=0;i<S;i++){long long a=rand()%(n-1)+1;if(check(a,n,x,t)) return false;}return true;}long long factor[100];int tol;long long gcd(long long a,long long b){long long t;while(b){t=a;a=b;b=t%b;}if(a>=0) return a;else return -a;}long long pollard_rho(long long x,long long c){long long i=1,k=2;srand(time(NULL));long long x0=rand()%(x-1)+1;long long y=x0;while(1){i++;x0=(mult_mod(x0,x0,x)+c)%x;long long d=gcd(y-x0,x);if(d!=1&&d!=x) return d;if(y==x0) return x;if(i==k){y=x0;k+=k;}}}void findfac(long long n,int k){if(n==1) return;if(Miller_Rabin(n)){factor[tol++]=n;return;}long long p=n;int c=k;while(p>=n)p=pollard_rho(p,c--);findfac(p,k);findfac(n/p,k);}int main(){int T;long long n;scanf("%d",&T);while(T--){scanf("%I64d",&n);if(Miller_Rabin(n))printf("Prime\n");else{tol=0;findfac(n,107);long long ans=factor[0];for(int i=1;i<tol;i++)ans=min(ans,factor[i]);printf("%I64d\n",ans);}}return 0;}
0 0
- POJ 1811 Prime Test --- Miller 素数测试
- Poj 1811 Prime Test 素数测试 Miller-Rabin 与 整数的因子分解 Pollard rho
- POJ 1811 Prime Test 素数测试
- POJ 1811 Prime Test (Miller-Robin+Pollard_rho)
- poj1811 Prime Test Pollard_rho法+miller素数测试法
- POJ 1811 Prime Test(素数判定Miller-Rabin+素因子分解Pollard-rho)
- poj 1811 Prime Test【 随机素数测试与大数分解】
- [POJ 1811]Prime Test---Miller-Rabin算法&Pollard-rho算法
- POJ1811 (Prime Test Pollard rho整数分解,Miller-Rabin素数测试)
- 【POJ1811】Prime Test-Miller-Rabin素数测试+Pollard-rho大数分解
- poj 1811 Prime Test(素数判断)
- POJ 1811 Prime Test(Pollard rho整数分解+miller_rabin素数测试)
- POJ 1811 Prime Test Miller-Rabin算法和Pollard rho算法
- HDu 2138 How many prime numbers 高效Miller素数测试
- poj 1811 Prime Test(大素数判定)
- poj 1811 Prime Test(数论:大素数判定-分解)
- POJ 1811 Prime Test(大素数判定+质因数分解)
- POJ1811_Prime Test【Miller Rabin素数测试】【Pollar Rho整数分解】
- 黑马程序员_泛型笔记
- 中国创造新的制度文明
- 详细剖析SQL查询(select语句)的每一步的逻辑处理---查询顺序及逻辑处理过程
- Java RMI 框架原理(远程方法调用)
- C++11的异步调用
- POJ 1811 Prime Test --- Miller 素数测试
- DWR实现省市级联
- 游戏 设计 理论{{{1
- Know the Core Objects of Your App
- VC---Explore.exe重启后,进程托盘消失恢复办法
- dio do ox sp
- Android中的ActionBar的简介(翻译自官方文档)——————个人笔记
- line 1: syntax error: "(" unexpected
- 超级实用且不花哨的js代码大全