Related Articles

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

• Difficulty Level : Medium
• Last Updated : 09 Apr, 2021

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:
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

The approach is to use Sieve of Erathosthenes. Create a factorCount[] array to store 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.`

## Python3

 `# 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 ``=` `[``0``] ``*` `(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.``?>`

## Javascript

 ``
Output:
`6`

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for the language and STL. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up