最大公约数
思路:
- 假设有两个数a,b,求a,b的最大公约数
- 令a%b,得到的结果用tmp记录
- 再将b的值给a,tmp的值给b
- 此时a的值变成了b,b的值变成了tmp,循环进行a%b
- 直至a%b的结果为0时,循环结束,此时b的值即为最小公约数
举例分析:
a=14,b=8,求a,b的最大公约数
令:14%8=6 ; 8%6=2; 6%2=0;此时b=2
所以:14 ,8 的最大公约数是2
最小公倍数
思路:两个数的乘积除以最大公约数,即为最小公倍数
例题分析:
如上题,求得 14 ,8的最大公约数是2,那么最小公倍数为 56(14*8/2=56)
代码分析:
#include <stdio.h>
#include<stdlib.h>
int max_divisor(int a, int b)
{
while (a%b)
{
int tmp = a%b;
a = b;
b = tmp;
}
return b;
}
int main()
{
Test();
system("pause");
return 0;
}
//测试用例——任写几个数进行测试
void Test()
{
int a[] = {6,32,48,55,96,256,1048,4096};
int len = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < len-1; i++)
{
int num1 = max_divisor(a[i], a[i+1]);
printf("%d ,%d", a[i], a[i + 1]);
printf("最大公约数是:%d\n", num1);
printf("最小共倍数是:%d\n", a[i]*a[i + 1] / num1);
printf("\n");
}
}
打印结果: