文章目录
一、解析

 GCD()
 输入M,m,以及初始迭代值x,y,返回M mod m的逆元
 Mod_B_A_Inv()
 输入M,m,返回a在区间[1,m)之间的逆元
 CR_T()
 同余方程组:X=A mod M
 输入A,M,输出方程组的解X
二、思路
流程:
 通过GCD()得到一个逆元M^-1
 通过Mod_B_A_Inv()调整逆元M^-1
 通过CR_T()得到一系列的逆元:M_1^ -1,M_2^-1…,结合中国剩余定理给出同余方程组的解X
三、效果

四、代码
1、Mian
A_1=[2 3 2];
M_1=[3 5 7];
disp(CR_T(A_1,M_1));
A_1=[1 5 4 10];
M_1=[5 6 7 11];
disp(CR_T(A_1,M_1));
A_1=[2 5 2 10 10];
M_1=[5 6 7 11 13];
disp(CR_T(A_1,M_1));
 
2、CR_T
function [ret] = CR_T(A,M)
Size=size(A);
Multi_M=1;
Multi_M_i=[];
Multi_M_i_Inv=[];
for i=1:Size(2)
    Multi_M=Multi_M*M(i);
end
for i=1:Size(2)
    Multi_M_i=[Multi_M_i Multi_M/M(i)];
end
for i=1:Size(2)
    Multi_M_i_Inv=[Multi_M_i_Inv Mod_B_A_Inv(Multi_M_i(i),M(i))];
end
ret=mod(sum(Multi_M_i_Inv.*Multi_M_i.*A),Multi_M);
end
 
3、Mod_B_A_Inv
function [ret] = Mod_B_A_Inv(a,b)
A=[a,b];
Ini_XY=[1 0];
[X_Y]=GCD(A,Ini_XY);
while(X_Y(1)<0 || X_Y(1)>=b)
    temp=(b-X_Y(1))/abs(b-X_Y(1));
    X_Y(1)=X_Y(1)+temp*b;
end
ret=X_Y(1);
end
 
4、GCD
function [X_Y] = GCD(A,Initial_XY)
%gcd(a,b)=a*x+b*y
%X_Y=[x y]
%gcd:存储除数的数组
a=A(1);
b=A(2);
%gcd=[b];
Q_Array=[];
while(b)
    c=mod(a,b);
    Q_Array=[(a-c)/b Q_Array];
    a=b;
    b=c;
    %gcd=[b gcd];
end
%x,y迭代初值
X_Y=Initial_XY';
for i=Q_Array
    Q=[0 1;1 -1*i];
    X_Y=Q*X_Y;
end
X_Y=X_Y';
end










