Hard GCD and LCM

对于两个整数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

 
 
 
 
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. int main(){
  5. int d[10000];
  6. int T, G, L, ans, i, num;
  7. scanf("%d\n",&T);
  8. while(T--){
  9. memset(d,0,sizeof(d));
  10. num =0;
  11. scanf("%d %d",&G,&L);
  12. if(!(L % G)){
  13. L /= G;
  14. for(i =2; i <= sqrt(L); i++){
  15. if(!(L % i)){
  16. while(!(L % i)){
  17. d[num]++;
  18. L /= i;
  19. }
  20. num++;
  21. }
  22. }
  23. if(L !=1) d[num++]=1;
  24. ans =1;
  25. for(i =0; i < num; i++){
  26. ans *=6* d[i];
  27. }
  28. printf("%d\n", ans);
  29. }else{
  30. printf("0\n");
  31. }
  32. }
  33. return0;
  34. }
 

转载于:https://www.cnblogs.com/sysu-zhengwsh/p/3674206.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值