# 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 = 12Output:11Explanation:

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 = 20Output: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` |

## 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(N ^{2})*

**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. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend **live classes **with experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.