# Maximum number of unique prime factors

Given a number N, find the maximum number of unique prime factors any number can have in range [1, N].

Examples:

```Input : N = 500
Output : 4
The maximum number of prime factors
for any number in [1, 500] is 4. A
number in range that has 4 prime
factors is 210 (2 x 3 x 5 x 7)

Input  : N = 3
Output : 1

Input : N = 5000
Output : 5
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

Method 1 (brute force):
For each integer from 1 to N, find the number of prime factor of each integer and find the number of maximum unique prime factors.

Method 2 (Better Approach):
Use sieve method to count number of prime factor of each number less than N. And find the minimum number having maximum count.

Below is the implementation of this approach:

## C++

 `// C++ program to find maximum number of prime ` `// factors for a number in range [1, N] ` `#include ` `using` `namespace` `std; ` ` `  `// Return smallest number having maximum ` `// prime factors. ` `int` `maxPrimefactorNum(``int` `N) ` `{ ` `    ``// Sieve of eratosthenes method to count ` `    ``// number of unique prime factors. ` `    ``int` `arr[N + 1]; ` `    ``memset``(arr, 0, ``sizeof``(arr)); ` `    ``for` `(``int` `i = 2; i * i <= N; i++) { ` `        ``if` `(!arr[i]) ` `            ``for` `(``int` `j = 2 * i; j <= N; j += i) ` `                ``arr[j]++; ` ` `  `        ``arr[i] = 1;  ` `    ``} ` ` `  `    ``// Return maximum element in arr[] ` `    ``return` `*max_element(arr, arr+N); ` `} ` ` `  `// Driven Program ` `int` `main() ` `{ ` `    ``int` `N = 40; ` `    ``cout << maxPrimefactorNum(N) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java program to find maximum  ` `// number of prime factors for  ` `// a number in range [1, N] ` `class` `GFG ` `{ ` `static` `int` `getMax(``int``[] Arr) ` `{  ` `    ``int` `max = Arr[``0``];  ` `    ``for``(``int` `i = ``1``; i < Arr.length; i++)  ` `    ``if``(Arr[i] > max) ` `        ``max = Arr[i];  ` `    ``return` `max;  ` `} ` ` `  `// Return smallest number  ` `// having maximum prime factors. ` `static` `int` `maxPrimefactorNum(``int` `N) ` `{ ` `    ``// Sieve of eratosthenes method  ` `    ``// to count number of unique ` `    ``// prime factors. ` `    ``int``[] arr = ``new` `int``[N + ``1``]; ` `    ``for` `(``int` `i = ``2``; i * i <= N; i++)  ` `    ``{ ` `        ``if` `(arr[i] == ``0``) ` `            ``for` `(``int` `j = ``2` `* i; j <= N; j += i) ` `                ``arr[j]++; ` ` `  `        ``arr[i] = ``1``;  ` `    ``} ` ` `  `    ``// Return maximum element in arr[] ` `    ``return` `getMax(arr); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `N = ``40``; ` `    ``System.out.println(maxPrimefactorNum(N)); ` `} ` `} ` ` `  `// This code is contributed by mits `

## Python3

 `# Python3 program to find maximum number  ` `# of prime factors for a number in range [1, N] ` ` `  `# Return smallest number having maximum ` `# prime factors. ` `def` `maxPrimefactorNum(N): ` ` `  `    ``# Sieve of eratosthenes method to count ` `    ``# number of unique prime factors. ` `    ``arr ``=` `[``0``] ``*` `(N ``+` `1``); ` `    ``i ``=` `2``; ` `    ``while` `(i ``*` `i <``=` `N):  ` `        ``if` `(arr[i] > ``0``): ` `            ``for` `j ``in` `range``(``2` `*` `i, N ``+` `1``, i): ` `                ``arr[j] ``+``=` `1``; ` `        ``i ``+``=` `1``; ` ` `  `        ``arr[i] ``=` `1``;  ` ` `  `    ``# Return maximum element in arr[] ` `    ``return` `max``(arr); ` ` `  `# Driver Code ` `N ``=` `40``; ` `print``(maxPrimefactorNum(N)); ` ` `  `# This code is contributed by mits `

