Find any pair with given GCD and LCM in C++

In this section we will see how to get number of pairs using the given GCD and LCM values. Suppose the GCD and LCM values are 2 and 12. Now the possible pairs of numbers are (2, 12), (4, 6), (6, 4) and (12, 2). So our program will find the count of pairs. That is 4.

Let us see the algorithm to understand what will be the technique to solve this problem.

Algorithm

countPairs(gcd, lcm):
Begin
if lcm is nit divisible by gcd, then
return 0
temp := lcm/gcd
c := primeFactorCount(temp)
res := shift 1 to the left c number of times
return res
End
primeFactorCount(n):
Begin
count := 0
until n is not odd, increase count and divide n by 2
for i := 3, when i2 < n, increase i by 2, do
if n is divisible by i, then
increase count
while n is divisible by i, do
n := n / i
done
end if
done
if n > 2, then
increase count by 1
return count
End

Example

Live Demo

#include<iostream>
#include<cmath>
using namespace std;
int primeFactorCount(int);
int countPairs(int gcd, int lcm) {
if(lcm % gcd != 0)
return 0;
int temp = lcm/gcd;
return (1 << primeFactorCount(temp));
}
int primeFactorCount(int n){
int count = 0;
if(n%2 == 0){ //if n is divisible by 0, enter into the next part
count++;
while(n%2 == 0)
n = n/2;
}
//now n is odd, so if we increase n by 2, all numbers will be odd
for(int i = 3; i*i <= n; i = i + 2){
if(n%i == 0){ //if n is divisible by 0, enter into the next part
count++;
while(n%i == 0)
n = n/i;
}
}
if(n > 2)
count++;
return count;
}
int main() {
cout << "Possible pairs of GCD = 2, and LCM = 12 is " <<countPairs(2, 12);
}

Output

Possible pairs of GCD = 2, and LCM = 12 is 4