一元线性同余方程

定义即形如: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;
}

猜你喜欢

转载自blog.csdn.net/qq_40679299/article/details/80280204