欧几里得定理专题


一、欧几里得定理

1. 同余定理

\((a+b)\ \%\ mod=(a\ \%\ mod+b\ \%\ mod)\ \%\ mod\)

\((a-b)\ \%\ mod=(a\ \%\ mod-b\ \%\ mod)\ \%\ mod\)

\((a*b)\ \%\ mod=(a\ \%\ mod*b\ \%\ mod)\ \%\ mod\)

注意:除法没有同余的性质,需要求逆元。

2. 欧几里得定理

\(gcd(a,b)=gcd(b,a\%b)\)

3. 欧几里得定理用法

(1) 求最大公约数

    //最大公约数,辗转相除法
  int gcd(int a, int b) {
      if (b == 0) return a;
      return gcd(b, a % b);
  }

(2) 求最小公倍数

  //最小公倍数
  int lcm(int a, int b) {
      return a * b / gcd(a, b);
  }

二、扩展欧几里得定理

1. 定义

\(ax+by=gcd(a,b)\),在已知\(a,b\)的情况下求解出一组\(x_0,y_0\)(特解)。

2. 推导过程

\(ax+by=gcd(a,b)\) \(①\)

根据欧几里得定理,有:
\(gcd(a,b)=gcd(b,a\%b)\) \(②\)

\(b\)代替\(a\)的位置,用\(a\%b\)代替\(b\)的位置,得到:

\(bx_1+(a\%b)y_1=gcd(a,b)\) \(③\)

因为\(a\%b=a-\lfloor \frac{a}{b} \rfloor * b\) ,代入方程\(③\),得到:

\(bx_1+(a-a/b *b)y_1=gcd(a,b)\)

变形

\(ay_1+b(x_1-a/b)y_1=gcd(a,b)\) \(④\)

与方程\(①\)对比系数,得到

\(x=y_1,y=x_1-a/b*y_1\)

这就是扩展欧几里得算法中关键代码的由来。

int exgcd(int a, int b, int &x, int &y) {//返回gcd(a,b) 并求出解(引用带回)
    if (b == 0) {
      x = 1, y = 0;
      return a;
    }
    int x1, y1, gcd;
    gcd = exgcd(b, a % b, x1, y1);
    x = y1, y = x1 - a / b * y1;
    return gcd;
}

简化一下:

//yxc写法
int exgcd(int a, int b, int &x, int &y) {
    if (!b) {
        x = 1, y = 0;
        return a;
    }
    int d = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}

3.性质

  1. 若通过扩展欧几里得求出一组特解(\(x_0\),\(y_0\)),那么有\(ax_0+by_0=d\)
    则方程的通解为: 其中\(k\)为任意整数,\(d=gcd(a,b)\)

    \(x=x_0+k*(b/d)\)

    \(y=y_0-k*(a/d)\)

  2. 已知\(ax+by=d\)的解,对于\(ax+by=c\)的解,\(c\)为任意正整数,只有当\(d|c\)时才有解,
    则方程的通解为: 其中\(k\)为任意整数,\(d=gcd(a,b)\)

    \(x=(c/d)x_0+k(b/d)\)

    \(y=(c/d)y_0-k(a/d)\)

4.常见用法

(1)求形如\(ax+by=c\)的通解,或从中选取某些特解。
(2)求乘法逆元
(3)求解线性同余方程(组)

5.解题思路

  1. 先将问题转化成不定方程\(ax+by=c\)

  2. \(a,b\)参数取正数,判断\(a,b\)是否为负数,为负数就\(a,b,c\)都乘上\(-1\),另外注意若\(a,b\)中只有一个是负数,那另一个不需要乘\(-1\),因为\(a,b\)本身是含未知数参数的。

  3. \(d=exgcd(a,b,x_0,y_0)\),然后判断是否有解采用\(if(c\%d==0)\)

  4. 求特解:\(x_1=x_0*c/d\), \(y_1=y_0*c/d\);

  5. 求通解:\(x=x_1 + b/d*t\) , \(y=y_1-a/d*t\) (其中 \(t\) 为整数)

  6. 求最小解:\(int\ s=b/d\); \(x_{min}= (x_1\%s+s)\%s\);

6.例题实例

问题描述:对于 \(ax+by=c\) 的不定方程求通解或特解?

\(d=gcd(a,b)\)

\(c\%d!=0\) 此方程无整数解

\(c\%d==0\)

特解:

\(x_1=x_0*c/d\) , \(y_1=y_0*c/d\)

通解:
\(x=x_1+b/d*t\) , \(y=y_1-a/d*t\) (其中 \(t\) 为整数)

最小解:

\(d=exgcd(a,b,x_0,y_0);\)

\(x_1=x_0*c/d;\)

\(int\ s=b/d;\)

\(x_{min}= (x_1\%s+s)\%s;\)

https://www.cnblogs.com/yaochen/p/10894280.html?share_token=23191250-107c-4b7f-a6c4-f4139ee37033


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM