Related Articles
Number with maximum number of prime factors
• Difficulty Level : Easy
• Last Updated : 26 Apr, 2021

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 the 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```

Method 1 (brute force):
For each integer from 1 to N, find the number of prime factors of each integer and find the smallest number having a maximum number of prime factors.
Method 2 (Better Approach):
Use sieve method to count a number of prime factors 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``?>`

## Javascript

 ``

Output:

`30`

Method 3 (efficient approach):
Generate all prime numbers before N using Sieve. Now, multiply consecutive prime numbers (starting from the 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

 ``

## Javascript

 ``

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.