拿捏--->最小公倍数

文章目录

  • 题目描述
  • 算法思路
  • 代码示例
    • 方法一
    • 方法二
    • 方法三

题目描述

给定两个数,求这两个数的最小公倍数

例如:
输入:10 20
输出:20

算法思路

最小公倍数是指两个或多个整数公有的倍数中,除0以外最小的一个公倍数。

代码示例

方法一

两数乘积=最小公倍数*最大公约数

在上篇求最大公约数的四种方法中,我们已经能够求得最大公约数,借此便能求得最小公倍数

#include
int main() {
	int a, b;
	scanf("%d %d", &a, &b);
	int m = a * b;
	int r = 0;
	while (r = a % b) {//r为0时,跳出循环,此时b为最大公因数
		a = b;
		b = r;
	}
	printf("%d\n", m/b);//乘积除以最大公因数等于最小公倍数
	return 0;
}

方法二

自增:循环求解

  1. 首先两个数的最小公倍数一定大于两个数中较大的那个,且小于两数之积
  2. 找出a与b之间的较大值max
  3. 利用循环,令i=max,不断++,当i能同时整除a与b时,输出i,跳出循环
  4. 即i为最小公倍数
#include 
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int min = a > b ? a : b;//min为公倍数的可能最小取值
	while (1)
	{
		if (min % a == 0 && min % b == 0)
		{
			printf("%d", min);
			break;
		}
	}
	return 0;

方法三

两个数的最小公倍数一定是这两个数每一个的倍数,那么我们结合方法二,只需要拿出二者之一,让它成倍的增长,然后判断每增长一倍后是否整除另一个数,这样既可以减少循环的次数,还不用判断两个数的大小,是不是比方法二简单很多。

#include 
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int i = 0;
	for (i = 1;; i++)
	{
		if (a * i % b == 0)
		{
			printf("%d\n", a * i);
			break;
		}
	}
	return 0;
}


你可能感兴趣的:(C语言详解,算法,c语言)