GCD and LCM

GCD and LCM

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other)
Total Submission(s) : 1   Accepted Submission(s) : 1
Problem Description
Given two positive integers G and L, could you tell me how many solutions of (x, y, z) there are, satisfying that gcd(x, y, z) = G and lcm(x, y, z) = L? Note, gcd(x, y, z) means the greatest common divisor of x, y and z, while lcm(x, y, z) means the least common multiple of x, y and z. Note 2, (1, 2, 3) and (1, 3, 2) are two different solutions.
 

 

Input
First line comes an integer T (T <= 12), telling the number of test cases. The next T lines, each contains two positive 32-bit signed integers, G and L. It’s guaranteed that each answer will fit in a 32-bit signed integer.
 

 

Output
For each test case, print one line with the number of solutions satisfying the conditions above.
 

 

Sample Input
2 6 72 7 33
 

 

Sample Output
72 0
 

 

Source
2013 ACM-ICPC吉林通化全国邀请赛——题目重现
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 long long  Find(int A,int B)
 4 {
 5     long long  i,N=B/A,SIGN=1,sign;
 6     if(B%A!=0)return 0;
 7     for(i=2;i*i<=N;i+=2)
 8     {
 9         sign=0;
10         while(N%i==0)
11         {
12             N/=i;
13             sign++;
14         }
15         if(sign!=0)SIGN*=6*sign;
16         if(i==2)
17             i--;
18     }
19     if(N>1)SIGN*=6;
20     return SIGN;
21 
22 }
23 
24 int main()
25 {
26     int T,A,B;
27     scanf("%d",&T);
28     while(T--&&scanf("%d%d",&A,&B)!=EOF)
29         printf("%I64d\n",Find(A,B));
30     return 0;
31 }
View Code

 

posted @ 2014-08-22 13:30  Wurq  阅读(190)  评论(0编辑  收藏  举报