证:gcd(a,b) = gcd(b,a%b) (a > b)
设a = k1 * gcd(a,b)
b = k2 * gcd(a,b)
a = k3 * b + c
k1 * gcd(a,b) =k3 * k2 * gcd(a,b) + c
c = a % b = (k1 - k2 * k3) * gcd(a,b)
所以a,b的最大公约数即b,c的最大公约数,且,每2次区间减小一半,效率高。
#include <iostream>
using namespacestd;
int gcd(int a,int b)
{
int t;
if (a < b) {
t = a;
a = b;
b = t;
}
while (b !=0) {
t = a % b;
a = b;
b = t;
}
return a;
}