1 条题解
-
0
#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
- 上传者