返回题解分享
讨论 / 题解分享/ 帖子详情

最大公约数 - 题解

/*
思路
    思路一(error) 效率太低无法通过: 
        1. 循环从1到最小的那个数
        2. 循环操作: if(a % i == 0 && b % i == 0)
        3. 用max记录并更新
    思路二(学习):欧几里得法
        1. 写一个gcd函数 
        2. 原理:两个数的最大公约数等于其中较小的数和两数相除的余数的最大公约数
        3.      gcd(a,b) = gcd(b,a%b) 
*/

#include <bits/stdc++.h>
using namespace std;
 
long gcd( long a, long b ) {
    while ( b != 0 ) {
        //gcd(a,b) = gcd(b,a%b)
        long temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

int main()
{
    long a,b;
    cin >> a >> b;
    if ( a >= b ) {
        cout << gcd(a,b) << endl;
    } else {
        cout << gcd(b,a) << endl;
    }

    return 0;
}
/*
#include <bits/stdc++.h>
using namespace std;

int main() 
{
    long m,n;
    cin >> m >> n;

    long min = 0;
    if (m > n) min = n;
    else min = m;

    long max = 1;
    for ( int i = 1; i <= min; i++ ) {
        if ( m % i == 0 && n % i == 0 ) {
            max = max < i ? i : max;
        }
    }

    cout << max << endl;


    return 0;
}
*/
0 回复 0 转发 0 喜欢 6 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!