Number which has the maximum number of distinct prime factors in the range M to N

Given two numbers M and N. The task is to print the number which has the maximum number of distinct prime factors of numbers in range M and N. If there exist multiple numbers, print the smallest one.

Examples:

Input: a=4, b=10
Output: 6
Number of distinct Prime Factors of 4 is 1
Number of distinct Prime Factors of 5 is 1
Number of distinct Prime Factors of 6 is 2
Number of distinct Prime Factors of 7 is 1
Number of distinct Prime Factors of 8 is 1
Number of distinct Prime Factors of 9 is 1
Number of distinct Prime Factors of 10 is 2

Input: a=100, b=150
Output: 102

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

The approach is to use Sieve of Erathosthenes. Create a factorCount[] array to store the the number of distinct prime factors of a number. While marking the number as prime, increment the count of prime factors in its multiples. In the end, get the maximum number stored in the factorCount[] array which will be the answer.

Below is the implementation of the above approach:

C++

 // C++ program to print the // Number which has the maximum number // of distinct prime factors of // numbers in range m to n #include using namespace std;    // Function to return the maximum number int maximumNumberDistinctPrimeRange(int m, int n) {     // array to store the number of distinct primes     long long factorCount[n + 1];        // true if index 'i' is a prime     bool prime[n + 1];        // initializing the number of factors to 0 and     for (int i = 0; i <= n; i++) {         factorCount[i] = 0;         prime[i] = true; // Used in Sieve     }        for (int i = 2; i <= n; i++) {            // condition works only when 'i' is prime,         // hence for factors of all prime number,         // the prime status is changed to false         if (prime[i] == true) {                // Number is prime             factorCount[i] = 1;                // number of factor of a prime number is 1             for (int j = i * 2; j <= n; j += i) {                    // incrementing factorCount all                 // the factors of i                 factorCount[j]++;                    // and changing prime status to false                 prime[j] = false;             }         }     }        // Initialize the max and num     int max = factorCount[m];     int num = m;        // Gets the maximum number     for (int i = m; i <= n; i++) {            // Gets the maximum number         if (factorCount[i] > max) {             max = factorCount[i];             num = i;         }     }     return num; }    // Driver code int main() {     int m = 4, n = 6;     // Calling function     cout << maximumNumberDistinctPrimeRange(m, n);     return 0; }

Java

 // Java program to print the // Number which has the maximum  // number of distinct prime  // factors of numbers in range // m to n import java.io.*;    class GFG {    // Function to return  // the maximum number static int maximumNumberDistinctPrimeRange(int m,                                             int n) {     // array to store the     // number of distinct primes     long factorCount[] = new long[n + 1];        // true if index 'i'     // is a prime     boolean prime[] = new boolean[n + 1];        // initializing the number     // of factors to 0 and     for (int i = 0; i <= n; i++)     {         factorCount[i] = 0;         prime[i] = true; // Used in Sieve     }        for (int i = 2; i <= n; i++)     {            // condition works only when          // 'i' is prime, hence for          // factors of all prime number,         // the prime status is changed to false         if (prime[i] == true)          {                // Number is prime             factorCount[i] = 1;                // number of factor of              // a prime number is 1             for (int j = i * 2; j <= n; j += i)              {                    // incrementing factorCount                  // all the factors of i                 factorCount[j]++;                    // and changing prime                 // status to false                 prime[j] = false;             }         }     }        // Initialize the max and num     int max = (int)factorCount[m];     int num = m;        // Gets the maximum number     for (int i = m; i <= n; i++)     {            // Gets the maximum number         if (factorCount[i] > max)         {             max = (int)factorCount[i];             num = i;         }     }     return num; }    // Driver code public static void main (String[] args)  { int m = 4, n = 6;    // Calling function System.out.println(maximumNumberDistinctPrimeRange(m, n)); } }    // This code is contributed by anuj_67.

Python 3

 # Python 3 program to print the # Number which has the maximum number # of distinct prime factors of # numbers in range m to n    # Function to return the maximum number def maximumNumberDistinctPrimeRange(m, n):        # array to store the number      # of distinct primes     factorCount =  * (n + 1)        # true if index 'i' is a prime     prime = [False] * (n + 1)        # initializing the number of     # factors to 0 and     for i in range(n + 1) :         factorCount[i] = 0         prime[i] = True # Used in Sieve        for i in range(2, n + 1) :            # condition works only when 'i'          # is prime, hence for factors of         # all prime number, the prime          # status is changed to false         if (prime[i] == True) :                # Number is prime             factorCount[i] = 1                # number of factor of a              # prime number is 1             for j in range(i * 2, n + 1, i) :                    # incrementing factorCount all                 # the factors of i                 factorCount[j] += 1                    # and changing prime status                 # to false                 prime[j] = False        # Initialize the max and num     max = factorCount[m]     num = m        # Gets the maximum number     for i in range(m, n + 1) :            # Gets the maximum number         if (factorCount[i] > max) :             max = factorCount[i]             num = i     return num    # Driver code if __name__ == "__main__":     m = 4     n = 6            # Calling function     print(maximumNumberDistinctPrimeRange(m, n))        # This code is contributed # by ChitraNayal

C#

 // C# program to print the // Number which has the maximum  // number of distinct prime  // factors of numbers in range // m to n using System;    class GFG {    // Function to return  // the maximum number static int maximumNumberDistinctPrimeRange(int m,                                             int n) {     // array to store the     // number of distinct primes     long []factorCount = new long[n + 1];        // true if index 'i'     // is a prime     bool []prime = new bool[n + 1];        // initializing the number     // of factors to 0 and     for (int i = 0; i <= n; i++)     {         factorCount[i] = 0;         prime[i] = true; // Used in Sieve     }        for (int i = 2; i <= n; i++)     {            // condition works only x         // when 'i' is prime, hence          // for factors of all prime          // number, the prime status         // is changed to false         if (prime[i] == true)          {                // Number is prime             factorCount[i] = 1;                // number of factor of              // a prime number is 1             for (int j = i * 2;                       j <= n; j += i)              {                    // incrementing factorCount                  // all the factors of i                 factorCount[j]++;                    // and changing prime                 // status to false                 prime[j] = false;             }         }     }        // Initialize the max and num     int max = (int)factorCount[m];     int num = m;        // Gets the maximum number     for (int i = m; i <= n; i++)     {            // Gets the maximum number         if (factorCount[i] > max)         {             max = (int)factorCount[i];             num = i;         }     }     return num; }    // Driver code public static void Main ()  { int m = 4, n = 6;    // Calling function Console.WriteLine(          maximumNumberDistinctPrimeRange(m, n)); } }    // This code is contributed // by anuj_67.

PHP

 \$max)          {             \$max = \$factorCount[\$i];             \$num = \$i;         }     }     return \$num; }    // Driver code \$m = 4; \$n = 6;    // Calling function echo maximumNumberDistinctPrimeRange(\$m, \$n);    // This code is contributed // by anuj_67. ?>

Output:

6

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : vt_m, chitranayal

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.