如果L%G != 0,说明一定无解。
把K = L / G质数分解,L / G = p1^t1 * p2^t2 * p3^t3 * ……;同时 x/= G, y/= G, z/=G,不影响结果。
假设三个数字的质数分解是:
x = p1^i1 * p2^i2 * p3^i3 * ……
y = p1^j1 * p2^j2 * p3^j3 * ……
z = p1^k1 * p2^k2 * p3^k3 * ……
要保证x, y, z互质,并且lcm(x, y, z) = K, 那么对于p1来说,i1, j1, k1里面一定有一个是0,并且一定有一个是t1,一定有一个小于等于t1, 所以有3种情况:
0 0 t1 有3种
t1 t1 0 有3种
t1 0 1~t1-1 有(t1-1)*6种
一共是6*t1种。
同理对于p1、p2、p3.............
根据乘法原理,总的种数是:6*t1 + 6*t2 + ……
不用打质数表,直接从2开始枚举就行。
#include<cstdio>
typedef long long ll;
int main(){
int T;
scanf("%d", &T);
while(T--){
ll g, l;
scanf("%I64d%I64d", &g, &l);
if(l % g != 0){printf("0\n"); continue;}
ll k = l / g;
ll ans = 1, cnt;
ll p1 = 2;
while(1){
cnt = 0;
if(k == 1) break;
if(k % p1) {p1++; continue;}
while(k % p1 == 0){
k /= p1;
cnt++;
}
ans *= 6 * cnt;
p1++;
}
printf("%lld\n", ans);
}
}