题目描述
用递归算法求两个数 mmm 和 nnn 的最大公约数。(0<n,m≤1090 < n,m \le 10^90<n,m≤109)
辗转相除法:辗转相除法不需要把两个数作质因子分解,而是利用以下理论来确定两个正整数 mmm 和 nnn 的最大公约数:如果 qqq 和 rrr 分别是 mmm 除以 nnn 的商和余数,即 m=nq+rm=nq+rm=nq+r,则 gcd(m,n)=gcd(n,r)\gcd(m,n)=\gcd(n,r)gcd(m,n)=gcd(n,r)。gcd(m,n)\gcd(m,n)gcd(m,n) 表示 mmm,nnn 的公约数。
辗转相除法的思想是:对于给定的两个正整数,用较大的数除以较小的数,若余数不为零,则将余数和较小的数组成一队新的数,继续进行上面的过程,直到大数被小数除尽,这就是较小的数就是原来两个数的最大公约数。
输入
两个数,即 mmm 和 nnn 的值。
输出
最大公约数。
样例输入
8 6
样例输出
gcd=2
#include <cstdio>
int main()
{
int m,n,i;
scanf ("%d %d",&m,&n);
for (i=n;i>=1;i--)
{
if (m%i==0&&n%i==0) {
printf ("gcd=%d",i);break;}
}
}