求最大公约数

本文介绍了一种高效求解两个整数最大公约数的方法——辗转相除法(欧几里德算法)。该算法通过不断取余数直至余数为零来找到最大公约数,并提供了具体的C++实现代码。

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

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

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

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

其方法是:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值