数论概论 第8章 同余式

数论概论 第8章 同余式

主要讨论如何求解同余式 $ax \equiv c (mod \ m) $

显然判断此同余式是否有解相当于判断线性方程 \(ax-my=c\) 是否有解

我们对于\(ax+by = c\) 类型的线性方程当且仅当\(gcd(a,b)|c\) 时有解

求解方式可以通过下面的代码求解(拓展欧几里得)

//ax+by = gcd(a,b)
long long extend_gcd(long long a,long long b,long long &x,long long &y)
{
    if(a==0&&b==0) return -1;
    if(b==0) {x = 1; y = 0; return a;}
    long long d = extend_gcd(b,a%b,y,x);
    y -= a/b*x;
    return d;
}

\(g = gcd(a,m)\)

  • 如果g不整除c则此方程无解
  • \(g \mid c\) 则改同余式恰好有g个不同的解

注:线性同余方程最重要的情形是\(gcd(a,m) = 1\) 在这种情形下同余式恰好只有一个解

且c = 1时 此时的x称为a对m的逆元

逆元求法如下:

long long extend_gcd(long long a,long long b,long long &x,long long &y)
{
    if(a==0&&b==0) return -1;
    if(b==0) {x = 1; y = 0; return a;}
    long long d = extend_gcd(b,a%b,y,x);
    y -= a/b*x;
    return d;
}
ll getInv(int a,int mod)
{
    ll x,y;
    ll d=extend_gcd(a,mod,x,y);
    return d==1?(x%mod+mod)%mod:-1;
}
posted @ 2019-06-02 15:55  Potato!  阅读(299)  评论(0编辑  收藏  举报