题意:有多少对数满足
题解:
易知:,
令
含有,含有,含有
那么a,b,c至少有一个为i1,一个为0。剩下的一个可以取遍[0,i1]。
为了防止i1和0重合,可以先取[1,i1-1],在取两个i1或者两个0。共有6*(i1-1)+3 + 3 = 6i1。
代码:
#include <bits/stdc++.h>
using namespace std;
int g,l;
int factor(int n){
int ans = 1;
for(int i=2;i<=n;i++){
int cnt = 0;
while(n % i == 0){
cnt++;
n /= i;
}
if(cnt) ans *= 6 * cnt;
}
return ans;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&g,&l);
if(l % g) printf("0\n"); //特判
else printf("%d\n",factor(l/g));
}
return 0;
}