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

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

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

相关推荐
第二只羽毛14 分钟前
C++ 高并发内存池1
大数据·开发语言·c++·开源
不想看见40422 分钟前
C++/Qt 实习岗位深度解析【结合一次研发实习谈感受】
开发语言·c++·qt
靴子学长25 分钟前
Decoder only 架构下 - KV cache 的理解
pytorch·深度学习·算法·大模型·kv
王老师青少年编程38 分钟前
信奥赛C++提高组csp-s之组合数学专题课:鸽巢原理详解及案例实践
c++·组合数学·信奥赛·抽屉原理·csp-s·提高组·鸽巢原理
sjmaysee40 分钟前
Java框架SpringBoot(一)
java·开发语言·spring boot
寒秋花开曾相惜43 分钟前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
Гений.大天才43 分钟前
2026年计算机领域的年度主题与范式转移
算法
想唱rap1 小时前
Linux线程
java·linux·运维·服务器·开发语言·mysql
Tony Bai1 小时前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
njidf1 小时前
C++与Qt图形开发
开发语言·c++·算法