扩展中国剩余定理
2018-02-22 11:12
302 查看
若有以下两个同余方程
x ≡ a1 mod n1
x ≡ a2 mod n2
x= n1*k1+a1 = n2*k2+a2
∴ n1*k1 = n2*k2+a2-a1
∴ n1*k1 ≡ a2-a1 mod n2
由扩展欧几里得定理得,同余方程有解的条件是 gcd(n1,n2) | (a2-a1)
令d=gcd(n1,n2),c=a2-a1
则n1/d * k1 ≡ c/d mod n2/d
∴ k1 = c/d * inv(n1/d)mod n2/d
令k=c/d * inv(n1/d),则k1 = k + (n2/d)*y
∴ x=n1*(k + (n2/d)*y)+a1
=(n1*n2/d)*y+n1*k+a1
即 x ≡ n1*k+a1 mod n1*n2/d
所以上面两个方程合并为 x ≡ a mod n
其中 a=n1*k+a1 n=n1*n2/d
x ≡ a1 mod n1
x ≡ a2 mod n2
x= n1*k1+a1 = n2*k2+a2
∴ n1*k1 = n2*k2+a2-a1
∴ n1*k1 ≡ a2-a1 mod n2
由扩展欧几里得定理得,同余方程有解的条件是 gcd(n1,n2) | (a2-a1)
令d=gcd(n1,n2),c=a2-a1
则n1/d * k1 ≡ c/d mod n2/d
∴ k1 = c/d * inv(n1/d)mod n2/d
令k=c/d * inv(n1/d),则k1 = k + (n2/d)*y
∴ x=n1*(k + (n2/d)*y)+a1
=(n1*n2/d)*y+n1*k+a1
即 x ≡ n1*k+a1 mod n1*n2/d
所以上面两个方程合并为 x ≡ a mod n
其中 a=n1*k+a1 n=n1*n2/d
#include<cstdio> #include<iostream> using namespace std; typedef long long LL; int n[11],a[11]; void read(int &x) { x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); } } int gcd(LL a,LL b,LL &x,LL &y) { if(!b) { x=1; y=0; return a;} LL g=gcd(b,a%b,y,x); y-=a/b*x; return g; } int main() { int T,m; read(T); LL a1,n1,a2,n2; LL d,c,k; LL x,y; while(T--) { read(m); for(int i=1;i<=m;++i) read(n[i]); for(int i=1;i<=m;++i) read(a[i]); bool tag=true; a1=a[1],n1=n[1]; for(int i=2;i<=m;++i) { a2=a[i]; n2=n[i]; d=gcd(n1,n2,x,y); c=a2-a1; if(c%d) { tag=false; break; } gcd(n1/d,n2/d,x,y); k=(x*c/d%(n2/d)+n2/d)%(n2/d); a1=(a1+n1*k)%(n1/d*n2); n1=n1/d*n2; } if(!tag) printf("No solution\n"); else printf("%I64d\n",a1); } }
相关文章推荐
- 【bzoj2142】礼物 扩展Lucas定理+中国剩余定理
- 扩展欧几里得、逆元、线性同余方程组、中国剩余定理总结
- 中国剩余定理的扩展
- [BZOJ2142] 礼物 - Lucas定理及扩展 - 中国剩余定理 - 扩展欧几里得算法
- [BZOJ 1951] 古代猪文【Lucas定理/费马小定理/中国剩余定理/扩展欧几里得】
- 中国剩余定理及其扩展——学习(复习)笔记
- BZOJ_P1951&Codevs_P1830 [SDOI2010]古代猪文(Lucas定理+扩展欧几里得+中国剩余定理)
- LOJ2721 [NOI2018] 屠龙勇士 【扩展中国剩余定理】
- HDU 5768Lucky7(多校第四场)容斥+中国剩余定理(扩展欧几里德求逆元的)+快速乘法
- 扩展中国剩余定理模板
- gcd,扩展欧几里得,中国剩余定理
- 扩展中国剩余定理
- 中国剩余定理与扩展 Lucas定理与扩展 学习笔记
- 2018年全国多校算法寒假训练营练习比赛(第三场) B 一个小问题【CRT 扩展中国剩余定理 板子题】
- <《模板》扩展欧几里德--求二元一次方程-及中国剩余定理>
- 扩展中国剩余定理讲解
- [BZOJ2142]礼物-扩展lucas定理-中国剩余定理
- [Codeforces2015ICL,Finals,Div. 1#J]Ceizenpok's formula(扩展Lucas定理+中国剩余定理)
- POJ 2891 Strange Way to Express Integers[中国剩余定理(非互质)][扩展欧几里得]
- 洛谷P3868 [TJOI2009]猜数字(中国剩余定理,扩展欧几里德)