算法笔记 -- 辗转相除法
2022-01-19 15:26:30 360 字 · 约 1 分钟 # algorithm

今天突然看到一题有关求最大公约数的算法,竟然用暴力没法求出来,就来复习一下算法了🤣。

整除

首先我们要职的gcd是干什么的,gcd一般是用在求两个整数的最大公约数,而说到约数又要先提到除法,对于整数中的除法,我们一般有如下通用表示形式:

,其中,。

若,则称能够被整除或称能够整除,记作,否则说明不能被整除。

其中整除具有传递性:

若,,则

组合性:

若,,对于任意,都有。

欧几里得算法

稍微了解了整除的定义后,我们来看算法中著名的欧几里得算法:

证明步骤如下所示:

首先我们不妨假设,则 ①

又因为此时与有公约数,,。不妨设公约数为,则,。由①可得。又因为,故。设,故,。

又因为,故。

附上cpp代码实现

CPP
int gcd(int a, int b)
{
	return b == 0 ? a : gcd(b, a % b);
}
文章作者: CZQ
文章链接: https://www.codenote.xyz/posts/21a0c2ac.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CZQ的codenote!