# Number with maximum number of prime factors

Given an integer N. The task is to find a number that is smaller than or equal to N and has maximum prime factors. In case there are two or more numbers with same maximum number of prime factors, find the smallest of all.

Examples:

```Input : N = 10
Output : 6
Number of prime factor of:
1 : 0
2 : 1
3 : 1
4 : 1
5 : 1
6 : 2
7 : 1
8 : 1
9 : 1
10 : 2
6 and 10 have maximum (2) prime factor
but 6 is smaller.

Input : N = 40
Output : 30
```

## Recommended: Please try your approach on {IDE} 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 smallest number having maximum number of 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 integer having maximum number ` `// of prime factor in first N natural numbers. ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// Return smallest number having maximum ` `// prime factors. ` `int` `maxPrimefactorNum(``int` `N) ` `{ ` `    ``int` `arr[N + 5]; ` `    ``memset``(arr, 0, ``sizeof``(arr)); ` ` `  `    ``// Sieve of eratosthenes method to count ` `    ``// number of prime factors. ` `    ``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; ` `    ``} ` ` `  `    ``int` `maxval = 0, maxint = 1; ` ` `  `    ``// Finding number having maximum number ` `    ``// of prime factor. ` `    ``for` `(``int` `i = 1; i <= N; i++) ` `    ``{ ` `        ``if` `(arr[i] > maxval) ` `        ``{ ` `            ``maxval = arr[i]; ` `            ``maxint = i; ` `        ``} ` `    ``} ` ` `  `    ``return` `maxint; ` `} ` ` `  `// Driven Program ` `int` `main() ` `{ ` `    ``int` `N = 40; ` `    ``cout << maxPrimefactorNum(N) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java program to find integer having maximum number  ` `// of prime factor in first N natural numbers.  ` `import` `java.util.Arrays; ` `public` `class` `GFG { ` ` `  `// Return smallest number having maximum  ` `// prime factors.  ` `    ``static` `int` `maxPrimefactorNum(``int` `N) { ` `        ``int` `arr[] = ``new` `int``[N + ``5``]; ` `        ``Arrays.fill(arr, ``0``); ` `         `  `        ``// Sieve of eratosthenes method to count  ` `        ``// number of prime factors.  ` `        ``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``; ` `        ``} ` ` `  `        ``int` `maxval = ``0``, maxint = ``1``; ` ` `  `        ``// Finding number having maximum number  ` `        ``// of prime factor.  ` `        ``for` `(``int` `i = ``1``; i <= N; i++) { ` `            ``if` `(arr[i] > maxval) { ` `                ``maxval = arr[i]; ` `                ``maxint = i; ` `            ``} ` `        ``} ` ` `  `        ``return` `maxint; ` `    ``} ` `// Driver program  ` ` `  `    ``public` `static` `void` `main(String[] args) { ` `        ``int` `N = ``40``; ` `        ``System.out.println(maxPrimefactorNum(N)); ` `    ``} ` `} `

## Python3

 `# Python 3 program to find integer having  ` `# maximum number of prime factor in first  ` `# N natural numbers. ` `from` `math ``import` `sqrt ` ` `  `# Return smallest number having maximum ` `# prime factors. ` `def` `maxPrimefactorNum(N): ` `    ``arr ``=` `[``0` `for` `i ``in` `range``(N ``+` `5``)] ` ` `  `    ``# Sieve of eratosthenes method to ` `    ``# count number of prime factors. ` `    ``for` `i ``in` `range``(``2``, ``int``(sqrt(N)) ``+` `1``, ``1``): ` `        ``if` `(arr[i] ``=``=` `0``): ` `            ``for` `j ``in` `range``(``2` `*` `i, N ``+` `1``, i): ` `                ``arr[j] ``+``=` `1` ` `  `        ``arr[i] ``=` `1` ` `  `    ``maxval ``=` `0` `    ``maxint ``=` `1` ` `  `    ``# Finding number having maximum  ` `    ``# number of prime factor. ` `    ``for` `i ``in` `range``(``1``, N ``+` `1``, ``1``): ` `        ``if` `(arr[i] > maxval): ` `            ``maxval ``=` `arr[i] ` `            ``maxint ``=` `i ` `     `  `    ``return` `maxint ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``N ``=` `40` `    ``print``(maxPrimefactorNum(N)) ` ` `  `# This code is contributed by ` `# Sahil_Shelangia `

