Given an integer **X**, denoting the number of factors of a positive integer N can have. The task is to find the maximum number of distinct prime factors the number **N** can have.

**Examples:**

Input:X = 9Output: 2Explanation:

Some of the possible numbers having 9 factors are:

256: 1,2, 4, 8, 16, 32, 64, 128, 256

Number of prime factors = 1

36: 1,2, 3, 4, 6, 9, 12, 18, 36

Number of prime factors = 2

Input:X = 8Output:3

Some of the numbers having 8 factors are:

128 : 1,2,4, 8, 16, 32, 64, 128

Number of prime factors = 1

24 : 1,2, 3,4, 6, 8, 12, 24

Number of prime factors = 2

30 : 1,2, 3, 5, 6, 10, 15, 30

Number of prime factors = 3

**Approach:** The key observation in the problem is, any positive natural number can be represented as product of its prime factors as follows:

// Number can be represented as product // prime factors as follows // Total number of factors of N can be // defined as follows Number of Factors = (p+1) * (q+1) * (r+1)..

In the above problem, the number of factors are given which can be used to find the maximum prime factors possible for a number with the given count of factors as follows:

If X can be expressed as product of K numbers then we have at most K primes in X. In Order to split X as product of maximum number of values, all the values should be prime. X = (p+1) * (q+1) * (r+1) // So the maximum number of prime // factors of the given number greater // than 1 can lead to a number N. Let's say X = 12 X = 2 * 2 * 3 Then possible N can be: N = a^{(2-1)}* b^{(2-1)}* c^{(3-1)}N = a^{1}* b^{1}* c^{2}// Here a, b, and c can be any distinct prime // numbers to get the possible value of N N = 2^{1}* 3^{1}* 5^{2}N = 150 let's say X = 8 X = 2 * 2 * 2 N = 2^{1}* 3^{1}* 5^{1}N = 30

Therefore, the maximum count of prime divisors of a number can have is the count of the prime factors (can be repetitive also) in the factorization of the count of factors of the number.

Below is the implementation of the above approach:

## C++

`// C++ implementation to find the` `// maximum count of the prime factors` `// by the count of factors of number` `#include <iostream>` `#include <math.h>` `using` `namespace` `std;` `// Function to count number` `// of prime factors of x` `int` `countPrimeFactors(` `int` `n)` `{` ` ` `if` `(n == 1)` ` ` `return` `0;` ` ` `// Count variable is` ` ` `// incremented for every` ` ` `// prime factor of x` ` ` `int` `cnt = 0;` ` ` `while` `(n % 2 == 0) {` ` ` `cnt++;` ` ` `n = n / 2;` ` ` `}` ` ` `// Loop to count the number` ` ` `// of the prime factors of` ` ` `// the given number` ` ` `for` `(` `int` `i = 3; i <= ` `sqrt` `(n);` ` ` `i += 2) {` ` ` `while` `(n % i == 0) {` ` ` `cnt++;` ` ` `n = n / i;` ` ` `}` ` ` `}` ` ` `if` `(n > 2)` ` ` `cnt++;` ` ` `return` `cnt;` `}` `// Driver Code` `int` `main()` `{` ` ` `int` `x = 8;` ` ` `int` `prime_factor_cnt = countPrimeFactors(x);` ` ` `cout << prime_factor_cnt << endl;` ` ` `return` `0;` `}` |

## Java

`// Java implmentation to find the` `// maximum count of the prime factors` `// by the count of factors of number` `class` `GFG {` ` ` `// Function to count number` ` ` `// of prime factors of x` ` ` `static` `int` `countPrimeFactors(` `int` `n)` ` ` `{` ` ` `if` `(n == ` `1` `)` ` ` `return` `0` `;` ` ` `// Count variable is` ` ` `// incremented form every` ` ` `// prime factor of x` ` ` `int` `cnt = ` `0` `;` ` ` `while` `(n % ` `2` `== ` `0` `) {` ` ` `cnt++;` ` ` `n = n / ` `2` `;` ` ` `}` ` ` `// Loop to count the number` ` ` `// of the prime factors of` ` ` `// the given number` ` ` `for` `(` `int` `i = ` `3` `; i <= Math.sqrt(n); i += ` `2` `) {` ` ` `while` `(n % i == ` `0` `) {` ` ` `cnt++;` ` ` `n = n / i;` ` ` `}` ` ` `}` ` ` `if` `(n > ` `2` `)` ` ` `cnt++;` ` ` `return` `cnt;` ` ` `}` ` ` `// Driver Code` ` ` `public` `static` `void` `main(String[] args)` ` ` `{` ` ` `int` `x = ` `8` `;` ` ` `int` `prime_factor_cnt = countPrimeFactors(x);` ` ` `System.out.print(prime_factor_cnt + ` `"\n"` `);` ` ` `}` `}` `// This code is contributed by Princi Singh` |

