扩展欧几里德算法

作者: 学无止境1980 | 来源:发表于2019-02-20 15:43 被阅读0次

扩展欧几里德算法用来在已知ab的情况下,求等式a\cdot x+b\cdot y=gcd(a, b)的一组可行解,该算法思路如下:

  1. b=0,则有gcd(a, b)=gcd(a, 0)=a\{x=1, y=0\}是一组可行解
  2. b\neq 0,则设a=k\cdot b+r(0\le r<b),递归求等式b\cdot x+r\cdot y=gcd(b, r)的一组可行解。设求得的可行解为\{x=x', y=y'\},则有b\cdot x'+r\cdot y'=gcd(b, r)。又b\cdot x'+r\cdot y'=b\cdot x'+(a-k\cdot b)y'=a\cdot y'+b(x'-k\cdot y'),且gcd(b, r)=gcd(a, b),故有a\cdot y'+b(x'-k\cdot y')=gcd(a, b)。则,\{x=y', y=x'-k\cdot y'\}为原等式的一组可行解。

扩展欧几里德算法的实现代码如下:

int ex_gcd(int a, int b, int & x, int & y){
    // ax + by = gcd(a,b) = r
    if(!b){
        x = 1; y = 0;
        return a;
    }
    int r = ex_gcd(b, a%b, x, y);
    int t = x; x = y; y = t-a/b*y;
    return r;
}

附上一道练习题:洛谷P1082 同余方程

解题思路:求关于x的同余方程ax\equiv 1(mod\ b)的解,即相当于求a\cdot x+b\cdot y=1的解,又ab必定互质,故相当于求a\cdot x+b\cdot y=gcd(a, b)的解,可以使用扩展欧几里德算法。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int ex_gcd(int a, int b, int & x, int & y){
    // ax + by = gcd(a,b) = r
    if(!b){
        x = 1; y = 0;
        return a;
    }
    int r = ex_gcd(b, a%b, x, y);
    int t = x; x = y; y = t-a/b*y;
    return r;
}
int main(){
    int a, b, x, y;
    cin >> a >> b;
    ex_gcd(a, b, x, y);
    cout << (x%b+b)%b << endl;
}

相关文章

  • 最大公约数

    . 欧几里德算法和扩展欧几里德算法 欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。...

  • 欧几里德与扩展欧几里德算法

    欧几里德算法欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。基本算法:设a=qb+r,其中a,b,...

  • 扩展欧几里德算法

    扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)...

  • 扩展欧几里德算法

    扩展欧几里德算法用来在已知和的情况下,求等式的一组可行解,该算法思路如下: 若,则有,是一组可行解 若,则设递归求...

  • 扩展欧几里德

    扩展欧几里得 求解不定方程 ax+by=gcd(a, b) 的整数解 对于方程 ax+by=c, 如果 gcd(a...

  • 欧几里德算法

    The Euclidean Algorithm欧几里德算法(又称辗转相除法)是一种用于快速寻找两个整数的最大公约数...

  • 欧几里德算法

    需求: 计算最大公因数。两个整数德最大公因数(Gcd)是同时整除二者的最大整数。 算法通过连续计算余数直到余数是0...

  • 青蛙的约会

    题目:青蛙的约会思路:首先本题可以用常规的解法求得一个扩展的欧几里德的算法公式。为了保证能够相遇,A 和 B 的总...

  • 算法学习(1)----扩展欧几里得算法

    欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: gcd...

  • 欧几里德算法原理

    欧几里德算法: 实在不好意思 我验算的同时没有统一标识 希望大家能包含

网友评论

    本文标题:扩展欧几里德算法

    本文链接:https://www.haomeiwen.com/subject/zvjhyqtx.html