一、公式
gcd(a,b) = gcd(b,a mod b)
二、证明
第一步:令c为a和b的最大公约数,数学符号表示为c=gcd(a,b).因为任何两个实数的最大公约数c一定是存在的,也就是说必然存在两个数k1,k2使得a=k1.c, b=k2.c
第二步:a mod (b)等价于存在整数r,k3使得余数r=a – k3.b.
即r = a – k3.b
= k1.c – k3.k2.c
= (k1 – k3.k2).c
显然,a和b的余数r是最大公因数c的倍数!
三、代码:
(一)递归
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}(二)循环
int gcd(int big, int small)
{
if (small > big) swap(big, small);
int temp;
while (small != 0){ // 辗转相除法
if (small > big) swap(big, small);
temp = big % small;
big = small;
small = temp;
}
return(big);
}
1205

被折叠的 条评论
为什么被折叠?



