这里写一下gcd的求法
暴力
最简单,从大往小扫,直到第一个公约数,他就是最大公约数
int gcd(int a,int b){
for (int i=min(a,b); a%i!=b%i; i--) if (a%i==b%i) return (i);
}
辗转相除(递归)
这是用了辗转相除的方法,速度快很多
其中 k 为 a%b 的值,即 a÷b 的余数
int gcd(int b,int k){
if (k!=0) return gcd(k,b%k);
return b;
}
另一个方法(非递归)
这个是从同学那里学来的,不过没怎么看懂,有没有大神能帮忙解说一下……
int gcd(int a,int b){
if (a<b) a^=b^=a^=b;
while (a^=b^=a^=b%=a);
return b;
}