对于两个整数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;
- }
本文介绍了一个数学问题的解决方法,该问题是寻找满足特定条件(gcd(x,y,z)=G 和 lcm(x,y,z)=L)的所有整数解(x,y,z)的个数。通过给出的C语言程序代码,详细解析了如何计算这些解的数量,并提供了样例输入和输出。
1048

被折叠的 条评论
为什么被折叠?



