Number less than equals to N with maximum product of prime factors

Given a number N, the task is to find the number which is less than or equals to N whose product of prime factors is maximum.
Note: If there is more than one number whose maximum product is equal, then print the smallest number of them.
Examples: 
 

Input: N = 12 
Output: 11 
Explanation: 
Product of prime factor of all numbers before N: 
2 = 2 
3 = 3 
4 = 2 
5 = 5 
6 = 2 * 3 = 6 
7 = 7 
8 = 2 
9 = 3 
10 = 2 * 5 = 10 
11 = 11 
12 = 2*3 = 6 
The maximum of all the above is 11.
Input: N = 20 
Output: 19 
 

Approach: The idea is to use the concept of Seive of Eratosthenes to find the product of all the prime factors of N numbers and then find the minimum number whose product of prime factors is maximum. Below are the steps:

  1. Create a list of numbers from 1 to N and initialise every value with 1.
  2. Let p = 2 which is the first prime number. Iterate from p, count up in increments of p and multiply by p at each index of the list. These indexes will be p(p+1), p(p+2), p(p+3), etc. 
    For Example: 
    If p is a prime number, then multiply with p
    at every index which is multiple of p.
    For p = 2,
    Multiply with 2 at index 2, 4, 6, 8, 10,..., till N.
    
    
  3. Repeat the above step for all the prime number till N.
  4. After finding the product of all prime factors till N, traverse the list of numbers and find the least number with maximum product.

Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program for the above approach 
#include <bits/stdc++.h> 
using namespace std; 
  
// Function to find the smallest number 
// having a maximum product of prime factors 
int maxPrimefactorNum(int N) 
  
    // Declare the array arr[] 
    int arr[N + 1]; 
  
    // Initialise array with 1 
    for (int i = 0; i < N + 1; i++) 
        arr[i] = 1; 
  
    // Iterate from [2, N] 
    for (int i = 2; i <= N; i++) { 
  
        // If value at index i is 1, 
        // then i is prime and make 
        // update array at index for 
        // all multiples of i 
        if (arr[i] == 1) { 
            for (int j = i; j <= N; j += i) { 
                arr[j] *= i; 
            
        
    
  
    // Initialise maxValue 
    int maxValue = 1; 
  
    // Find number having maximum product 
    // of prime factor <= N 
    for (int i = 2; i <= N; i++) { 
        if (arr[i] > maxValue) { 
            maxValue = i; 
        
    
  
    // Find the maximum value 
    return maxValue; 
  
// Driven Code 
int main() 
    // Given Number 
    int N = 20; 
  
    // Function call 
    cout << maxPrimefactorNum(N); 
    return 0; 
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program for the above approach
import java.util.*;
  
class GFG{
  
// Function to find the smallest number
// having a maximum product of prime factors
static int maxPrimefactorNum(int N)
{
      
    // Declare the array arr[]
    int []arr = new int[N + 1];
  
    // Initialise array with 1
    for(int i = 0; i < N + 1; i++)
        arr[i] = 1;
  
    // Iterate from [2, N]
    for(int i = 2; i <= N; i++)
    {
  
        // If value at index i is 1,
        // then i is prime and make
        // update array at index for
        // all multiples of i
        if (arr[i] == 1
        {
            for(int j = i; j <= N; j += i)
            {
                arr[j] *= i;
            }
        }
    }
  
    // Initialise maxValue
    int maxValue = 1;
  
    // Find number having maximum product
    // of prime factor <= N
    for(int i = 2; i<= N; i++)
    {
        if (arr[i] > maxValue)
        
            maxValue = i;
        }
    }
  
    // Find the maximum value
    return maxValue;
}
  
// Driver Code
public static void main(String[] args)
{
      
    // Given number
    int N = 20;
  
    // Function call
    System.out.print(maxPrimefactorNum(N));
}
}
  
// This code is contributed by Rohit_ranjan
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program for the above approach 
  
# Function to find the smallest number 
# having a maximum product of prime factors 
def maxPrimefactorNum(N): 
      
    # Declare the list arr 
    arr = [] 
  
    # Initialise list with 1 
    for i in range(N + 1): 
        arr.append(1
  
    # Iterate from [2, N] 
    for i in range(2, N + 1): 
          
        # If value at index i is 1, 
        # then i is prime and make 
        # update list at index for 
        # all multiples of i 
        if (arr[i] == 1) : 
            for j in range(i, N + 1, i): 
                arr[j] *=
  
    # Initialise maxValue 
    maxValue = 1
  
    # Find number having maximum product 
    # of prime factor <= N 
    for i in range(2, N + 1): 
        if (arr[i] > maxValue): 
            maxValue =
  
    # Find the maximum value 
    return maxValue 
  
# Driver Code 
  
# Given number 
N = 20
  
# Function call 
print(maxPrimefactorNum(N)) 
  
# This code is contributed by yatinagg 
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program for the above approach
using System;
  
class GFG{
  
// Function to find the smallest number
// having a maximum product of prime factors
static int maxPrimefactorNum(int N)
{
      
    // Declare the array []arr
    int []arr = new int[N + 1];
  
    // Initialise array with 1
    for(int i = 0; i < N + 1; i++)
        arr[i] = 1;
  
    // Iterate from [2, N]
    for(int i = 2; i <= N; i++)
    {
  
        // If value at index i is 1,
        // then i is prime and make
        // update array at index for
        // all multiples of i
        if (arr[i] == 1) 
        {
            for(int j = i; j <= N; j += i)
            {
                arr[j] *= i;
            }
        }
    }
  
    // Initialise maxValue
    int maxValue = 1;
  
    // Find number having maximum product
    // of prime factor <= N
    for(int i = 2; i<= N; i++)
    {
        if (arr[i] > maxValue)
        
            maxValue = i;
        }
    }
  
    // Find the maximum value
    return maxValue;
}
  
// Driver Code
public static void Main(String[] args)
{
      
    // Given number
    int N = 20;
  
    // Function call
    Console.Write(maxPrimefactorNum(N));
}
}
  
// This code is contributed by 29AjayKumar
chevron_right

Output: 
19

Time Complexity: O(N2) 
Auxiliary Space: O(N)
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.





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.



Article Tags :
Practice Tags :