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

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

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

相关推荐
jerryinwuhan8 分钟前
《Python数据预处理》第四章
开发语言·python
长江&后浪10 分钟前
防火墙的描述
开发语言·网络·php
观无31 分钟前
若依EasyExcel实现单元格合并
开发语言·前端·javascript
雨晨源码(同名B站)33 分钟前
基于Python的网易云音乐评论数据情感化分析系统 音乐爬虫信息可视化 |SnowNLP评论情感分析
开发语言·hadoop·爬虫·python·信息可视化·毕业设计
间歇性努力持续性发呆的野生快乐选手37 分钟前
栈的性质(进栈,出栈,访问)
数据结构·c++
我不是疯子是傻子1 小时前
串口通信数据帧粘包拆包再进化:基于 Qt 的滑动窗口与 CRC 校验实战
开发语言·qt
m0_547486661 小时前
《数据结构与算法》全套PPT课件2026(中国海洋大学)
数据结构·算法
程序员老陆1 小时前
Qt中实现窗口真全屏(覆盖Windows任务栏)
开发语言·windows·qt
旖旎夜光1 小时前
LeetCode 904:水果成篮(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
霸道流氓气质1 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式