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 2Input: a=100, b=150
Output: 102
The approach is to use Sieve of Eratosthenes. 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++ program to print the // Number which has the maximum number // of distinct prime factors of // numbers in range m to n #include <bits/stdc++.h> 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 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 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# 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 // PHP 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 function maximumNumberDistinctPrimeRange( $m , $n )
{ // array to store the number
// of distinct primes
$factorCount = array ();
// true if index
// 'i' is a prime
$prime = array ();
// initializing the number
// of factors to 0 and
for ( $i = 0; $i <= $n ; $i ++)
{
$factorCount [ $i ] = 0;
$prime [ $i ] = true; // Used in Sieve
}
for ( $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 ( $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
$max = $factorCount [ $m ];
$num = $m ;
// Gets the maximum number
for ( $i = $m ; $i <= $n ; $i ++)
{
// Gets the maximum number
if ( $factorCount [ $i ] > $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. ?> |
<script> // Javascript 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 function maximumNumberDistinctPrimeRange(m, n)
{ // Array to store the number of distinct primes
let factorCount = new Array(n + 1);
// True if index 'i' is a prime
let prime = new Array(n + 1);
// Initializing the number of factors to 0 and
for (let i = 0; i <= n; i++)
{
factorCount[i] = 0;
// Used in Sieve
prime[i] = true ;
}
for (let 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 (let 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
let max = factorCount[m];
let num = m;
// Gets the maximum number
for (let i = m; i <= n; i++)
{
// Gets the maximum number
if (factorCount[i] > max)
{
max = factorCount[i];
num = i;
}
}
return num;
} // Driver code let m = 4, n = 6; // Calling function document.write(maximumNumberDistinctPrimeRange(m, n)); // This code is contributed by souravmahato348 </script> |
6