how many solutions of (x, y, z) there are, satisfying that gcd(x, y, z) = G and lcm(x, y, z) = L?
(1, 2, 3) and (1, 3, 2) are two different solutions.
typedef long long LL;
const int maxn = 100008 ;
bool is[maxn] ;
int ps ;
int prime[maxn] ;
void make(){
memset(is , 0 , sizeof(is)) ;
ps = 0 ;
for(int i = 2 ; i < maxn ; i++){
if(! is[i]) prime[ps++] = i ;
for(int j = 0 ; j < ps && i * prime[j] < maxn ; j++){
is[i * prime[j]] = 1 ;
if(i % prime[j] == 0) break ;
}
}
}
vector< pair<int , int> > get_pfactor(LL n){
vector< pair<int , int> > plis ;
plis.clear() ;
for(int i = 0 ; i < ps && (LL)prime[i] * (LL)prime[i] <= n ; i++){
if(n % prime[i] == 0){
int c = 0 ;
while(n % prime[i] == 0){
c++ ;
n /= prime[i] ;
}
plis.push_back(make_pair(prime[i] , c)) ;
}
}
if(n != 1) plis.push_back(make_pair(n , 1)) ;
return plis ;
}
LL Ans(LL G , LL L){
if(L % G) return 0 ;
LL g = L / G ;
vector< pair<int , int> > a = get_pfactor(g) ;
LL s = 1 , t ;
for(int i = 0 ; i < a.size() ; i++){
t = a[i].second ;
if(t == 1) s *= 6 ;
else s *= ( 6 * (t-1) + 6 );
}
return s ;
}
int main(){
make() ;
LL G , L ; int t ;
cin>>t ;
while(t--){
cin>>G>>L ;
cout<< Ans(G , L) << endl ;
}
return 0 ;
}