欧几里得算法

欧几里得算法用于求解两个正整数的最大公约数 (Great Common Divisor),其理论依据为:

GCD (a, b) = GCD (b, a mod b),  { a , b : N | a > b ^ a mod b != 0 }

以下为C 代码:

// 迭代
int gcd (int _a, int _b) {
    int rem = 0;
    while (_b > 0) {
        rem = _a % _b;
        _a = _b;
        _b = rem;
    }
    return _a;
}

// 递归
int gcd (int _a, int _b) {
    if (! _b) return _a;
    return gcd (_b, _a % _b);
} 
证明方法:

a, b : N => a = kb + r ^ r = a mod b

假设 ∃m : N => a | m ^ b | m,  又有 r = a - kb => r | m

∴ m 为 a, b, a mod b 的公约数,也即是 b 和 a mod b 的公约数,

如此继续下去,直到a mod b 为 0 时,则此时b 为最大公约数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值