## Python3

`# Python3 implementation to find the` `# maximum count of the prime factors` `# by the count of factors of number` `import` `math` `# Function to count number` `# of prime factors of x` `def` `countPrimeFactors(n):` ` ` ` ` `if` `(n ` `=` `=` `1` `):` ` ` `return` `0` ` ` ` ` `# Count variable is` ` ` `# incremented form every` ` ` `# prime factor of x` ` ` `cnt ` `=` `0` ` ` ` ` `while` `(n ` `%` `2` `=` `=` `0` `):` ` ` `cnt ` `+` `=` `1` ` ` `n ` `=` `n ` `/` `/` `2` ` ` ` ` `# Loop to count the number` ` ` `# of the prime factors of` ` ` `# the given number` ` ` `for` `i ` `in` `range` `(` `3` `, ` `int` `(math.sqrt(n)) ` `+` `1` `, ` `2` `):` ` ` `while` `(n ` `%` `i ` `=` `=` `0` `):` ` ` `cnt ` `+` `=` `1` ` ` `n ` `=` `n ` `/` `/` `i` ` ` ` ` `if` `(n > ` `2` `):` ` ` `cnt ` `+` `=` `1` ` ` ` ` `return` `cnt` `# Driver Code` `x ` `=` `8` `prime_factor_cnt ` `=` `countPrimeFactors(x)` `print` `(prime_factor_cnt)` `# This code is contributed by ShubhamCoder` |

## C#

`// C# implmentation to find the` `// maximum count of the prime factors` `// by the count of factors of number` `using` `System;` `class` `GFG {` ` ` `// Function to count number` ` ` `// of prime factors of x` ` ` `static` `int` `countPrimeFactors(` `int` `n)` ` ` `{` ` ` `if` `(n == 1)` ` ` `return` `0;` ` ` `// Count variable is` ` ` `// incremented form every` ` ` `// prime factor of x` ` ` `int` `cnt = 0;` ` ` `while` `(n % 2 == 0) {` ` ` `cnt++;` ` ` `n = n / 2;` ` ` `}` ` ` `// Loop to count the number` ` ` `// of the prime factors of` ` ` `// the given number` ` ` `for` `(` `int` `i = 3;` ` ` `i <= Math.Sqrt(n); i += 2) {` ` ` `while` `(n % i == 0) {` ` ` `cnt++;` ` ` `n = n / i;` ` ` `}` ` ` `}` ` ` `if` `(n > 2)` ` ` `cnt++;` ` ` `return` `cnt;` ` ` `}` ` ` `// Driver Code` ` ` `static` `public` `void` `Main()` ` ` `{` ` ` `int` `x = 8;` ` ` `int` `prime_factor_cnt = countPrimeFactors(x);` ` ` `Console.Write(prime_factor_cnt);` ` ` `}` `}` `// This code is contributed by ShubhamCoder` |

## Javascript

`<script>` `// Javascript implementation to find the` `// maximum count of the prime factors` `// by the count of factors of number` `// Function to count number` `// of prime factors of x` `function` `countPrimeFactors(n)` `{` ` ` `if` `(n == 1)` ` ` `return` `0;` ` ` `// Count variable is` ` ` `// incremented for every` ` ` `// prime factor of x` ` ` `let cnt = 0;` ` ` ` ` `while` `(n % 2 == 0)` ` ` `{` ` ` `cnt++;` ` ` `n = parseInt(n / 2);` ` ` `}` ` ` `// Loop to count the number` ` ` `// of the prime factors of` ` ` `// the given number` ` ` `for` `(let i = 3; i <= Math.sqrt(n); i += 2)` ` ` `{` ` ` `while` `(n % i == 0)` ` ` `{` ` ` `cnt++;` ` ` `n = parseInt(n / i);` ` ` `}` ` ` `}` ` ` `if` `(n > 2)` ` ` `cnt++;` ` ` `return` `cnt;` `}` `// Driver Code` `let x = 8;` `let prime_factor_cnt = countPrimeFactors(x);` `document.write(prime_factor_cnt);` `// This code is contributed by souravmahato348` `</script>` |

**Output:**

3

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**