目录
1.题目描述
正整数 a 和正整数 b 的最小公倍数,是指能被 a 和 b 整除的最小的正整数。请你求 a 和 b 的最小公倍数。比如输入5和7,5和7的最小公倍数是35,则需要返回35。
输入描述 :
输入两个正整数。1≤a, b≤100000
输出描述 :
输出最小公倍数。
示例1
输入 5 7
输出 35
2.思路
第一种:
先求出a和b的最大公因数(辗转相除法)
最小公倍数 = a * b / t
第二种:
a和b的最小公倍数,也要 >= m和n的较大值
求出m和n的较大值,k
不断的++,找一个k能整除m和n
k就是最小公倍数
3.实现
方法一:(辗转相除法)
找出最大公约数,用两个数乘积去除以最大公约数得到最大公倍数
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
//先求出m和n的最小公因数(辗转相除法)
//最小公倍数 = a * b / t
int c = a * b;
int t = 0;
while (t = a % b)
{
a = b;
b = t;
}
printf("%d", c / b);
return 0;
}
方法二:
根据事实分析:最小公倍数必然大于等于两个数本身,定义一个数,使得这个数(k)从k=1开始不断的与这两个数较大值(a和b,假设a>b)相乘除以另外一个数(b),不断的++(k),找一个k能整除m和n,则k就是最小公倍数
#include <stdio.h>
int main()
{
long long a = 0;
long long b = 0;
scanf("%lld %lld", &a, &b);
//a和b的最小公倍数,也要 >= m和n的较大值
//18*24
//求出m和n的较大值,k
//不断的++,找一个k能整除m和n
//k就是最小公倍数
int k = 1;
while (a* k% b != 0)
{
k++;
}
printf("%lld", a * k);
return 0;
}