扩展GCD算法(扩展欧几里得算法)(扩展辗转相除法)(贝祖算法)代码模板(C/C++/Java/Python多版本)

作者:袖梨 2026-08-14

扩展GCD算法(扩展欧几里得算法)(扩展辗转相除法)(贝祖算法)代码模板(C/C++/Java/Python多版本)并不只看表面做法,关键还要理解相关条件、限制和后续影响。

扩展欧几里得算法是欧几里得算法的推广,它在计算两个整数最大公约数(gcd)的同时,通过回溯或迭代过程中的系数递推,求得一组满足贝祖等式(两个整数的最大公约数总可以表示为它们的线性组合) ax + by = gcd(a, b) 的整数解 (x, y);这一对系数也称为贝祖系数,是求解模逆元、线性同余方程以及许多密码学与数论问题的基础工具。

扩展GCD算法(扩展欧几里得算法)(扩展辗转相除法)(贝祖算法)代码模板(C/C++/Java/Python多版本)

1. C/C++版代码:

long long extgcd(long long a, long long b, long long &x, long long &y) {    // 递归终止条件:b=0时,gcd=a,系数x=1,y=0满足a*x+b*y=gcd    if (b == 0) {        x = 1;        y = 0;        return a;    }        // 递归计算gcd和系数,然后调整贝祖等式系数    long long d = extgcd(b, a % b, x, y);    long long t = x;   // 暂存上层递归的x值    x = y;             // 当前递归x = 上层递归y    y = t - a / b * y; // 当前递归y = 上层递归x - a/b * 上层递归y    return d;          // 返回最大公约数}

2. Java版代码:

public class ExtendedGCD {    // 封装扩展欧几里得算法的结果:d=gcd(a,b)及贝祖等式系数x,y    public static class Result {        public long d; // 最大公约数        public long x; // 贝祖等式系数x        public long y; // 贝祖等式系数y                public Result(long d, long x, long y) {            this.d = d;            this.x = x;            this.y = y;        }    }        // 扩展欧几里得算法:计算gcd(a,b)及满足ax+by=gcd(a,b)的整数解(x,y)    public static Result extgcd(long a, long b) {        // 递归终止:b=0时,gcd=a,x=1,y=0满足a*x+0*y=a        if (b == 0) {            return new Result(a, 1, 0);        }                // 递归计算并回溯调整系数        Result res = extgcd(b, a % b);        long t = res.x;            // 暂存上层递归的x        res.x = res.y;             // 当前x = 上层y        res.y = t - (a / b) * res.y; // 当前y = 上层x - (a/b)*上层y                return res;    }}

3. Python版代码:

def extgcd(a, b):    # 扩展欧几里得算法:计算最大公约数d及满足ax+by=d的整数解(x,y)        # 递归终止条件:b=0时,gcd=a,x=1,y=0满足ax+0y=a    if b == 0:        return a, 1, 0        # 递归计算并回溯调整系数    d, x1, y1 = extgcd(b, a % b)  # x1,y1是递归下层的解    x = y1                         # 当前x = 下层的y    y = x1 - (a // b) * y1        # 当前y = 下层的x - (a//b)*下层的y        return d, x, y                # 返回(d,x,y)三元组

相关文章

精彩推荐