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:
- Create a list of numbers from 1 to N and initialise every value with 1.
- 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.
- Repeat the above step for all the prime number till N.
- 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 |
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.