题目描述:
现在给你两个整数:x和y,现在需要你找出这样的一对数据P,Q满足:
g
c
d
(
P
,
Q
)
=
x
gcd(P,Q) = x
gcd(P,Q)=x
l
c
m
(
P
,
Q
)
=
y
lcm(P,Q) = y
lcm(P,Q)=y
现在问你最多可以找出多少对。
题解:
这个题需要一点数论知识:
g
c
d
(
x
,
y
)
∗
l
c
m
(
x
,
y
)
=
x
∗
y
gcd(x,y) * lcm(x,y) = x*y
gcd(x,y)∗lcm(x,y)=x∗y
所以接下来我们需要的就是枚举P * Q
的所有约数,然后判断是否满足gcd(P,Q) = x
即可。但是要注意存在完全平方数的情况,这个时候要注意减1.
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
ll gcd(ll a,ll b)
{
return b != 0 ? gcd(b,a % b) : a;
}
int main()
{
int x0,y0,ans = 0,flag = 0;
cin >> x0 >> y0;
if(y0 % x0){
cout << 0 << endl;
}
else{
ll k = x0 * y0 * 1ll;
for(ll i = 1ll;i <= sqrt(1ll * k);i++){
if(1ll * k % i == 0 && gcd(i,1ll * k / i) == x0) {
ans++;
if(i * i * 1ll == 1ll * k) flag++;
}
}
cout << ans * 2 - flag << endl;
}
return 0;
}