算法--最大公约数,最小公倍数

  1. 求两个数的最大公约数,最小公倍数

解释:这里Mymin和Mymax函数是自定义用于获取两数最大值和最小值的

求最大公约数的时候只需要得到两数之中最小的一项,向下逐个判断直到等于1

求最小公倍数的时候只需要得到两数之中最大的一项,向上判断直到两数乘积即可

cpp 复制代码
#include<iostream>
using namespace std;
int Mymin(int x,int y)
{
	if (x > y)return y;
	else return x;
}
int Mymax(int x, int y)
{
	if (x > y)return x;
	else return y;
}

int GCD(int x, int y)
{
	int _min=Mymin(x, y);
	for (int i = _min; i >= 1; i--)
	{
		if (x % i == 0 && y % i == 0)
		{
			return i;
		}
	}
}
int LCM(int x, int y)
{
	int _max = Mymax(x, y);
	for (int i = _max;i<=x*y; i++)
	{
		if (i % x == 0 && i % y == 0)
		{
			return i;
			break;
		}
	}
}
  1. 当然这是最复杂的办法,那么有没有简单一点的办法来求最大公约数和最小公倍数呢?

当然有,我们可以用辗转相除法来求最大公约数

最小公倍数可以通过公式:两数乘积/两数的最大公约数 得到

辗转相除法图示:

cpp 复制代码
int GCD1(int x, int y)
{
	while (y)
	{
		int z = x % y;
		x = y;
		y = z;
	}
	return x;

int LCM1(int x, int y)
{
	return x * y / GCD1(x, y);
}
  1. 我们已经直到如何求两个数的最大公约数,最小公倍数了,现在我们可以求出三个数或者更多数的最大公约数和最小公倍数吗?

如下所示,我们可以先求两个数的最大公约数或最小公倍数,然后再求第三个数的和前两个数的最大公约数或者最小公倍数的最大公约数或最小公倍数

cpp 复制代码
int LCM2(int x, int y, int z)
{
	return LCM1(LCM1(x, y), z);
}
int GCD2(int x, int y, int z)
{
	return GCD1(GCD1(x, y), z);
}

本文仅阐述函数写法,主函数调用均省略。

相关推荐
h397422 分钟前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
夏幻灵2 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码2 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
西飘客3 小时前
vs 怎么根据dll 生成lib文件
c++·qt
bkspiderx3 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆4 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光4 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
信奥卷王4 小时前
[GESP202609 六级] 分树规划
算法
夏幻灵4 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
码云数智-园园4 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言