先来看一下最大公约数的定义:最大公约数也成最大公因子,即两个或多个整数共有约数的最大的那个。
这里我们用到辗转相除法:
辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。
当两个数都较大时,采用辗转相除法比较方便.
其方法是:
以大数除以小数,如果能整除,那么小数就是所求的最大公约数.否则再用小数除以余数;
再用这新除法的余数去除刚才的余数.依此类推,直到一个除法能够整除,即余数为0
这时作为除数的数就是所求的最大公约数。
了解方法后,便不难写出代码:
#include<iostream>
#include<cstdio>
using namespace std;
int n, m;int gcd(int n, int m) { //求最大公约数
if (m > n) { //将n定义为最大的
int tmp = m;
m = n;
n = tmp;
}
if (n%m == 0) //如果能整除,则小的那个数即为最大公约数
return m;
else //否则,求余后继续调用函数,知道符合为止
return gcd(m, n%m);
}
int main() {
while (scanf("%d%d", &n, &m) != EOF) {
printf("%d\n", gcd(n, m));
}
return 0;
}
本文介绍了一种高效求解两个整数最大公约数的方法——辗转相除法(欧几里德算法)。该算法通过不断取余数直至余数为零来找到最大公约数,并提供了具体的C++实现代码。
486

被折叠的 条评论
为什么被折叠?



