最大公约数

1.【问题】

输入两个正整数 m 和 n,求它们的最大公约数。
【输入格式】
一行两个正整数 m 和 n,用一个空格隔开,2≤m,n≤10000。
【输出格式】
一行一个正整数,表示 m 和 n 的最大公约数。
【输入样例】
24 36
【输出样例】
12

2.【问题分析】

用欧几里得“辗转相除法”演示求最大公约数的过程,发现(m,n)的最大公约数与(n,m % n)的最大公约数是一样的,但是数据规模变小了。

所以,最大公约数问题的递归公式为:

 

 

 

 

 以下演示1997和615的最大公约数,看明白后,可以尝试使用其他的任意两个数用辗转相除法演示计算过程。

 

 

 

3.【程序及备注】

#include<iostream>
using namespace std;
int gcd(int m,int n){
    if(n == 0) return m;
    else return gcd(n,m % n);
}
int main(){
    int m,n;
    cin >> m >> n;
    cout << gcd(m,n) << endl;
    return 0;
}

 

4.【运行结果】

 

posted @ 2019-11-16 09:09  new-code  阅读(261)  评论(0)    收藏  举报