欧几里得法(最大公约数):
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int max = 0;
printf("请输入两组数字:");
scanf_s("%d %d", &a, &b);
while (max = a%b)
{
a = b;
b = max;
}
printf("最大公约数为:%d\n", b);
return 0;
}
求最大公约数的经典算法是Euclid(欧几里得)算法,方法如下:分别让变量a和b储存两个数的值,计算a除以b的余数,把b保存到a中,并把余数保存到b中,重复上述过程,直到余数为零。b中的值是最大公约数。
PS:不需要去判断a和b中的最大值,无论是a大还是b大,输出的结果依然不变。
穷举法(最大公约数):
#include<stdio.h>
int main()
{
int n = 0;
int m = 0;
int max = 0;
printf("请输入两组数字:");
scanf_s("%d %d", &n, &m);
if (n > m)
{
max = n;
}
else
{
max = m;
}
while (1)
{
if(n % max == 0 && m % max == 0)
{
printf("最大公约数为:%d\n", max);
break;
}
max--;
}
穷举法应该是最容易想到的方法,原理也很简单。找出两个数之间的最大值,存在变量max中。让两个数分别和这个max取余数,每次循环max减一,直到第一次相等为止,则max就是要找的最大公约数。
最小公倍数
最小公倍数有两种做法,第一种是公式法,最小公倍数 = 第一个数 * 第二个数 / 最小公约数
第二个方法是穷举法,在求最大公约数的代码上稍作修改,原来的代码是一次次循环相减,现在改成不断去相加做判断,最后得出结果。
#include<stdio.h>
int main()
{
int n = 0;
int m = 0;
int max = 0;
printf("请输入两组数字:");
scanf_s("%d %d", &n, &m);
if (n > m)
{
max = n;
}
else
{
max = m;
}
while (1)
{
if(max % n == 0 && max % m ==0 )
{
printf("最小公倍数为:%d\n", max);
break;
}
max++;
}
}