Given an integer N. The task is to find all factors of N and print the product of four factors of N such that:

- Sum of the four factors is equal to N.
- The product of the four factors is maximum.

If it is not possible to find 4 such factors then print “Not possible”.

**Note**: All the four factors can be equal to each other to maximize the product and there can be a large number of queries.

**Examples**:

Input: 24Output: Product -> 1296 All factors are -> 1 2 3 4 6 8 12 24 Choose the factor 6 four times, Therefore, 6+6+6+6 = 24 and product is maximum.Input: 100Output: Product -> 390625 All the factors are -> 1 2 4 5 10 10 20 25 50 100 Choose the factor 25 four times.

The idea is to find factors of all numbers from 1 to N ( which is the maximum value of n ).

- An answer will be
**Not possible**if the given is prime. - And if the given n is divisible by 4 then answer will be pow(q, 4) where q is a quotient when n is divided by 4.
- If it is possible to find the answer then, the answer must include third last factor two times. And run a nested loop for other two factors.

Below is the implementation of the above approach:

`// C++ implementation of above approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to find primes ` `bool` `isPrime(` `int` `n) ` `{ ` ` ` `// Corner cases ` ` ` `if` `(n <= 1) ` ` ` `return` `false` `; ` ` ` `if` `(n <= 3) ` ` ` `return` `true` `; ` ` ` ` ` `// This is checked so that we can skip ` ` ` `// middle five numbers in below loop ` ` ` `if` `(n % 2 == 0 || n % 3 == 0) ` ` ` `return` `false` `; ` ` ` ` ` `for` `(` `int` `i = 5; i * i <= n; i = i + 6) ` ` ` `if` `(n % i == 0 || n % (i + 2) == 0) ` ` ` `return` `false` `; ` ` ` ` ` `return` `true` `; ` `} ` ` ` `// Function to find factors ` `void` `factors(` `int` `N, vector<` `int` `>& v[]) ` `{ ` ` ` `for` `(` `int` `i = 2; i < N; i++) { ` ` ` ` ` `// run a loop upto square root of that number ` ` ` `for` `(` `int` `j = 1; j * j <= i; j++) { ` ` ` `if` `(i % j == 0) { ` ` ` ` ` `// if the n is perfect square ` ` ` `if` `(i / j == j) ` ` ` `v[i].push_back(j); ` ` ` ` ` `// otherwise push it's two divisors ` ` ` `else` `{ ` ` ` `v[i].push_back(j); ` ` ` `v[i].push_back(i / j); ` ` ` `} ` ` ` `} ` ` ` `} ` ` ` ` ` `// sort the divisors ` ` ` `sort(v[i].begin(), v[i].end()); ` ` ` `} ` `} ` ` ` `// Function to find max product ` `int` `product(` `int` `n) ` `{ ` ` ` `// To store factors of 'n' ` ` ` `vector<` `int` `> v[n + 100]; ` ` ` ` ` `// find factors ` ` ` `factors(n + 100, v); ` ` ` ` ` `// if it is divisible by 4. ` ` ` `if` `(n % 4 == 0) { ` ` ` `int` `x = n / 4; ` ` ` `x *= x; ` ` ` `return` `x * x; ` ` ` `} ` ` ` ` ` `else` `{ ` ` ` ` ` `// if it is prime ` ` ` `if` `(isPrime[n]) ` ` ` `return` `-1; ` ` ` ` ` `// otherwise answer will be possible ` ` ` `else` `{ ` ` ` `int` `ans = -1; ` ` ` `if` `(v[n].size() > 2) { ` ` ` ` ` `// include last third factor ` ` ` `int` `fac = v[n][v[n].size() - 3]; ` ` ` ` ` `// nested loop to find other two factors ` ` ` `for` `(` `int` `i = v[n].size() - 1; i >= 0; i--) { ` ` ` `for` `(` `int` `j = v[n].size() - 1; j >= 0; j--) { ` ` ` `if` `((fac * 2) + (v[n][j] + v[n][i]) == n) ` ` ` `ans = max(ans, fac * fac * v[n][j] * v[n][i]); ` ` ` `} ` ` ` `} ` ` ` ` ` `return` `ans; ` ` ` `} ` ` ` `} ` ` ` `} ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` ` ` `int` `n = 24; ` ` ` ` ` `// function call ` ` ` `cout << product(n); ` ` ` ` ` `return` `0; ` `} ` |

**Output:**

1296

## Recommended Posts:

- Check if the given 2-D points form T-shape or not
- Minimum changes required to make two arrays identical
- Maximize the product of four factors of a Number
- Find Nth term (A matrix exponentiation example)
- How can competitive programming help you get a job?
- Burst Balloon to maximize coins
- Minimum number of elements to be removed to make XOR maximum
- What coding habits improve timing in coding contest?
- Maximum Possible Product in Array after performing given Operations
- Sum of decimal equivalent of all possible pairs of Binary representation of a Number
- Count strings with consonants and vowels at alternate position
- How to get rid of Java TLE problem
- Triplet with no element divisible by 3 and sum N
- Count number of primes in an array
- Number of prime pairs in an array

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.