学习目标:
掌握求最大公约数(最小公倍数)的三种基本方法
学习内容:
1.一大一小取其小,剖根问底取公约
意思是从一大一小两个数当中,我们取较小的那个数(min)进行剖析,试想,既然是最大公约数,那么就是这两数共有的约数,且一定是小于较小的那个数的(两数不同的前提下),我们只需要对min到1之间遍历一下,第一个能被这两个数都能整除的就是最大公约数
代码如下:
int a, b;
scanf("%d%d", &a, &b);
int min = a <= b ? a : b;
int i;
for (i = min; i > 0; i--)
{if (a % i == 0 && b % i == 0){printf("最大公约数是%d", i);break;}
}
2.更相减损法:
这是出自九章算术的一个计算最大公约数的方法,意思是a和b只要不相等,就让其中的较大数减去较小数,直到a与b相等后,a(b)的值就是最大公约数。代码如下:
int a, b;
scanf("%d%d", &a, &b);
while (a != b)
{if (a > b)a -= b;elseb -= a;
}
printf("最大公约数为%d", a);
运行效果与上一致。
3.辗转相除法:
这个方法主要是利用a和b循环相除直到余数为0,将a作为被除数,b为除数,用c来接收a、b相除的余数,再赋给b,直到余数为0时b也为0,此时a的值即为最大公约数。
代码如下:
int a, b;
scanf("%d%d", &a, &b);
int c;
while (b)
{c = a % b;a = b; b = c;
}
printf("最大公约数为%d", a);
效果如上