一元线性同余方程组

定义

由若干个一元线性同余方程组构成的方程组,叫做一元线同余方程组。

求解

我们可以将其统一划成a*x ≡ b(mod m)的形式,这样有利于算法的实现。

既然是对同余方程组求解,那么必然得先会对同余方程求解,如果对同余方程求解仍有疑问,可以参考:http://www.cnblogs.com/heweiyou1993/p/3301886.html

对于同于方程组的求解,其实质过程就是对于其中的同余方程依次进行两两合并,然后对最终合并的最终同余方程进行求解即可(如果在合并的过程中发现无解则不需要再隽星合并,因为此时该方程组已经无解)。先给出同余方程合并的推到过程,如图所示:

 

核心代码

 1 long long RemainderEquationS(long long* a,long long* m,int k)
 2 {
 3     //数组a存储余数
 4     //数组m存储除数
 5     //k表示数组大小
 6     long long a1,a2,m1,m2,d;
 7     long long x,y;
 8     long long t,c;
 9     int flag;
10 
11     a1 = a[0];
12     m1 = m[0];
13     flag = 1;
14 
15     for(int i = 0 ; i < k; i++)
16     {
17         a2 = a[i];
18         m2 = m[i];
19         c = a2 - a1;
20         ExtendedEuclid(m1,m2,d,x,y);
21 
22         if(c % d)
23         {
24             flag = 0;
25             break;
26         }
27         t = m2 / d;
28         x = (x * c / d %t + t) % t;//确保x为最小正数
29         a1 = a1 + m1 * x;
30         m1 = m1 / d * m2;
31     }
32 
33     if(flag)
34         return a1;
35     else
36         return -1;
37 }

其中的 x 就是上面推到过程中的 K。

 

参考资料:

http://yzmduncan.iteye.com/blog/1323599/

posted @ 2013-09-04 20:06  Howey  阅读(1560)  评论(0编辑  收藏  举报