Miller-Rabin及Pollard-Rho算法学习小记
来源:互联网 发布:折800被淘宝封了 编辑:程序博客网 时间:2024/04/30 00:50
质数快速判断算法Miller-Rabin
不想详细写了,因为也不会证。
贴板子!
bool Miller_Rabin(ll n){ if (n==1) return 0; int s=5,t=0,i; ll a,p,k=n-1; while (k%2==0) k/=2,t++; while (s--){ a=random(n-1)+1; p=a=qsm(a,k,n); fo(i,1,t){ a=mul(a,a,n); if (a==1&&p!=1&&p!=n-1) return 0; p=a; } if (a!=1) return 0; } return 1;}
因数快速分解算法Pollard-Rho
不想详细写了,因为也不会证。
贴板子!
ll Pollard_Rho(ll n){ ll k,x,y,c,d,i=1; while (1){ c=random(n-1); k=2;y=x=random(n); i=1; while (1){ y=(mul(y,y,n)+c)%n; d=gcd(abs(x-y),n); if (i==k) x=y,k<<=1; i++; if (d!=1) break; } if (d!=n) return d; }}
BZOJ3667
裸题
#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef long long ll;int i,j,k,l,t,m,ca;ll n,ans;ll random(ll x){ ll t=rand()%10000; t=t*10000+rand()%10000; t=t*10000+rand()%10000; t=t*10000+rand()%10000; return t%x;}ll mul(ll a,ll b,ll p){ ll tmp=(a*b-(ll)((long double)a/p*b+1e-8)*p); return tmp<0?tmp+p:tmp;}ll qsm(ll x,ll y,ll mo){ if (!y) return 1; ll t=qsm(x,y/2,mo); t=mul(t,t,mo); if (y%2) t=mul(t,x,mo); return t;}bool Miller_Rabin(ll n){ if (n==1) return 0; int s=5,t=0,i; ll a,p,k=n-1; while (k%2==0) k/=2,t++; while (s--){ a=random(n-1)+1; p=a=qsm(a,k,n); fo(i,1,t){ a=mul(a,a,n); if (a==1&&p!=1&&p!=n-1) return 0; p=a; } if (a!=1) return 0; } return 1;}ll gcd(ll a,ll b){ return b?gcd(b,a%b):a;}ll Pollard_Rho(ll n){ ll k,x,y,c,d,i=1; while (1){ c=random(n-1); k=2;y=x=random(n); i=1; while (1){ y=(mul(y,y,n)+c)%n; d=gcd(abs(x-y),n); if (i==k) x=y,k<<=1; i++; if (d!=1) break; } if (d!=n) return d; }}void work(ll n){ if (Miller_Rabin(n)){ ans=max(ans,n); return; } ll p=Pollard_Rho(n); ll q=n/p; work(p);work(q);}int main(){ srand(19890604); scanf("%d",&ca); while (ca--){ scanf("%lld",&n); ans=0; work(n); if (ans==n) printf("Prime\n");else printf("%lld\n",ans); }}
0 0
- Miller-Rabin及Pollard-Rho算法学习小记
- POJ1811--miller rabin&pollard rho
- [POJ 1811]Prime Test---Miller-Rabin算法&Pollard-rho算法
- 【Pollard Rho模板】【bzoj 3667】: Rabin-Miller算法
- bzoj 3667: Rabin-Miller算法 (Miller_rabbin+Pollard rho)
- BZOJ 3667 Pollard-rho &Miller-Rabin
- Pollard的rho启发式因子分解算法 & [CodeVS 4939] 欧拉函数:Miller-Rabin + Pollard-rho 质因数分解
- POJ 1811 Prime Test Miller-Rabin算法和Pollard rho算法
- POJ 2429 GCD & LCM Inverse【miller-rabin算法+pollard rho 算法】
- 【知识点】大数分解与素数判定 --- 【Miller-rabin算法】【pollard-rho算法】
- 素数判定与大数分解【Miller-rabin算法】【pollard-rho算法】
- POJ1811 miller-rabin素数测试pollard-rho质因子分解
- Miller-Rabin素数测试和Pollard-rho大整数分解
- poj1811(Miller-Rabin(素数测试)与Pollard rho(整数的因子分解))
- Poj 1811 Prime Test 素数测试 Miller-Rabin 与 整数的因子分解 Pollard rho
- HDU 3864 D_num Miller Rabin 质数判断+Pollard Rho大整数分解
- POJ1811 (Prime Test Pollard rho整数分解,Miller-Rabin素数测试)
- POJ 1811 Prime Test(素数判定Miller-Rabin+素因子分解Pollard-rho)
- javascript 学习之原型示例练习--- 实现一个each方法,遍历多维数组
- java 技术:spring 理解
- 关于AngularJs中监听事件及脏循环的理解
- Linux各个目录的作用及内容
- 2017PHP面试
- Miller-Rabin及Pollard-Rho算法学习小记
- Eclipse 开启断言(assert)
- Cursor对象的常用方法
- L1-002. 打印沙漏
- 设计模式的原则
- android:maxLines="1"截取显示不全,用android:singleLine="true"解决
- Linux中执行shell脚本的4种方法总结
- glide:缓存基础
- 静态变量存储在哪个区