In this section, we will see how we can get the largest prime factor of a number in an efficient way. There is a number say n = 1092, we have to get the largest prime factor of this. The prime factors of 1092 are 2, 2, 3, 7, 13. So the largest is 13. To solve this problem, we have to follow this rule −
When the number is divisible by 2, then store 2 as largest, and divide the number by 2 repeatedly.
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 store factor as largest, and change the number by divide it with the current number then continue.
And finally if the number is greater than 2, then it is not 1, so get the max prime factor.
Let us see the algorithm to get a better idea.
Algorithm
getMaxPrimeFactors(n)
begin while n is divisible by 2, do max := 2 n := n / 2 done for i := 3 to √𝑛, increase i by 2, do while n is divisible by i, do max := i n := n / i done done if n > 2, then max := n end if end
Example
#include<stdio.h> #include<math.h> int getMaxPrimeFactor(int n) { int i, max = -1; while(n % 2 == 0) { max = 2; n = n/2; //reduce n by dividing this by 2 } for(i = 3; i <= sqrt(n); i=i+2){ //i will increase by 2, to get only odd numbers while(n % i == 0) { max = i; n = n/i; } } if(n > 2) { max = n; } return max; } main() { int n; printf("Enter a number: "); scanf("%d", &n); printf("Max prime factor: %d", getMaxPrimeFactor(n)); }
Output
Enter a number: 24024 Max prime factor: 13