题目描述
输入2个正整数x0?,y0?(2≤x0?<100000,2≤y0?<=1000000),求出满足下列条件的P,Q的个数
条件:
-
P,Q是正整数
-
要求P,Q以x0?为最大公约数,以y0?为最小公倍数.
试求:满足条件的所有可能的2个正整数的个数.
输入输出格式
输入格式:
2个正整数x0,y0?
输出格式:
1个数,表示求出满足条件的P,Q的个数
输入输出样例
输入样例#1:
3 60
输出样例#1:
4
说明
P,Q有4种
1、3,60
2、15,12
3、12,15
4、60,3
题解:gcd(a, b) * lcm(a, b) = a*b; 根据题目条件可得 P*Q = x0 * y0. 逐一判断 x0, y0 中较小的那个数的倍数即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#define ll long long
#define mod 100000000
using namespace std;
const int maxn = 1000010;
ll gcd(ll a, ll b){return b ? gcd(b, a%b) : a;
}
ll lcm(ll a, ll b){return a*b/gcd(a, b);
}
int main()
{int x0, y0;cin >> x0 >> y0;ll s = x0*y0;int m = min(x0, y0);int cnt = 0;for(ll i = m; i <= s/m*m; i += m){if(s % i == 0){if(gcd(i, s/i) == x0 && lcm(i, s/i) == y0)cnt++;}}cout << cnt << endl;return 0;
}