对于两个整数G和L(1<=G,L<=200000000),试找出使gcd(x, y, z) = G 和 lcm(x, y, z) = L的解(x,y,z)的个数。
LSC被这道小学三年级的数学题难住了,聪明的你能帮帮他吗?
注意:① gcd是最大公约数,lcm是最小公倍数。
②(3,4,5)和(4,5,3)是不同的解。
③ 第一行是样例个数T(1<=T<=10),接下来有T行,每行两个数字是G和L。
样例输入:
3
3 72
4 96
5 93
样例输出:
108
108
0
- #include<stdio.h>
- #include<string.h>
- #include<math.h>
- int main(){
- int d[10000];
- int T, G, L, ans, i, num;
- scanf("%d\n",&T);
- while(T--){
- memset(d,0,sizeof(d));
- num =0;
- scanf("%d %d",&G,&L);
- if(!(L % G)){
- L /= G;
- for(i =2; i <= sqrt(L); i++){
- if(!(L % i)){
- while(!(L % i)){
- d[num]++;
- L /= i;
- }
- num++;
- }
- }
- if(L !=1) d[num++]=1;
- ans =1;
- for(i =0; i < num; i++){
- ans *=6* d[i];
- }
- printf("%d\n", ans);
- }else{
- printf("0\n");
- }
- }
- return0;
- }