Given a number n, we need to find the product of all of its unique prime factors. Prime factors: It is basically a factor of the number that is a prime number itself.
Examples:
Input: num = 10 Output: Product is 10 Explanation: Here, the input number is 10 having only 2 prime factors and they are 5 and 2. And hence their product is 10. Input : num = 25 Output: Product is 5 Explanation: Here, for the input to be 25 we have only one unique prime factor i.e 5. And hence the required product is 5.
Method 1 (Simple)
Using a loop from i = 2 to n and check if i is a factor of n then check if i is prime number itself if yes then store product in product variable and continue this process till i = n.
// C++ program to find product of // unique prime factors of a number #include <bits/stdc++.h> using namespace std;
long long int productPrimeFactors( int n)
{ long long int product = 1;
for ( int i = 2; i <= n; i++) {
// Checking if 'i' is factor of num
if (n % i == 0) {
// Checking if 'i' is a Prime number
bool isPrime = true ;
for ( int j = 2; j <= i / 2; j++) {
if (i % j == 0) {
isPrime = false ;
break ;
}
}
// condition if 'i' is Prime number
// as well as factor of num
if (isPrime) {
product = product * i;
}
}
}
return product;
} // driver function int main()
{ int n = 44;
cout << productPrimeFactors(n);
return 0;
} |
22
Method 2 (Efficient)
The idea is based on Efficient program to print all prime factors of a given number
// C++ program to find product of // unique prime factors of a number #include <bits/stdc++.h> using namespace std;
// A function to print all prime factors of // a given number n long long int productPrimeFactors( int n)
{ long long int product = 1;
// Handle prime factor 2 explicitly so that
// can optimally handle other prime factors.
if (n % 2 == 0) {
product *= 2;
while (n % 2 == 0)
n = n / 2;
}
// n must be odd at this point. So we can
// skip one element (Note i = i +2)
for ( int i = 3; i <= sqrt (n); i = i + 2) {
// While i divides n, print i and
// divide n
if (n % i == 0) {
product = product * i;
while (n % i == 0)
n = n / i;
}
}
// This condition is to handle the case when n
// is a prime number greater than 2
if (n > 2)
product = product * n;
return product;
} // driver function int main()
{ int n = 44;
cout << productPrimeFactors(n);
return 0;
} |
22
Please refer complete article on Product of unique prime factors of a number for more details!