输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数。
条件:
1. P,A是正整数;
2. 要求P,Q以x0为最大公约数,以y0为最小公倍数。
试求:
满足条件的所有可能的两个正整数的个数。
输入格式
每个测试文件只包含一组测试数据,每组两个正整数x0和y0(2<=x0<100000,2<=y0<=1000000)。
输出格式
对于每组输入数据,输出满足条件的所有可能的两个正整数的个数。
下面是对样例数据的说明:
输入3 60
此时的P Q分别为:
3 60
15 12
12 15
60 3
所以,满足条件的所有可能的两个正整数的个数共4种。
样例
输入数据 1
3 60
Copy
输出数据 1
4
注意一点,最小公倍数*最大公因数=p*q(想一想)
易得代码如下
gcd辗转相除法
#include <iostream>
using namespace std;
int gcd(int x, int y) {
if (x % y != 0) {
return gcd(y, x % y);
}
return y;
}
int main() {
int x, y, cnt = 0, sum;
cin >> x >> y;
sum = x * y;
for (int i = min(x, y); i <= max(x, y); i++) {
if (sum % i != 0)
continue;
if (gcd(i, sum / i) == x) {
cnt++;
}
}
cout << cnt;
return 0;
}