In this section we will see how we can get the product of unique prime factor of a number in an efficient way. There is a number say n = 1092, we have to get product of unique prime factors of this. The prime factors of 1092 are 2, 2, 3, 7, 13. So the unique prime factors are {2, 3, 7, 13}, the product is 546. To solve this problem, we have to follow this rule −
When the number is divisible by 2, then multiply 2 with product, and divide the number by 2 repeatedly, then next 2s will be ignored.
Now the number must be odd. Now starting from 3 to square root of the number, if the number is divisible by current value, then multiply the factor into product, and change the number by divide it with the current number then continue. Next are ignored like above
And finally if the number is greater than 2, then it is not 1, so multiply the remaining number.
Let us see the algorithm to get better idea.
Algorithm
uniquePrimeProduct(n)
begin prod := 1 if n is divisible by 2, then prod := prod * 2 n := n / 2 end if while n is divisible by 2, do n := n / 2 done for i := 3 to √𝑛, increase i by 2, do if n is divisible by i, then prod := prod * i n := n / i end if while n is divisible by i, do n := n / i done done if n > 2, then prod := prod * n end if end
Example
#include<stdio.h> #include<math.h> int uniquePrimeProduct(int n){ int i, prod = 1; if(n % 2 == 0){ prod *= 2; n = n/2; } while(n % 2 == 0){//skip next 2s n = n/2; } for(i = 3; i <= sqrt(n); i=i+2){ //i will increase by 2, to get only odd numbers if(n % i == 0){ prod *= i; n = n/i; } while(n % i == 0){ //skip next i's n = n/i; } } if(n < 2){ prod *= n; } return prod; } main() { int n; printf("Enter a number: "); scanf("%d", &n); printf("Product of prime factors: %d", uniquePrimeProduct(n)); }
Output
Enter a number: 1092 Product of prime factors: 546