| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 86284 | sh25_chenyj | 最大公约数和最小公倍数问题 | C++ | 通过 | 0 MS | 252 KB | 1134 | 2026-03-27 20:34:33 |
#include <iostream> using namespace std; // 基础的求最大公约数函数(辗转相除法) long long gcd(long long a, long long b) { while (b != 0) { a %= b; swap(a, b); } return a; } int main() { long long x0, y0; if (!(cin >> x0 >> y0)) return 0; // 如果最小公倍数不能整除最大公约数,不存在这样的 P 和 Q if (y0 % x0 != 0) { cout << 0 << endl; return 0; } int count = 0; // 技巧:P * Q = x0 * y0 // 我们枚举 P,P 一定是 x0 的倍数,且最大不会超过 y0 for (long long p = x0; p <= y0; p += x0) { // 根据乘积公式求出 Q // 注意:这里要先除再乘,防止超出 long long(虽然本题数据范围还好) if ((x0 * y0) % p == 0) { long long q = (x0 * y0) / p; // 只要最大公约数符合条件,Q 的最小公倍数自然就符合条件 if (gcd(p, q) == x0) { count++; } } } cout << count << endl; return 0; }