Maximum number of unique prime factors - GeeksforGeeks

20 May, 2021
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
 
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 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++
Java
Python3
C#
PHP
Javascript
// C++ program to find maximum number of prime// factors for a number in range [1, N]#include <bits/stdc++.h>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 Programint main(){    int N = 40;    cout << maxPrimefactorNum(N) << endl;    return 0;}
// 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 Codepublic static void main(String[] args){    int N = 40;    System.out.println(maxPrimefactorNum(N));}} // This code is contributed by mits
# 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 CodeN = 40;print(maxPrimefactorNum(N)); # This code is contributed by mits
// 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 Codepublic static void Main(){    int N = 40;    Console.WriteLine(maxPrimefactorNum(N));}} // This code is contributed// by Akanksha Rai(Abby_akku)
<?php// PHP program to find maximum number of prime// factors for a number in range [1, N] // Return smallest number having maximum// prime factors.function maxPrimefactorNum($N){    // Sieve of eratosthenes method to count    // number of unique prime factors.    $arr = array_fill(0, $N + 1, 0);    for ($i = 2; $i * $i <= $N; $i++)    {        if (!$arr[$i])            for ($j = 2 * $i; $j <= $N; $j += $i)                $arr[$j]++;         $arr[$i] = 1;    }     // Return maximum element in arr[]    return max($arr);} // Driver Code$N = 40;echo maxPrimefactorNum($N); // This code is contributed by mits?>
<script> // Javascript program to find maximum// number of prime factors for// a number in range [1, N]  function getMax(Arr){    let max = Arr[0];    for(let i = 1; i < Arr.length; i++)    if(Arr[i] > max)        max = Arr[i];    return max;} // Return smallest number// having maximum prime factors.function maxPrimefactorNum(N){    // Sieve of eratosthenes method    // to count number of unique    // prime factors.    let arr = new Array(N+1).fill(0);    for (let i = 2; i * i <= N; i++)    {        if (arr[i] == 0)            for (let j = 2 * i; j <= N; j += i)                arr[j]++;         arr[i] = 1;    }     // Return maximum element in arr[]    return getMax(arr);} // driver program        let N = 40;    document.write(maxPrimefactorNum(N));         </script>
Output:  
3
Method 3 (efficient approach): Generate all prime numbers 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++
Java
Python3
C#
PHP
Javascript
// C++ program to find maximum number of prime// factors in first N natural numbers#include <bits/stdc++.h>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 Programint main(){    int N = 500;    cout << maxPrimefactorNum(N) << endl;    return 0;}
// 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 Codepublic static void main(String[] args){    int N = 500;    System.out.println(maxPrimefactorNum(N));}} // This code is contributed by mits
# 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 CodeN = 500;print(maxPrimefactorNum(N)); # This code is contributed by mits
// C# program to find maximum number of// prime factors in first N natural numbersusing 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 Codepublic static void Main(){    int N = 500;    Console.WriteLine(maxPrimefactorNum(N));}} // This code is contributed// by 29AjayKumar
<?php// PHP 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]function maxPrimefactorNum($N){    if ($N < 2)        return 0;     $arr = array_fill(0, ($N + 1), true);    $prod = 1;    $res = 0;    for ($p = 2;         $p * $p <= $N; $p++)    {        // If p is prime        if ($arr[$p] == true)        {            for ($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;} // Driver Code$N = 500;echo maxPrimefactorNum($N) . "\n"; // This code is contributed by mits?>
<script> // javascript 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]function maxPrimefactorNum(N){    if (N < 2)        return 0;     // Based on Sieve of Eratosthenes    // https://www.geeksforgeeks.org/sieve-of-eratosthenes/    arr = Array.from({length: N + 1}, (_, i) => false);    var prod = 1, res = 0;    for (var p = 2; p * p <= N; p++)    {        // If p is prime        if (arr[p] == false)        {            for (var 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 Codevar N = 500;document.write(maxPrimefactorNum(N)); // This code is contributed by 29AjayKumar</script>
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 write.geeksforgeeks.org or mail your article to review-team@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. 
Mithun Kumar
Akanksha_Rai
29AjayKumar
sanjoy_62
prime-factor
sieve
Mathematical
Mathematical
sieve
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Print all possible combinations of r elements in a given array of size n
The Knight's tour problem | Backtracking-1
Operators in C / C++
Program for factorial of a number
Find minimum number of coins that make a given value
Program to find sum of elements in a given array
Minimum number of jumps to reach end
Program to print prime numbers from 1 to N.