Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|
67626 | teacher_wang | 最大公约数和最小公倍数问题 | C++ | 通过 | 0 MS | 252 KB | 981 | 2025-09-23 18:12:36 |
#include <iostream> #include <cmath> using namespace std; // 计算最大公约数 int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } int main() { int x0, y0; cin >> x0 >> y0; // y0是a和b的最小公倍数,x0是a和b的最大公约数 // 那么y0一定是x0的倍数 // 如果y0不能被x0整除,则无解 if (y0 % x0 != 0) { cout << 0 << endl; return 0; } int n = y0 / x0; // 计算a*b的值 int count = 0; // 遍历所有可能的a值 for (int a = 1; a * a <= n; a++) { if (n % a == 0) { int b = n / a; // 检查a和b是否互质 if (gcd(a, b) == 1) { // 如果a和b相等,只算一种情况 // 否则算两种情况(P,Q和Q,P) count += (a == b) ? 1 : 2; } } } cout << count << endl; return 0; }