1 条题解

  • 0
    @ 2026-1-30 18:58:13
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    // 欧几里得算法:计算两个数的最大公约数
    int gcd(int a, int b) {
        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }
    
    int main() {
        int n;                        // 输入的正整数个数
        // [1] 输入正整数的数量n
        cin >> n;
        int arr[605];                 // 存储n个不同的正整数(n≤600,数组大小足够)
        // [2] 输入n个正整数,存入数组arr
        for (int i = 0; i < n; ++i) {
            cin >> arr[i];
        }
        // [3] 对数组排序,保证i<j时arr[i] < arr[j],满足真分数分子<分母的条件
        sort(arr, arr + n);
        int sum = 0;                  // 累加符合条件的最简真分数组合数
        // [4] 遍历所有i<j的组合,检查是否为最简真分数
        for (int i = 0; i < n; ++i) {
            for (int j = i + 1; j < n; ++j) {
                // [5] 若分子分母的最大公约数为1,说明是最简分数,累加计数
                if (gcd(arr[i], arr[j]) == 1) {
                    sum++;
                }
            }
        }
        // [6] 输出符合条件的组合数
        cout << sum << endl;
        return 0;
    }
    
    • 1

    信息

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