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

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

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

相关推荐
我叫黑大帅3 分钟前
为什么map查找时间复杂度是O(1)?
后端·算法·面试
炽烈小老头28 分钟前
【每天学习一点算法 2026/04/20】除自身以外数组的乘积
学习·算法
程序猿编码42 分钟前
给你的网络流量穿件“隐形衣“:手把手教你用对称加密打造透明安全隧道
linux·开发语言·网络·安全·linux内核
skilllite作者1 小时前
AI agent 的 Assistant Auto LLM Routing 规划的思考
网络·人工智能·算法·rust·openclaw·agentskills
aq55356001 小时前
编程语言三巨头:汇编、C++与PHP大比拼
java·开发语言
aq55356002 小时前
PHP vs Python:30秒看懂核心区别
开发语言·python·php
我是无敌小恐龙2 小时前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)
java·开发语言·人工智能·opencv·spring·机器学习
香蕉鼠片2 小时前
MFC是什么
c++·mfc
码云数智-大飞2 小时前
零基础微信小程序制作平台哪个好
开发语言
心态与习惯2 小时前
Julia 初探,及与 C++,Java,Python 的比较
java·c++·python·julia·比较