算法笔记 -- 辗转相除法
今天突然看到一题有关求最大公约数的算法,竟然用暴力没法求出来,就来复习一下算法了🤣。
整除
首先我们要职的gcd是干什么的,gcd一般是用在求两个整数的最大公约数,而说到约数又要先提到除法,对于整数中的除法,我们一般有如下通用表示形式:
,其中,。
若,则称能够被整除或称能够整除,记作,否则说明不能被整除。
其中整除具有传递性:
若,,则
组合性:
若,,对于任意,都有。
欧几里得算法
稍微了解了整除的定义后,我们来看算法中著名的欧几里得算法:
证明步骤如下所示:
首先我们不妨假设,则 ①
又因为此时与有公约数,,。不妨设公约数为,则,。由①可得。又因为,故。设,故,。
又因为,故。
附上cpp代码实现
1 | int gcd(int a, int b) |
提供CDN加速/云存储服务
