Open In App

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

Last Updated : 23 Dec, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

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 Sieve 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.
  1. Repeat the above step for all the prime number till N.
  2. 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:
 

C++




// 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;
}


Java




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


Python3




# 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] *= i
 
    # 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 = i
 
    # Find the maximum value
    return maxValue
 
# Driver Code
 
# Given number
N = 20;
 
# Function call
print(maxPrimefactorNum(N))
 
# This code is contributed by yatinagg


C#




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


Javascript




<script>
 
// javascript program for the above approach
 
 
// Function to find the smallest number
// having a maximum product of prime factors
function maxPrimefactorNum( N)
{
 
    // Declare the array arr[]
    let arr=Array(N + 1).fill(1);
 
    // Initialise array with 1
    //for (int i = 0; i < N + 1; i++)
      //  arr[i] = 1;
 
    // Iterate from [2, N]
    for (let 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 (let j = i; j <= N; j += i) {
                arr[j] *= i;
            }
        }
    }
 
    // Initialise maxValue
    let maxValue = 1;
 
    // Find number having maximum product
    // of prime factor <= N
    for (let i = 2; i <= N; i++) {
        if (arr[i] > maxValue) {
            maxValue = i;
        }
    }
 
    // Find the maximum value
    return maxValue;
}
 
// Driven Code
 
    // Given Number
    let N = 20;
 
    // Function call
        document.write(maxPrimefactorNum(N));
     
 
// This code contributed by Rajput-Ji
 
</script>


Output: 

19

 

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



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads