最大公约数求法
求两个数a和b的最大公约数之前需要了解欧几里得算法
欧几里得算法精髓:
最大公约数d=gcd(a,b)=gcd(b,a%b);当b≠0;
否则d=b;
具体证明方法可以通过数学归纳法实现,这里从结论出发推出等式的合理性
若d为a,b的最大公约数:a=xd,b=yd,同时a可以描述为a=kb+r;
a%b=r;将以上等式代入:xd=kyd+r,r=(x-ky)*d。
由此可以看出gcd(a,b)和gcd(b,a%b)的最大公约数相同。
终止条件及a%b为0,则b为a的最大公约数,放到gcd(b,a%b)中最大公约数的值为b;
代码:
int gcd(int a, int b) { if(b==0) return a; return gcd(b,a%b); }