## C#

 `// C# program to find maximum  ` `// number of prime factors for  ` `// a number in range [1, N] ` `using` `System; ` ` `  `class` `GFG ` `{ ` `static` `int` `getMax(``int``[] Arr) ` `{  ` `    ``int` `max = Arr[0];  ` `    ``for``(``int` `i = 1; i < Arr.Length; i++)  ` `    ``if``(Arr[i] > max) ` `        ``max = Arr[i];  ` `    ``return` `max;  ` `} ` ` `  `// Return smallest number  ` `// having maximum prime factors. ` `static` `int` `maxPrimefactorNum(``int` `N) ` `{ ` `    ``// Sieve of eratosthenes method  ` `    ``// to count number of unique ` `    ``// prime factors. ` `    ``int``[] arr = ``new` `int``[N + 1]; ` `    ``for` `(``int` `i = 2; i * i <= N; i++)  ` `    ``{ ` `        ``if` `(arr[i] == 0) ` `            ``for` `(``int` `j = 2 * i;  ` `                     ``j <= N; j += i) ` `                ``arr[j]++; ` ` `  `        ``arr[i] = 1;  ` `    ``} ` ` `  `    ``// Return maximum ` `    ``// element in arr[] ` `    ``return` `getMax(arr); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main() ` `{ ` `    ``int` `N = 40; ` `    ``Console.WriteLine(maxPrimefactorNum(N)); ` `} ` `} ` ` `  `// This code is contributed ` `// by Akanksha Rai(Abby_akku) `

## PHP

 ` `

Output:

```3
```

Method 3 (efficient approach):
Generate all prime number before N using Sieve. Now, multiply consecutive prime numbers (starting from first prime number) one after another until the product is less than N. The idea is based on simple fact that the first set of prime numbers can cause maximum unique prime factors.

Below is the implementation of this approach:

## C++

 `// C++ program to find maximum number of prime ` `// factors in first N natural numbers ` `#include ` `using` `namespace` `std; ` ` `  `// Return maximum number of prime factors for ` `// any number in [1, N] ` `int` `maxPrimefactorNum(``int` `N) ` `{ ` `    ``if` `(N < 2) ` `        ``return` `0; ` ` `  `    ``// Based on Sieve of Eratosthenes ` `    ``// https://www.geeksforgeeks.org/sieve-of-eratosthenes/ ` `    ``bool` `arr[N+1]; ` `    ``memset``(arr, ``true``, ``sizeof``(arr)); ` `    ``int` `prod = 1, res = 0; ` `    ``for` `(``int` `p=2; p*p<=N; p++) ` `    ``{ ` `        ``// If p is prime ` `        ``if` `(arr[p] == ``true``) ` `        ``{ ` `            ``for` `(``int` `i=p*2; i<=N; i += p) ` `                ``arr[i] = ``false``; ` ` `  `            ``// We simply multiply first set ` `            ``// of prime numbers while the ` `            ``// product is smaller than N. ` `            ``prod *= p; ` `            ``if` `(prod > N) ` `                ``return` `res; ` `            ``res++; ` `        ``} ` `    ``} ` ` `  `    ``return` `res; ` `} ` ` `  `// Driven Program ` `int` `main() ` `{ ` `    ``int` `N = 500; ` `    ``cout << maxPrimefactorNum(N) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java program to find maximum  ` `// number of prime factors in  ` `// first N natural numbers ` ` `  `class` `GFG ` `{ ` `// Return maximum number  ` `// of prime factors for ` `// any number in [1, N] ` `static` `int` `maxPrimefactorNum(``int` `N) ` `{ ` `    ``if` `(N < ``2``) ` `        ``return` `0``; ` ` `  `    ``// Based on Sieve of Eratosthenes ` `    ``// https://www.geeksforgeeks.org/sieve-of-eratosthenes/ ` `    ``boolean``[] arr = ``new` `boolean``[N + ``1``]; ` `    ``int` `prod = ``1``, res = ``0``; ` `    ``for` `(``int` `p = ``2``; p * p <= N; p++) ` `    ``{ ` `        ``// If p is prime ` `        ``if` `(arr[p] == ``false``) ` `        ``{ ` `            ``for` `(``int` `i = p * ``2``;  ` `                     ``i <= N; i += p) ` `                ``arr[i] = ``true``; ` ` `  `            ``// We simply multiply first set ` `            ``// of prime numbers while the ` `            ``// product is smaller than N. ` `            ``prod *= p; ` `            ``if` `(prod > N) ` `                ``return` `res; ` `            ``res++; ` `        ``} ` `    ``} ` ` `  `    ``return` `res; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `N = ``500``; ` `    ``System.out.println(maxPrimefactorNum(N)); ` `} ` `} ` ` `  `// This code is contributed by mits `

