定义即形如:ax≡b (mod m)的方程。x是未知数。
定理:a,b,m,是整数且m>0,(a,m)=d,如果d|b,则方程恰有d个模m不同余的解,否则方程无解。
有同余方程的定义可得:ax+my=b(y为整数),这个方程称为二元一次不等方程。
解一元线性同余方程:
在方程有解的情况下,
a=d*a。
m=d*m。
a。x+m。y=b/d
此时由扩展欧几里得算法可解出方程a。x+m。y=b/d的解x,虽然方程的解不唯一;
但同属于一个模m剩余系,有定理可得,解系为:
x,x+m。,x+2*m。,…….,x+(d-1)*m。
算法描述如下:
int exgcd(int a,int b,int& x,int& y)
{
if(a%b==0)
{
x=0,y=1;
return b;
}
int r,tx,ty;
r=exgcd(b,a%b,tx,ty);
x=ty;
y=tx-a/b*ty;
return r;
}
int ans[1000];
int f(int a,int b,int m)
{
int x,y;
d=exgcd(a,m,x,y);
if(b%d)
return -1;//无解
x=x*(b/d)%(m/d);//x的最小解 //x=x*(b/d)%m;
for(int i=1;i<=d;i++)
ans[i]=(x+(i-1)*m/d)%m;
}