Given x and y (2 <= x <= 100,000, 2 <= y <= 1,000,000), you are to count the number of p and q such that:
1) p and q are positive integers;
2) GCD(p, q) = x;
3) LCM(p, q) = y.
Input
x and y, one line for each test.
Output
Number of pairs of p and q.
Sample Input
3 60
Sample Output
4
参考代码:
#include <iostream>
using namespace std;
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
int solve(int k){
int ans=1;
for (int i=2;i*i<=k;i++){
if (k%i==0){
if (gcd(k/i,i)==1)
ans++;
}
}
return ans*2;
}
int main(){
int x,y;
while (cin>>x>>y){
if (y%x!=0)
cout<<0<<endl;
else if (x==1)
cout<<2<<endl;
else if (x==y)
cout<<1<<endl;
else{
int k=y/x;
cout<<solve(k)<<endl;
}
}
return 0;
}
本文介绍了一道关于最大公约数(GCD)与最小公倍数(LCM)的算法题目,通过数学推导和代码实现,展示了如何计算特定条件下满足GCD与LCM条件的整数对的数量。
1507

被折叠的 条评论
为什么被折叠?



