hdu-4497 GCD and LCM

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4497

题目大意:

给出三个数的gcd和lcm,求出这三个数有多少种可能性

解题思路:

设lcm / gcd = (p1^r1)*(p2^r2)*(p3^r3)…(pm^rm)

设三个数为x, y, z;

有:

x=(p1^i1)*(p2^i2)*(p3^i3)…(pm^im)

y=(p1^j1)*(p2^j2)*(p3^j3)…(pm^jm)

z=(p1^k1)*(p2^k2)*(p3^k3)…(pm^km)

对于某个r,i、j、k里面一定有一个是r,并且一定有一个是0,所以i,j,k有一下3种情况:

r 0 0 ,有C(3,1)种
r 0 r ,有C(3,1)种
r 0 1~r-1 ,有(r-1)*A(3,3)种

所以一共是6*r种。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll n, m;
 5 
 6 int main()
 7 {
 8     int T;
 9     cin >> T;
10     while(T--)
11     {
12         cin >> m >> n;
13         if(n % m)
14         {
15             cout<<"0"<<endl;
16             continue;
17         }
18         n /= m;
19         ll ans = 1;
20         for(ll i  = 2; i * i <= n; i++)
21         {
22             if(n % i == 0)
23             {
24                 int cnt = 0;
25                 while(n % i == 0)
26                 {
27                     cnt++;
28                     n /= i;
29                 }
30                 ans *= 6;
31                 ans *= cnt;
32             }
33         }
34         if(n != 1)
35             ans *= 6;
36         cout<<ans<<endl;
37     }
38     return 0;
39 }

 

posted @ 2018-05-13 15:29  _努力努力再努力x  阅读(118)  评论(0编辑  收藏  举报