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

  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);
}

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

相关推荐
MapGIS技术支持几秒前
MapGIS Objects Java计算一个三维点到平面的距离
java·开发语言·平面·制图·mapgis
程序员zgh30 分钟前
C++ 互斥锁、读写锁、原子操作、条件变量
c语言·开发语言·jvm·c++
鲨莎分不晴41 分钟前
强化学习第五课 —— A2C & A3C:并行化是如何杀死经验回放
网络·算法·机器学习
小灰灰搞电子1 小时前
Qt 重写QRadioButton实现动态radioButton源码分享
开发语言·qt·命令模式
by__csdn1 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
喵了meme1 小时前
C语言实战5
c语言·开发语言
廋到被风吹走1 小时前
【Java】常用设计模式及应用场景详解
java·开发语言·设计模式
搞科研的小刘选手1 小时前
【ISSN/ISBN双刊号】第三届电力电子与人工智能国际学术会议(PEAI 2026)
图像处理·人工智能·算法·电力电子·学术会议
拉姆哥的小屋1 小时前
从混沌到秩序:条件扩散模型在图像转换中的哲学与技术革命
人工智能·算法·机器学习
Sammyyyyy2 小时前
DeepSeek v3.2 正式发布,对标 GPT-5
开发语言·人工智能·gpt·算法·servbay