题意:给出三个数x,y,z的GCD和LCM 求有多少组这样的数
思路:通过GCD和LCM 可以知道每个数分解为素数后 的上限和下限
例: 6 72
6=2^1*3^1(下限)
72=2^3*3^2(上限)
x,y,z的取值范围为 2^i*3^j
1<=i<=3
1<=j<=2
然而需要满足GCD,LCM
必须有数取到素数的上限,也必须有数取到一个素数的下限
所以对于素数Pi的个数Ti
取值为[Ai,Bi]
X,Y,Z中必须有一个取到Bi,一个取到Ai
所以方法数 有
X Y Z
Ai Bi Bi 3
Ai Ai Bi 3
Ai Bi (Ai,Bi) 6
方法数有sigma(Bi-Ai)*6+6
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
#define LL long long
int main()
{
int G,L,t;
cin>>t;
while(t--)
{
cin>>G>>L;
int ans=1;
if(L%G)
{
printf("0\n");
continue;
}
G=L/G;
for(int i=2;i<=G;i++)
{
int num=0;
while(G%i==0)
{
num++;
G/=i;
}
if(num)
ans*=num*6;
}
cout<<ans<<endl;
}
return 0;
}