方法一:辗转相除法
通过两个因子相互取模得到一个最大公约数然后把两个因子的乘积除以一个最大公约数即为最小公倍数
#include<stdio.h>
int fa1(int a, int b)
{
//辗转相除法
int c = 1;
int m = a, n = b;//保存a,b初始值
while (c)//判断条件c不为0时循环
{
c = m % n;
m = n;
n = m;
}//求出的a为最大公约数
return a * b / m;//两个因子相乘除以最大约数即为最小公倍数【12*15/3=60】
}
int main()
{
int a = 0, b = 0;
printf("请输入a和b的值>>");
scanf("%d %d", &a, &b);
int ret1 = fa1(a, b);
printf("%d\n", ret1);
}
方法二 :逐项寻找最小公倍数
通过循环,找到一个数与其中一个因子的乘积能被另一个因子整除则此乘积为最小公倍数
#include<stdio.h>
int fa2(int a, int b)
{
for (int i = 1;; i++)
{
if (a*i%b==0)//若a为5 ,b为7,则当i=7时 条件成立
{ //若a为7 ,b为5,则当i=5时 条件成立
return a*i;//a*i=35//
break;//结束for循环
}
}
}
int main()
{
int a = 0, b = 0;
printf("请输入a和b的值>>");
scanf("%d %d", &a, &b);
int ret2 = fa2(a, b);
printf("%d\n", ret2);
}
方法三:自加法
首先找到两个因子中的较小值【最小公倍数不可能比本身还小】,通过较小值的自加判断改自加值是否分别能够同时被这两个因子整数【取模为0】满足时 自加值即为最小公倍数
#include<stdio.h>
int fa3(int a, int b)
{
int m = a < b ? a : b;//若a=5,b=7则m=5从两个因子中找出最小的开始自加
while (1)//定义一个死循环
{
if (m % a == 0 && m % b == 0)//当m经过自加后,分别满足与a 和 b 的模为0【即同时被整除】
{
return m;//此时m为两个因子的最小公倍数,返回值
}
m++;
}
}
int main()
{
int a = 0, b = 0;
printf("请输入a和b的值>>");
scanf("%d %d", &a, &b);
int ret3 = fa3(a, b);
printf("%d\n", ret3);
}