求解线性同余方程组
2014-08-25 19:06
204 查看
求解线性同余方程组是个很古老的问题,在中国古代就给出了一种特殊的线性同余方程组的解法,那就是可用中国剩余定理求解的线性方程组,这个方程组有个特点,就是任意两个方程(x=b(mod m))的m直接互质,下面说一下它的一个解法:
方程组:x=b1(mod m1);
x=b2(mod m2);
x=b3(mod m3);
......
x=bn(mod mn);
特点:其中mi与mj互质(i!=j);mi>0,(0<i<=n);这里的所有的参数均为非负整数
求解:令M0=m1*m2*....mn;
Mi=M0/mi,(0 <i<=n);
Ci为方程Mi*x=1(mod mi)的一个特解,这个可以由扩展欧几里得直接解出来,(0<i<=n);
解为:x=b1*c1*M1+b2*c2*M2+.....+bn*cn*Mn(mod M0);
这里就不给出证明了,证明可以用解空间的关系来证,只需说明解出的这个作为解的方程与上述的所有条件方程的解相互包含即可,下面介绍一般的同余方程到 解法,也就是合共同余方程的方法:
对于普通的两个同余方程:
x=b1(mod m1);
x=b2(mod m2);
求解:约定gcd(m1,m2)表示m1和m2的最大公约数,lcm(m1,m2)表示它们的最小公倍数,那么就有:
m1*m2=gcd(m1,m2)*lcm(m1,m2) ;
上述的两个方程可以化为:
x+k1*m1=b1;
x-k2*m2=b2;
两式相减:
k1*m1+k2*m2=b1-b2;
所以两个方程有整数解的充要条件是:
gcd(m1,m2)|(b1-b2);(现不予以证明,"|"表示"可以整除")
假如有解:
k1*m1+k2*m2=b1-b2的通解k1为:
(k0为j1*m1+j2*m2=gcd(m1,m2)的j1的一个特解)
k1=(b1-b2)/gcd(m1,m2)*k0+t*m2/gcd(m1,m2)(t为任整数)
(不予以推导);
将k1的通解带回到:x+k1*m1=b1得到:
x=b1-m1*(b2-b1)/gcd(m1,m2)*k0+t*m1*m2/gcd(m1,m2)
x=b1-m1*(b2-b1)/gcd(m1,m2)*k0+t*lcm(m1,m2)
也就是:x=b1-m1*(b2-b1)/gcd(m1,m2)*k0(mod lcm(m1,m2));
这样就把两个可以合并的方程合并成了一个,运用此方法可以将多个方程最终合并成为一个, 也就是解出来了方程组
数论问题是个古老而又值得探索的问题,这些问题的研究是基础性的,是值得一代又一代的我们去不断的探索,希望上述的一个到处都有的解法能给读者一些东西
方程组:x=b1(mod m1);
x=b2(mod m2);
x=b3(mod m3);
......
x=bn(mod mn);
特点:其中mi与mj互质(i!=j);mi>0,(0<i<=n);这里的所有的参数均为非负整数
求解:令M0=m1*m2*....mn;
Mi=M0/mi,(0 <i<=n);
Ci为方程Mi*x=1(mod mi)的一个特解,这个可以由扩展欧几里得直接解出来,(0<i<=n);
解为:x=b1*c1*M1+b2*c2*M2+.....+bn*cn*Mn(mod M0);
这里就不给出证明了,证明可以用解空间的关系来证,只需说明解出的这个作为解的方程与上述的所有条件方程的解相互包含即可,下面介绍一般的同余方程到 解法,也就是合共同余方程的方法:
对于普通的两个同余方程:
x=b1(mod m1);
x=b2(mod m2);
求解:约定gcd(m1,m2)表示m1和m2的最大公约数,lcm(m1,m2)表示它们的最小公倍数,那么就有:
m1*m2=gcd(m1,m2)*lcm(m1,m2) ;
上述的两个方程可以化为:
x+k1*m1=b1;
x-k2*m2=b2;
两式相减:
k1*m1+k2*m2=b1-b2;
所以两个方程有整数解的充要条件是:
gcd(m1,m2)|(b1-b2);(现不予以证明,"|"表示"可以整除")
假如有解:
k1*m1+k2*m2=b1-b2的通解k1为:
(k0为j1*m1+j2*m2=gcd(m1,m2)的j1的一个特解)
k1=(b1-b2)/gcd(m1,m2)*k0+t*m2/gcd(m1,m2)(t为任整数)
(不予以推导);
将k1的通解带回到:x+k1*m1=b1得到:
x=b1-m1*(b2-b1)/gcd(m1,m2)*k0+t*m1*m2/gcd(m1,m2)
x=b1-m1*(b2-b1)/gcd(m1,m2)*k0+t*lcm(m1,m2)
也就是:x=b1-m1*(b2-b1)/gcd(m1,m2)*k0(mod lcm(m1,m2));
这样就把两个可以合并的方程合并成了一个,运用此方法可以将多个方程最终合并成为一个, 也就是解出来了方程组
数论问题是个古老而又值得探索的问题,这些问题的研究是基础性的,是值得一代又一代的我们去不断的探索,希望上述的一个到处都有的解法能给读者一些东西
相关文章推荐
- 算法学习之模线性同余方程组(中国剩余定理+求解同余方程组) poj1006+hdu3579
- 对两个数求解对大公约数
- 题目求解:把以行为主序的数存放到对应以列为主序的数组中
- 蚁群算法java实现以及TSP问题蚁群算法求解
- 第十一周项目4---利用遍历思想求解图问题(4)
- 第七章:暴力求解法。第二部分
- 第11周项目4 - 利用遍历思想求解图问题
- 求解素数问题
- 第十一周项目4(2)-利用遍历思想求解图问题
- MATLAB求解方程组
- 【西普实验吧】求解!
- 第一类边界条件,三角单元剖分,线性插值的位场延拓,LDLT高效求解
- 矩阵求导方法&最小二乘最优解求解过程
- SVM入门(五)线性分类器的求解——问题的描述Part2
- C语言进阶-第22~23讲:问题求解的一般过程&数据结构及算法概述
- 求解twitter面试题(墙壁装水问题)
- Josephus环问题——顺序表求解
- 回溯法求解N皇后问题
- 第十周——项目二—用二叉树求解代数表达式
- 问题求解