## C#

 `// C# program to find integer having  ` `// maximum number of prime factor in ` `// first N natural numbers. ` `using` `System; ` ` `  `class` `GFG  ` `{  ` ` `  `// Return smallest number having  ` `// prime factors.  ` `static` `int` `maxPrimefactorNum(``int` `N) ` `{  ` `    ``int` `[]arr = ``new` `int``[N + 5];  ` `     `  `    ``// Sieve of eratosthenes method to  ` `    ``// count number of prime factors.  ` `    ``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;  ` `    ``}  ` ` `  `    ``int` `maxval = 0, maxint = 1;  ` ` `  `    ``// Finding number having maximum  ` `    ``// number of prime factor.  ` `    ``for` `(``int` `i = 1; i <= N; i++)  ` `    ``{  ` `        ``if` `(arr[i] > maxval)  ` `        ``{  ` `            ``maxval = arr[i];  ` `            ``maxint = i;  ` `        ``}  ` `    ``}  ` ` `  `    ``return` `maxint;  ` `}  ` ` `  `// Driver Code  ` `public` `static` `void` `Main() ` `{  ` `    ``int` `N = 40;  ` `    ``Console.WriteLine(maxPrimefactorNum(N));  ` `}  ` `}  ` ` `  `// This code is contributed  ` `// by 29AjayKumar `

## PHP

 ` ``\$maxval``)  ` `        ``{  ` `            ``\$maxval` `= ``\$arr``[``\$i``];  ` `            ``\$maxint` `= ``\$i``;  ` `        ``}  ` `    ``}  ` ` `  `    ``return` `\$maxint``;  ` `}  ` ` `  `// Driver Code ` `\$N` `= 40;  ` `echo` `maxPrimefactorNum(``\$N``), ``"\n"``; ` ` `  `// This code is contributed by ajit ` `?> `

Output:

```30
```

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.

Below is the implementation of this approach:

## C++

 `// C++ program to find integer having maximum number ` `// of prime factor in first N natural numbers ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// Return smallest number having maximum prime factors. ` `int` `maxPrimefactorNum(``int` `N) ` `{ ` `    ``bool` `arr[N + 5]; ` `    ``memset``(arr, ``true``, ``sizeof``(arr)); ` ` `  `    ``// Sieve of eratosthenes ` `    ``for` `(``int` `i = 3; i*i <= N; i += 2) ` `    ``{ ` `        ``if` `(arr[i]) ` `            ``for` `(``int` `j = i*i; j <= N; j+=i) ` `                ``arr[j] = ``false``; ` `    ``} ` ` `  `    ``// Storing prime numbers. ` `    ``vector<``int``> prime; ` `    ``prime.push_back(2); ` ` `  `    ``for``(``int` `i = 3; i <= N; i += 2) ` `        ``if``(arr[i]) ` `            ``prime.push_back(i); ` ` `  `    ``// Generating number having maximum prime factors. ` `    ``int` `i = 0, ans = 1; ` `    ``while` `(ans*prime[i] <= N && i < prime.size()) ` `    ``{ ` `        ``ans *= prime[i]; ` `        ``i++; ` `    ``} ` ` `  `    ``return` `ans; ` `} ` ` `  `// Driven Program ` `int` `main() ` `{ ` `    ``int` `N = 40; ` `    ``cout << maxPrimefactorNum(N) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java program to find integer having maximum number  ` `// of prime factor in first N natural numbers  ` `import` `java.util.Vector; ` ` `  `public` `class` `GFG { ` ` `  `// Return smallest number having maximum prime factors. ` `    ``static` `int` `maxPrimefactorNum(``int` `N) { ` `        ``//default value of boolean is false ` `        ``boolean` `arr[] = ``new` `boolean``[N + ``5``]; ` ` `  `        ``// Sieve of eratosthenes  ` `        ``for` `(``int` `i = ``3``; i * i <= N; i += ``2``) { ` `            ``if` `(!arr[i]) { ` `                ``for` `(``int` `j = i * i; j <= N; j += i) { ` `                    ``arr[j] = ``true``; ` `                ``} ` `            ``} ` `        ``} ` ` `  `        ``// Storing prime numbers.  ` `        ``Vector prime = ``new` `Vector<>();  ` `        ``prime.add(prime.size(), ``2``); ` `        ``for` `(``int` `i = ``3``; i <= N; i += ``2``) { ` `            ``if` `(!arr[i]) { ` `                ``prime.add(prime.size(), i); ` `            ``} ` `        ``} ` ` `  `        ``// Generating number having maximum prime factors.  ` `        ``int` `i = ``0``, ans = ``1``; ` `        ``while` `(ans * prime.get(i) <= N && i < prime.size()) { ` `            ``ans *= prime.get(i); ` `            ``i++; ` `        ``} ` ` `  `        ``return` `ans; ` `    ``} ` `// Driver program  ` ` `  `    ``public` `static` `void` `main(String[] args) { ` `        ``int` `N = ``40``; ` `        ``System.out.println(maxPrimefactorNum(N)); ` `    ``} ` `} `

