5 条题解

  • 0
    @ 2025-3-20 14:57:14
    /*
    思路
        思路一(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;
    }
    */
    
    

    信息

    ID
    92
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    322
    已通过
    118
    上传者