中国剩余定理的解析及记忆(扩展欧几里得算法的运用)
来源:互联网 发布:1880淘宝合同 编辑:程序博客网 时间:2024/05/16 07:45
中国剩余定理简单解释一下:设m1,m2,m3....mk两两互素,下面称为同余方程组x=a1*k1+m1;x=a2*k2+m2;x=a3*k3+m3;.....其中a1,a2,a3...是已知的,m1,m2,m3..也是已知的要求x,但可以不用求系数k原理:x会存在整数解,且在M=m1*m2*m3*...*mk下的解是唯一的即x=(a1*M1*M1^-1+a2*M2*M2^-1+..+ak*Mk*Mk^-1)mod M其中Mi=M/mi,也就是除去mi的总积,而Mi^-1是Mi mod mi的逆元,简单来说:求Mi*x = 1( mod mi) 的x值,就是Mi的逆元也就是满足Mi*x+mi*y=1的x值;因为mi彼此互素,所以Mi与mi也互素,所以最大公约数为1,直接代入扩展欧几里得函数求x。int CRT(int a[],int m[],int n) { int M = 1; int ans = 0; for(int i=1; i<=n; i++) M *= m[i]; for(int i=1; i<=n; i++) { int x, y; int Mi = M / m[i]; extend_gcd(Mi, m[i], x, y); ans = (ans + Mi * x * a[i]) % M; //最终ans=(a1*M1*M1^-1+a2*M2*M2^-1+..+ak*Mk*Mk^-1)mod M } if(ans < 0) ans += M; //有可能ans<0,因为系数有可能为负数,再加一个M就可以了 return ans; }下面这个就是扩展欧几里得算法,上面有用到,实际上就是求能使ax+by=d成立的x和y以及d(是a,b最小公约数),其中a,b已知但实际上题目给我们的方程一般右边是d的倍数,所以用这个方法得到的x,y并不一定是题目的解,还要都乘以这个倍数.long long extend_gcd(long long a,long long b,long long &x,long long &y){if(a==0&&b==0) return -1;//无最大公约数if(b==0){x=1;y=0;return a;}long long d=extend_gcd(b,a%b,y,x);//要记住这里的y和x换了顺序y-=a/b*x;//要记住是a在上面,b在下面return d;//d=gcd(a,b);也就是a,b最小公约数}
0 0
- 中国剩余定理的解析及记忆(扩展欧几里得算法的运用)
- 中国剩余定理及扩展欧几里得算法
- 扩展的欧几里得&中国剩余定理
- 欧几里得+扩展的欧几里得算法+线性同余方程+中国剩余定理
- poj1006 扩展欧几里得算法+中国剩余定理
- [BZOJ2142] 礼物 - Lucas定理及扩展 - 中国剩余定理 - 扩展欧几里得算法
- 中国剩余定理的扩展
- 中国剩余算法及欧几里德的扩展
- (hdu1573)X问题(中国剩余定理+扩展欧几里得算法)
- 扩展欧几里得算法,中国剩余定理(Two Arithmetic Progressions,cf 710D)
- poj1006:Biorhythms(中国剩余定理,扩展欧几里得)
- 扩展欧几里得、中国剩余定理 入门指南
- poj1006_Biorhythms_扩展欧几里得_中国剩余定理
- Strange Way to Express Integers(扩展欧几里得+乘法逆元+中国剩余定理求解非互质的模线性方程组)
- 扩展欧几里得算法及其应用,逆元简介,中国剩余定理简介
- 中国剩余定理的应用及证明
- POJ 1006 Biorhythms 中国剩余定理/扩展欧几里得
- [BZOJ 1407][NOI 2002]Savage(中国剩余定理+扩展欧几里得)
- C++实验4-乘法口诀表
- 【华为OJ】【002-计算字符个数】
- java--反射机制
- eclipse插件地址
- JAVA-Java概述
- 中国剩余定理的解析及记忆(扩展欧几里得算法的运用)
- 关于二分图问题的总结
- KMP字符串匹配算法的解析及记忆
- 如何将maven项目打包成可执行的jar
- 作为一个程序员我为什么要写博客?
- 【华为OJ】【003-明明的随机数】
- 344. Reverse String
- super
- Hive 知识