Number less than equals to N with maximum product of prime factors
Last Updated :
23 Dec, 2021
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:
- 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++
#include <bits/stdc++.h>
using namespace std;
int maxPrimefactorNum( int N)
{
int arr[N + 1];
for ( int i = 0; i < N + 1; i++)
arr[i] = 1;
for ( int i = 2; i <= N; i++) {
if (arr[i] == 1) {
for ( int j = i; j <= N; j += i) {
arr[j] *= i;
}
}
}
int maxValue = 1;
for ( int i = 2; i <= N; i++) {
if (arr[i] > maxValue) {
maxValue = i;
}
}
return maxValue;
}
int main()
{
int N = 20;
cout << maxPrimefactorNum(N);
return 0;
}
|
Java
import java.util.*;
class GFG{
static int maxPrimefactorNum( int N)
{
int []arr = new int [N + 1 ];
for ( int i = 0 ; i < N + 1 ; i++)
arr[i] = 1 ;
for ( int i = 2 ; i <= N; i++)
{
if (arr[i] == 1 )
{
for ( int j = i; j <= N; j += i)
{
arr[j] *= i;
}
}
}
int maxValue = 1 ;
for ( int i = 2 ; i<= N; i++)
{
if (arr[i] > maxValue)
{
maxValue = i;
}
}
return maxValue;
}
public static void main(String[] args)
{
int N = 20 ;
System.out.print(maxPrimefactorNum(N));
}
}
|
Python3
def maxPrimefactorNum(N):
arr = []
for i in range (N + 1 ):
arr.append( 1 )
for i in range ( 2 , N + 1 ):
if (arr[i] = = 1 ) :
for j in range (i, N + 1 , i):
arr[j] * = i
maxValue = 1
for i in range ( 2 , N + 1 ):
if (arr[i] > maxValue):
maxValue = i
return maxValue
N = 20 ;
print (maxPrimefactorNum(N))
|
C#
using System;
class GFG{
static int maxPrimefactorNum( int N)
{
int []arr = new int [N + 1];
for ( int i = 0; i < N + 1; i++)
arr[i] = 1;
for ( int i = 2; i <= N; i++)
{
if (arr[i] == 1)
{
for ( int j = i; j <= N; j += i)
{
arr[j] *= i;
}
}
}
int maxValue = 1;
for ( int i = 2; i<= N; i++)
{
if (arr[i] > maxValue)
{
maxValue = i;
}
}
return maxValue;
}
public static void Main(String[] args)
{
int N = 20;
Console.Write(maxPrimefactorNum(N));
}
}
|
Javascript
<script>
function maxPrimefactorNum( N)
{
let arr=Array(N + 1).fill(1);
for (let i = 2; i <= N; i++) {
if (arr[i] == 1) {
for (let j = i; j <= N; j += i) {
arr[j] *= i;
}
}
}
let maxValue = 1;
for (let i = 2; i <= N; i++) {
if (arr[i] > maxValue) {
maxValue = i;
}
}
return maxValue;
}
let N = 20;
document.write(maxPrimefactorNum(N));
</script>
|
Time Complexity: O(N2)
Auxiliary Space: O(N)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...