## Python3

 `# Python3 program to find maximum number  ` `# of prime factors in first N natural numbers  ` ` `  `# Return maximum number of prime factors  ` `# for any number in [1, N]  ` `def` `maxPrimefactorNum(N):  ` ` `  `    ``if` `(N < ``2``):  ` `        ``return` `0``;  ` ` `  `    ``arr ``=` `[``True``] ``*` `(N ``+` `1``);  ` `    ``prod ``=` `1``;  ` `    ``res ``=` `0``; ` `    ``p ``=` `2``; ` `    ``while` `(p ``*` `p <``=` `N): ` `         `  `        ``# If p is prime  ` `        ``if` `(arr[p] ``=``=` `True``):  ` `            ``for` `i ``in` `range``(p ``*` `2``, N ``+` `1``, p):  ` `                ``arr[i] ``=` `False``;  ` ` `  `            ``# We simply multiply first set  ` `            ``# of prime numbers while the  ` `            ``# product is smaller than N.  ` `            ``prod ``*``=` `p;  ` `            ``if` `(prod > N):  ` `                ``return` `res;  ` `            ``res ``+``=` `1``; ` `        ``p ``+``=` `1``; ` ` `  `    ``return` `res;  ` ` `  `# Driver Code  ` `N ``=` `500``;  ` `print``(maxPrimefactorNum(N));  ` ` `  `# This code is contributed by mits  `

## C#

 `// C# program to find maximum number of  ` `// prime factors in first N natural numbers  ` `using` `System; ` ` `  `class` `GFG  ` `{  ` ` `  `// Return maximum number of prime  ` `// factors for any number in [1, N]  ` `static` `int` `maxPrimefactorNum(``int` `N)  ` `{  ` `    ``if` `(N < 2)  ` `        ``return` `0;  ` ` `  `    ``// Based on Sieve of Eratosthenes  ` `    ``// https://www.geeksforgeeks.org/sieve-of-eratosthenes/  ` `    ``bool``[] arr = ``new` `bool``[N + 1];  ` `    ``int` `prod = 1, res = 0;  ` `    ``for` `(``int` `p = 2; p * p <= N; p++)  ` `    ``{  ` `        ``// If p is prime  ` `        ``if` `(arr[p] == ``false``)  ` `        ``{  ` `            ``for` `(``int` `i = p * 2;  ` `                     ``i <= N; i += p)  ` `                ``arr[i] = ``true``;  ` ` `  `            ``// We simply multiply first set  ` `            ``// of prime numbers while the  ` `            ``// product is smaller than N.  ` `            ``prod *= p;  ` `            ``if` `(prod > N)  ` `                ``return` `res;  ` `            ``res++;  ` `        ``}  ` `    ``}  ` ` `  `    ``return` `res;  ` `}  ` ` `  `// Driver Code  ` `public` `static` `void` `Main()  ` `{  ` `    ``int` `N = 500;  ` `    ``Console.WriteLine(maxPrimefactorNum(N));  ` `}  ` `}  ` ` `  `// This code is contributed  ` `// by 29AjayKumar `

## PHP

 ` ``\$N``) ` `                ``return` `\$res``; ` `            ``\$res``++; ` `        ``} ` `    ``} ` ` `  `    ``return` `\$res``; ` `} ` ` `  `// Driver Code ` `\$N` `= 500; ` `echo` `maxPrimefactorNum(``\$N``) . ``"\n"``; ` ` `  `// This code is contributed by mits ` `?> `

Output:

```4
```

This article is contributed by Mohak Agrawal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.