## Python3

 `# Python3 program to find integer having  ` `# maximum number of prime factor in first ` `# N natural numbers ` ` `  `# Return smallest number having  ` `# maximum prime factors. ` `def` `maxPrimefactorNum(N): ` ` `  `    ``arr ``=` `[``True``] ``*` `(N ``+` `5``); ` ` `  `    ``# Sieve of eratosthenes ` `    ``i ``=` `3``; ` `    ``while` `(i ``*` `i <``=` `N): ` `        ``if` `(arr[i]): ` `            ``for` `j ``in` `range``(i ``*` `i, N ``+` `1``, i): ` `                ``arr[j] ``=` `False``; ` `        ``i ``+``=` `2``; ` ` `  `    ``# Storing prime numbers. ` `    ``prime ``=` `[]; ` `    ``prime.append(``2``); ` ` `  `    ``for` `i ``in` `range``(``3``, N ``+` `1``, ``2``): ` `        ``if``(arr[i]): ` `            ``prime.append(i); ` ` `  `    ``# Generating number having maximum  ` `    ``# prime factors. ` `    ``i ``=` `0``; ` `    ``ans ``=` `1``; ` `    ``while` `(ans ``*` `prime[i] <``=` `N ``and`  `                    ``i < ``len``(prime)): ` `        ``ans ``*``=` `prime[i]; ` `        ``i ``+``=` `1``; ` ` `  `    ``return` `ans; ` ` `  `# Driver Code ` `N ``=` `40``; ` `print``(maxPrimefactorNum(N)); ` ` `  `# This code is contributed by mits `

## C#

 `// C# program to find integer having maximum number  ` `// of prime factor in first N natural numbers  ` `using` `System; ` `using` `System.Collections; ` ` `  `class` `GFG {  ` ` `  `    ``// Return smallest number having maximum prime factors.  ` `    ``static` `int` `maxPrimefactorNum(``int` `N) ` `    ``{  ` `        ``//default value of boolean is false  ` `        ``bool` `[]arr = ``new` `bool``[N + 5];  ` `        ``int` `i ; ` `         `  `        ``// Sieve of eratosthenes  ` `        ``for` `(i = 3; i * i <= N; i += 2)  ` `        ``{  ` `            ``if` `(!arr[i])  ` `            ``{  ` `                ``for` `(``int` `j = i * i; j <= N; j += i) ` `                ``{  ` `                    ``arr[j] = ``true``;  ` `                ``}  ` `            ``}  ` `        ``}  ` ` `  `        ``// Storing prime numbers.  ` `        ``ArrayList prime = ``new` `ArrayList();  ` `        ``prime.Add(2);  ` `        ``for` `(i = 3; i <= N; i += 2)  ` `        ``{  ` `            ``if` `(!arr[i]) ` `            ``{  ` `                ``prime.Add(i);  ` `            ``}  ` `        ``}  ` ` `  `        ``// Generating number having  ` `        ``// maximum prime factors.  ` `        ``int` `ans = 1;  ` `        ``i = 0; ` `        ``while` `(ans * (``int``)prime[i] <= N && i < prime.Count) ` `        ``{  ` `            ``ans *= (``int``)prime[i];  ` `            ``i++;  ` `        ``}  ` ` `  `        ``return` `ans;  ` `    ``}  ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main()  ` `    ``{  ` `        ``int` `N = 40;  ` `        ``Console.Write(maxPrimefactorNum(N));  ` `    ``}  ` `}  ` ` `  `// This code is contributed by Rajput-Ji  `

## PHP

 ` `

Output:

```30
```

This article is contributed by Anuj Chauhan. 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.

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.