辗转相除法求最大公约数以及最小公倍数
问题描述
设计一个算法求两个自然数的最大公约数以及最小公倍数
格式:
用户输入两个自然数
12 26
分别输出最大公约数
2 12
辗转相除法定义
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。
思路分析
①定义自然数
②判断自然数大小
③实现辗转相除运算
- 大数/小数,余数不为0时,除数/余数,直至余数为0;
④输出
代码
//求两个自然数的最大公约数以及最小公倍数
//辗转相除法
#include <stdio.h>
#include <math.h>
int main()
{
//定义自然数1和2
int natural_number_1 = 0;
int natural_number_2 = 0;
printf("Please enter two natural numbers:\n");
scanf("%d %d",&natural_number_1,&natural_number_2);
int temp = 0;//中间变量
//大的数除小的数 26/12
if (natural_number_1 < natural_number_2)
{
temp = natural_number_2;
natural_number_2 = natural_number_1;
natural_number_1 = temp;
}
//定义余数 r
int r = natural_number_1 % natural_number_2;
while (r != 0)
{
natural_number_1 = natural_number_2;
natural_number_2 = r;
//除数/余数
r = natural_number_1 % natural_number_2;
}
printf("The greatest common divisor is %d\n",natural_number_2);
//最小公倍数 = 两自然数相乘/公约数
printf("The least common multiple is %d\n",(natural_number_1 * natural_number_2) / natural_number_2);
return 0;
}