欧几里德算法(模板)

欧几里德算法求最大公约数

typedef long long ll;
//gcd(a,b)返回a,b的最大公约数
ll gcd(ll a, ll b) {
    return 0 == b ? a : gcd(b, a%b);
}

扩展欧几里德算法

typedef long long ll;
//求整数x和y,使得ax+by=d,且|x|+|y|最小,其中d=gcd(a,b)
//即使a,b在int范围内,x,y也有可能超出int范围
void gcd(ll a, ll b, ll &d, ll& x, ll& y) {
    if (!b) { d = a; x = 1; y = 0; }
    else { gcd(b, a%b, d, y, x); y -= x*(a / b); }
}
posted @ 2018-02-24 21:34  不想吃WA的咸鱼  阅读(108)  评论(0编辑  收藏  举报