完整代码见https://github.com/YIWANFENG/Algorithm-github
即若干个线性同余方程的组合。
求解方式可以参考我们普通的方程组,先解式1,将式1的通解带入式2后化简,再解式2,如此重复即可得满足所有式子的解。
例如
以上适合笔算,但是在程序中表述一般解法,就需要用到等式合并或者中国剩余定理
以下为推导,红色圈出部分为编码时所用的结论。
Code:
//
// 合并方程求解线性同余方程组
//
void linear_congruences2(int a,int b,int n){
//求得 ax = b (mod n)
if(b % gcd(a,n) == 0){
int x,y,d,c,re;
if (n>a) {
c = a;
a = n;
n = c;
d = gcdEx(a,n,x,y);
re = y*b/d;
cout<<"通解"<
Code:
int linear_congruences(int a,int b,int n){
//ax = b (mod n)
if(b % gcd(a,n) == 0){
int x,y,d,c,re;
if (n>a) {
c = a;
a = n;
n = c;
d = gcdEx(a,n,x,y);
re = y*b/d;
} else {
d = gcdEx(a,n,x,y);
re = x*b/d;
}
return re ;
} else {
return 0; //error
}
}
void crh(int a[],int m[],int n) {
//中国剩余定理求解线性同余方程组(不判断是否有解)
int m_product = 1;
int M[n];
int t[n];
int x=0;
for(int i=0;i