GCD 扩展GCD 快速GCD 模线性方程 模线性方程组 单独求欧拉函数 递推求欧拉函数
2013-07-26 08:34
513 查看
GCD:
扩展GCD: 求 x,y 使 gcd(a,b)=a*x+b*y;
快速GCD:某些大数据不能通过。
模线性方程:a*x = b(mod n)
模线性方程组:a=b[k](mod b[k]); 其中w,b已知,w[i]>0 且w[i]与w[j]互质,求a;(中国余数定理)
单独求欧拉函数:
递推求欧拉函数:
int GCD(int x, int y) { if (!x || !y) return x>y ? x: y; for (int t; t=x%y; x=y,y=t) ; return y; }
扩展GCD: 求 x,y 使 gcd(a,b)=a*x+b*y;
int extGCD(int a, int b, int &x, int &y) { if (!b) {x=1; y=0; return a; } int d=extGCD(b,a%b,x,y); int t=x; x=y; y=t-a/b*y; return d; }
快速GCD:某些大数据不能通过。
int kGCD(int x, int y) { if (!x || !y) return x>y ? x: y; if (!(x & 1) && !(y & 1)) return kGCD(x >> 1, y >> 1) << 1; else if (!(y & 1)) return kGCD(x,y >>1); else if (!(x & 1)) return kGCD(x >> 1,y); else return kGCD(abs(x-y),min(x,y)); }
模线性方程:a*x = b(mod n)
void modeq(int a, int b, int n) { int d,x,y; d=extGCD(a,n,x,y); if (b%d>0) printf("No Answer!\n"); else { int e=(x*(b/d))%n; for (int i=0; i<d; i++) // x¿ÉÄÜ<0 ? printf("%d-th ans: %d\n",i+1,(e+i*(n/d))%n); } }
模线性方程组:a=b[k](mod b[k]); 其中w,b已知,w[i]>0 且w[i]与w[j]互质,求a;(中国余数定理)
int china(int b[], int w[], int k) { int n=1,a=0; for (int i=0; i<k; i++) n*=w[i]; // 注意不要overflow; for (int i=0; i<k; i++) { int m,d,x,y; m=n/w[i]; d=extGCD(w[i],m,x,y); a=(a+y*m*b[i])%n; } if (a>0) return a; else return (a+n); }
单独求欧拉函数:
int euler(int x) { int res=x; for (int i=2; i*i<=x; i++) if (x % i==0) { res=res/i*(i-1); while(x % i==0) x/=i; } if (x>1) res=res/x*(x-1); return res; }
递推求欧拉函数:
int main() { int maxn=100; int phi[maxn+1]; for (int i=1; i<=maxn; i++) phi[i]=i; for (int i=2; i<=maxn; i+=2) phi[i]>>=1; for (int i=3; i<=maxn; i+=2) if (phi[i]==i) { for (int j=i; j<=maxn; j+=i) phi[j]=phi[j]/i*(i-1); } return 0; }
相关文章推荐
- POJ 1061 青蛙的约会(扩展GCD求模线性方程)
- 扩展gcd&模线性方程
- 【数论】gcd|扩展gcd|素数筛法|快速幂|欧拉函数(各种模板)
- POJ 1061 青蛙的约会(扩展GCD求模线性方程)
- 【欧拉函数+线性筛】bzoj2818: Gcd
- HDU 1576 A/B 扩展欧几里德算法 模线性方程入门题
- POJ 2118 Firepersons 线性递推 矩阵快速幂
- 【矩阵快速幂+递推方程】The Little Architect
- 矩阵快速幂在常系数线性递推关系中的应用
- [ACM] POJ 1061青蛙的约会(扩展欧几里得求模线性方程)
- POJ 3734 Blocks 线性递推 矩阵快速幂
- uva-12169&&hdu-2769-Disgruntled Judge 扩展欧几里得,模线性方程
- [BZOJ2818] Gcd (数论,欧拉函数,线性筛)
- bzoj 2818: Gcd 线性筛求欧拉函数
- bzoj 2818 gcd 线性欧拉函数
- POJ2115——C Looooops(扩展欧几里德+求解模线性方程)
- 四一。 数论 。4.19(gcd 扩展gcd,素数 ,快速幂)
- C Looooops(扩展欧几里得求模线性方程)
- [poj 2115]C Looooops[扩展欧几里德][模线性方程]
- [ACM] POJ 2115 C Looooops (扩展欧几里得求解模线性方程)