2 条题解

  • 0
    @ 2025-10-8 16:54:52

    题目描述

    给定两个正整数 ( n ) 和 ( m ),求它们的最大公约数(GCD)。

    输入输出格式

    • 输入:两个整数 ( n ) 和 ( m ),满足 ( 1 \leq n, m \leq 500000 )。
    • 输出:一个整数,表示 ( n ) 和 ( m ) 的最大公约数。

    思路分析

    最大公约数的经典解法是欧几里得算法(辗转相除法)。其核心思想是:对于两个正整数 ( a ) 和 ( b )(假设 ( a > b )),( \text{gcd}(a, b) = \text{gcd}(b, a % b) ),当 ( b = 0 ) 时,( a ) 即为最大公约数。该算法的时间复杂度为 ( O(\log \min(n, m)) ),对于 ( n, m \leq 500000 ) 的范围完全适用。

    代码实现

    #include <iostream>
    using namespace std;
    
    int gcd(int a, int b) {
        while (b != 0) {
            int temp = a % b;
            a = b;
            b = temp;
        }
        return a;
    }
    
    int main() {
        int n, m;
        cin >> n >> m;
        cout << gcd(n, m) << endl;
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:54:37

      1<=n,m<=500000

      • 1

      信息

      ID
      945
      时间
      1000ms
      内存
      256MiB
      难度
      10
      标签
      递交数
      3
      已通过
      1
      上传者