题目:最大公约数和最小公倍数问题
思路:
求出x0,y0的最大公约数和最小公倍数。
用循环i,j两个变量以最小公倍数进行枚举两个数P = i * 最小公约数,Q = j * 最小公约数,(i,j的最大值为最大公约数 / min(x0,y0) ),如果P,Q以x0为最大公约数,以y0为最小公倍数,则满足条件,统计满足条件的个数,输出即可。
代码:
#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
int main() {
long int x0, y0;
long int ans = 0;
cin >> x0 >> y0;
long int sum = y0;
if (y0 > x0)
sum = x0;
long int gvs = gcd(x0, y0);
long int gbs = (x0 * y0) / gcd(x0, y0);
for (long int i = 1; i <= gbs / sum; i ++) {
for (long int j = 1; j <= gbs / sum; j ++) {
if (gcd(i * gvs, j * gvs) == x0 && (i * gvs * gvs * j) / gcd(i * gvs, j * gvs) == y0) {
ans++;
}
}
}
cout << ans;
return 0;
}