题目
更相减损术
思路
复习一个数学知识
更相减损术是一种古老的求最大公约数的方法。它的基本思想是用较大的数去减较小的数,直到两个数相等,最后的结果就是原来两个数的最大公约数。
更相减损术的效率比较低,如果两个数差别比较大的时候更明显,因为这样会导致算法需要进行很多次相减运算才能得到最终结果。
所以一般都是用辗转相除法来求最大公约数的
代码
#include <stdio.h>
/**
* @brief 更相减损术求最大公约数
*
* @param n
* @param m
* @return int
*/
int gcd(int n, int m) {
while (n && m && n ^ m) {
if (n > m) {
n -= m;
} else {
m -= n;
}
}
return n;
}
int main(void) {
int n = 0, m = 0;
scanf("%d%d", &n, &m);
printf("%d\n", gcd(n, m));
return 0;
}