题解 | #小乐乐与欧几里得#

小乐乐与欧几里得

https://www.nowcoder.com/practice/da13e0cf321e4df9acd0fdf0a433cbb0

#include <stdio.h>
//欧几里得算法求的最大公约数
long long int gcd(long long int a, long long int b)
{
	//一定要确保a>b
	if (a < b)
	{
		long long int temp = a;
		a = b;
		b = temp;//作用是创建临时变量将a和b的数值置换
	}
	while (b != 0)//当b不等于0时,继续执行循环
	{
		long long int remainder = a % b;//计算余数
		//算完余数后,进行新的计算,届时a位置上面的值由b替代
		//也就是第二次计算时,b坐在第一次a的位置,
		// 第一次的余数坐在第一次计算时b的位置
		a = b;
		b = remainder;//此时b的位置是余数
	}
	//注意这个循环的条件b != 0
	//当下一次计算的时候,上一次计算时
	//算出的余数不为0,那么就在下一次计算的时候坐在b的位置
	//但要是上一次计算的余数为0,也就是下次计算的b=0,
	// 那么循环就停止了,
	//恰好上一次循环的b现在在a的位置,所以现在a位置上面的值就是
	//我们要求的最大公约数
	return a;
}

//根据最大公约数求得最小公倍数
//最小公倍数就是你输入的两个值相乘再除以最大公约数
long long int lcm(long long int a, long long int b, long long int gcdValue)
{
	return a * b / gcdValue;
}
//这种题最关键的就是求出最大公约数
// 再根据最大公约数求出最小公倍数

int main()
{
	long long int m, n;
	scanf("%lld %lld", &m, &n);
	//计算最大公约数
	long long int gcdValue = gcd(m, n);
	//计算最小公倍数
	long long int lcmValue = lcm(m, n, gcdValue);
	//打印最大公约数和最小公倍数之和
	printf("%lld", gcdValue + lcmValue);


	return 0;
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务