这两个数 32,26的最大公约数,步骤
32/26=1...6 (此行除数26作下一行的被除数,余数作为除数)
26/6=4...2 (此行同理)
6/2=3...0 (此处余数为零,意味着最大公约数就是2)
理解
若把32,26看做任意需要求的两个数a,b,把a/b余数看成c
32/26=1...6;
这个式子表示32 = 26*1+6,如果26(b)是6(c)的倍数,那么32(a)也一定是6(c)的倍数;
也就是说下一步如果求26(b)/6(c)余数是零的话,那么6(c)就是最大公约数;
此例子中26/6 = 4...2 当然6不是最大公约数,继续到下一步求26和6的最大公约数;
上面式子可以看成26 = 4*6+2;如果6(a)是2(c)的倍数,那么26(a)也一定是2(c)的倍数;
确实6/2=3...0;
那么我们反推回去,26和6的最大公约数是2,那么可以看作32 = (4*(6)+2)*1+(6)对应上面式子32 = 26*1+6,所以2也就是32 和26的最大公约数
#include<stdio.h>
#include<string.h>
//函数返回最大公约数
int maxCommonDivisor(int a,int b){
int temp;
while(b){
temp = a%b;
a = b;
b = temp;
}
return a;
}
int main(){
int a,b;
scanf("%d %d",&a,&b);
int maxNormal = maxCommonDivisor(a,b);
int minNormal = a*b/maxNormal;//最小公倍数
printf("%d %d",maxNormal,minNormal);
return 0;
}