求两数的最小公倍数

目录


试除法

设两数中较大的那一个数为两数的最小公倍数,记为max,当max满足%(取模)上两数都余0时,则max为两数的最小公倍数,如不满足,则max++,直到满足该条件为止。

#include<stdio.h>
int main()
{
	int num1 = 0;
	int num2 = 0;
	scanf("%d%d", &num1, &num2);
	int max = num1 > num2 ? num1 : num2;
	while ((max % num1 != 0) || (max % num2 != 0))
	{
		max++;
	}
	printf("最小公倍数是%d\n", max);
	return 0;
}

公式法

由公式可知:两数的乘积=两数的最大公约数和最小公倍数的乘积。

根据公式,可先用辗转相除法求出最大公约数,然后再根据公式即可求出最小公倍数。

#include<stdio.h>
int main()
{
	int num1 = 0;
	int num2 = 0;
	scanf("%d%d", &num1, &num2);
	//下面的运算会改变num1和num2的值,所以提前把num1和num2的乘积先保存起来
	int mul = num1 * num2;
	//求最大公约数
	int num3 = num1 % num2;
	while (num3)
	{
		num1 = num2;
		num2 = num3;//当num3等于0时,num2即为两数的最大公约数
		num3 = num1 % num2;
	}
	int min = mul / num2;
	printf("最小公倍数是%d\n", min);
	return 0;
}

试除法·改

上述的试除法如果两数中的较大值距离最小公倍数相差甚远的话,那么max++就太不高效了,所以有了试除法·改。

假设两数分别为a、b,a、b的最小公倍数为k,则满足下列表达式:

  • k / a = n;
  • k / b = m;

而n、m无非也就是k/a、k/b等的商,大抵也就是1,2,3,4,5,6,7,8……此类的数字,

那么我们就假设n从1开始,如果(n * a) %  b == 0,那么n*a就是两数的最小公倍数。

#include<stdio.h>
int main()
{
	int num1 = 0;
	int num2 = 0;
	scanf("%d%d", &num1, &num2);
	int num3 = 1;
	while ((num1 * num3) % num2 != 0)
	{
		num3++;
	}
	printf("最小公倍数是%d\n", num1 * num3);
	return 0;
}

结语

目前在下已知的最小公倍数的求法就这几种了,如果各位道友还知道其他不同的解法,还望各位道友不吝赐教(抱拳)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值