又是一個快樂的數論題,快樂的就像魚沒有水一樣,蹦蹦跳跳......
lcm(p,q) = (p*q)/gcd(p*q)
p*q = lcm*gcd = sum
利用上面的等式,從1到i*i == sum分解sum的因子,需要注意一點是,gcd(i,sum/i) == x
7-2 最大公約數和最小公倍數2 (20分)
最大公約數和最小公倍數2
輸入2個正整數x0,y0(2≤x0≤1000000,2≤y0≤1000000), 求出滿足下列條件的P,Q的個數
條件:
P,Q是正整數
要求P,Q以x0爲最大公約數,以y0爲最小公倍數.
試求:滿足條件的所有可能的2個正整數的個數.
輸入格式:
2個正整數x0,y0
輸出格式:
1個數,表示求出滿足條件的P,Q的個數
輸入樣例:
3 60
輸出樣例:
4
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
ll x,y,ans,sum;
int main()
{
cin>>x>>y;
sum = x*y;
for(ll i = 1; i*i <= sum; i++)
{
if(sum%i == 0 && __gcd(sum/i,i) == x)
{
if(i*i == sum) ans++;
else ans += 2;
}
}
cout<<ans<<endl;
return 0;
}