菜鸟系列——pollard_rho分解质因子
来源:互联网 发布:mac磁盘恢复到单一分区 编辑:程序博客网 时间:2024/06/05 15:44
菜鸟就要老老实实重新学起:
pollard_rho分解质因子:
利用miller-rabin和pollard_rho算法进行大素数判断和素因子分解。
模版:
long long factor[1000];//质因数分解结果(刚返回时是无序的)int sum;//质因数的个数。数组小标从0开始#define T 100//随机算法判定次数,N越大,判错概率越小long long modMul(long long a,long long b,long long n){ long long res = 0; while(b) { if(b&1) res = (res + a) % n; a = (a + a) % n; b >>= 1; } return res;}long long modExp(long long x,long long k,long long mod){ long long ans = 1; while(k) { if(k & 1) ans = modMul(ans, x, mod); x = modMul(x, x, mod); k >>= 1; } return ans;}bool millerRabin(long long n){ if(n == 2 || n == 3 || n == 5 || n == 7 || n == 11) return true; if(n == 1 || !(n%2) || !(n%3) || !(n%5) || !(n%7) || !(n%11)) return false; long long x, pre, u; int i, j, k = 0; u = n - 1; while(!(u&1)) { k++; u >>= 1; } srand((long long)time(0)); for(i = 0; i < T; ++i) { x = rand()%(n-2) + 2; if((x%n) == 0) continue; x = modExp(x, u, n); pre = x; for(j = 0; j < k; ++j) { x = modMul(x,x,n); //二次探测判断 if(x == 1 && pre != 1 && pre != n-1) return false; pre = x; } //费小判断 if(x != 1) return false; } return true;}long long gcd(long long a,long long b){ if(a==0)return 1; if(a<0) return gcd(-a,b); while(b) { long long t=a%b; a=b; b=t; } return a;}long long pollardRho(long long x,long long c){ long long i=1,k=2; long long x0=rand()%x; long long y=x0; while(1) { i++; x0=(modMul(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;} }}//对n进行素因子分解void findFac(long long x){ srand((long long)time(0)); if(millerRabin(x))//素数 { factor[sum++]=x; return; } long long p=x; while(p>=x) p=pollardRho(p,rand()%(x-1)+1); findFac(p); findFac(x/p);}
0 0
- 菜鸟系列——pollard_rho分解质因子
- pollard_rho(大数质因子分解)
- HDU 3864 pollard_rho大数质因子分解
- [POJ 1811 Prime Test] Miller_Rabin + Pollard_rho 大数质数判断/质因子分解模板
- Pollard_rho算法模板(大整数的因子分解)
- POJ 2429 GCD & LCM Inverse Pollard_rho大数因子分解
- miller_rabin素数判断和pollard_rho的素数因子分解算法
- 素因子分解超快的Pollard_rho算法
- POJ 2429 -- miller-rabin素数测试,Pollard_rho素因子分解
- uva10892——LCM Cardinality(最小公倍数质因子分解)
- 分解质因子
- 1365-质因子分解
- 【分解质因子】零
- 质因子分解
- 质因子分解
- 分解质因子问题
- 质因子分解
- 正整数分解质因子
- 在Oracle建立CDC
- CFileDialog类应用详解
- IP网际协议
- CSS链接样式设置
- isis_receive:收包流程
- 菜鸟系列——pollard_rho分解质因子
- poj 1844 数学(1+/- ... k)
- HDU5001 Walk
- Android 通过广播接听Home键
- 03-树1. 二分法求多项式单根(20) Python
- postgresql继承方式实现分区
- hdoj 4006 The kth great number
- Number of Digit One
- 收藏网址