求最大公约数

来源:互联网 发布:3d打印软件 编辑:程序博客网 时间:2024/05/17 03:26

先来看一下最大公约数的定义:最大公约数也成最大公因子,即两个或多个整数共有约数的最大的那个。

这里我们用到辗转相除法:

辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。

当两个数都较大时,采用辗转相除法比较方便.

其方法是:

  以大数除以小数,如果能整除,那么小数就是所求的最大公约数.否则再用小数除以余数;

再用这新除法的余数去除刚才的余数.依此类推,直到一个除法能够整除,即余数为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;
}

0 0
原创粉丝点击