最大公约数 (四种解法) 和最小公倍数 (两种解法)

本文介绍了求解最大公约数和最小公倍数的不同方法,包括穷举法、辗转相除法、递归等,并强调了巧用辗转相除法和公式法可以大大提高计算效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求两个数的原理:

最大公约数: x%gcd==0 && y%gcd==0

最小公倍数: lcm%x==0 && lcm%y==0

一.最大公约数

1.穷举法

采用循环暴力解决,比较简单

int gcd(int x,int y)
{
	if (x == 0)
		return y;
	else if (y == 0)
		return x;
	else if (x == y)
		return x;
	int min = x > y ? y : x;   //找出两个的最小值
	while (min)
	{
		if (x % min == 0 && y % min == 0)
			return min;
		min--;
	}
}
2.相减法

对上面穷举法的优化,提高效率

int gcd(int x, int y)
{
	if (x == 0)
		return y;
	else if (y == 0)
		return x;
	else if (x == y)
		return x;
	int n; //存差值的变量
	while (x != y)
	{
		n= x > y ? (x -= y) : (y -= x);
	}
	return n;
}
3.辗转相除法

效率更高的一种方法,使用一些数学知识

int gcd(int x, int y)
{
	if (x == 0)
		return y;
	else if (y == 0)
		return x;
	else if (x == y)
		return x;
	int mod=x%y;
	while (mod)
	{
		x = y;
		y = mod;
		mod = x % y;
	}
	return y;
}
4.递归做法

这是最好的方法,是辗转相除法的进阶,用的是辗转相除法的原理,但更加简洁高效

int gcd(int x, int y)
{
	if (y == 0)
		return x;
	else
		return gcd(y, x % y);
}

看,是不是简洁了很大,但其实还可以更简洁

int gcd(int x, int y)
{
	return y == 0 ? x : gcd(y, x % y);
}

以后写最大公约数的代码采用上面这个代码就行了,太妙了^-^

二.最小公倍数

1.穷举法

根据原理暴力求解,不断循环

int lcm(int x, int y)
{
	if (x * y == 0)
		return 0;
	int max = x > y ? x : y; //找到两个值的最大值
	while (max)
	{
		if (max % x == 0 && max % y == 0)
			return max;
		max++;
	}
}
2.公式法

两个数的乘积等于最大公约数乘以最小公倍数。所以说公式法要用到上面求的最大公约数,函数也相对简单些

int gcd(int x, int y)
{
	return y == 0 ? x : gcd(y, x % y);
}
int lcm(int x, int y)
{
	if (x * y == 0)
		return 0;
	return (x * y) / gcd(x, y);
}

---------------------------------------------------------------------------------------------------------------------------------总结:两个数都可以采用循环暴力直接解决,但效率较低,当数字比较特殊时,处理的时间较长。

巧解效率高,代码相对简洁,应该着力去记住。

谢谢大家!   ^-^

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值