一元线性同余方程组

定义

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

求解

我们可以将其统一划成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/

你可能感兴趣的:(一元线性同余方程组)