一元线性同余方程组
定义
由若干个一元线性同余方程组构成的方程组,叫做一元线同余方程组。
求解
我们可以将其统一划成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。
参考资料:
博客内容未经声明均为原创,转载请注明出处。