# Check if N can be expressed as product of 3 distinct numbers

• Difficulty Level : Medium
• Last Updated : 26 Nov, 2021

Given a number N. Print three distinct numbers (>=1) whose product is equal to N. print -1 if it is not possible to find three numbers.
Examples:

Input: 64
Output: 2 4 8
Explanation:
(2*4*8 = 64)
Input: 24
Output: 2 3 4
Explanation:
(2*3*4 = 24)
Input: 12
Output: -1
Explanation:
No such triplet exists

Approach:

1. Make an array which stores all the divisors of the given number using the approach discussed in this article
2. Let the three number be a, b, c initialize to 1
3. Traverse the divisors array and check the following condition:
• value of a = value at 1st index of divisor array.
• value of b = product of value at 2nd and 3rd index of divisor array. If divisor array has only one or two elements then no such triplets exists
• After finding a & b, value of c = product of all the rest elements in divisor array.
4. Check the final condition such that value of a, b, c must be distinct and not equal to 1.

Below is the implementation code:

## CPP

 `// C++ program to find the``// three numbers``#include "bits/stdc++.h"``using` `namespace` `std;` `// function to find 3 distinct number``// with given product``void` `getnumbers(``int` `n)``{``    ``// Declare a vector to store``    ``// divisors``    ``vector<``int``> divisor;` `    ``// store all divisors of number``    ``// in array``    ``for` `(``int` `i = 2; i * i <= n; i++) {` `        ``// store all the occurence of``        ``// divisors``        ``while` `(n % i == 0) {``            ``divisor.push_back(i);``            ``n /= i;``        ``}``    ``}` `    ``// check if n is not equals to -1``    ``// then n is also a prime factor``    ``if` `(n != 1) {``        ``divisor.push_back(n);``    ``}` `    ``// Initialize the variables with 1``    ``int` `a, b, c, size;``    ``a = b = c = 1;``    ``size = divisor.size();` `    ``for` `(``int` `i = 0; i < size; i++) {` `        ``// check for first number a``        ``if` `(a == 1) {``            ``a = a * divisor[i];``        ``}` `        ``// check for second number b``        ``else` `if` `(b == 1 || b == a) {``            ``b = b * divisor[i];``        ``}` `        ``// check for third number c``        ``else` `{``            ``c = c * divisor[i];``        ``}``    ``}` `    ``// check for all unwanted condition``    ``if` `(a == 1 || b == 1 || c == 1``        ``|| a == b || b == c || a == c) {``        ``cout << ``"-1"` `<< endl;``    ``}``    ``else` `{``        ``cout << a << ``' '` `<< b``             ``<< ``' '` `<< c << endl;``    ``}``}` `// Driver function``int` `main()``{``    ``int` `n = 64;``    ``getnumbers(n);``}`

## Java

 `// Java program to find the``// three numbers``import` `java.util.*;` `class` `GFG{`` ` `// function to find 3 distinct number``// with given product``static` `void` `getnumbers(``int` `n)``{``    ``// Declare a vector to store``    ``// divisors``    ``Vector divisor = ``new` `Vector();`` ` `    ``// store all divisors of number``    ``// in array``    ``for` `(``int` `i = ``2``; i * i <= n; i++) {`` ` `        ``// store all the occurence of``        ``// divisors``        ``while` `(n % i == ``0``) {``            ``divisor.add(i);``            ``n /= i;``        ``}``    ``}`` ` `    ``// check if n is not equals to -1``    ``// then n is also a prime factor``    ``if` `(n != ``1``) {``        ``divisor.add(n);``    ``}`` ` `    ``// Initialize the variables with 1``    ``int` `a, b, c, size;``    ``a = b = c = ``1``;``    ``size = divisor.size();`` ` `    ``for` `(``int` `i = ``0``; i < size; i++) {`` ` `        ``// check for first number a``        ``if` `(a == ``1``) {``            ``a = a * divisor.get(i);``        ``}`` ` `        ``// check for second number b``        ``else` `if` `(b == ``1` `|| b == a) {``            ``b = b * divisor.get(i);``        ``}`` ` `        ``// check for third number c``        ``else` `{``            ``c = c * divisor.get(i);``        ``}``    ``}`` ` `    ``// check for all unwanted condition``    ``if` `(a == ``1` `|| b == ``1` `|| c == ``1``        ``|| a == b || b == c || a == c) {``        ``System.out.print(``"-1"` `+``"\n"``);``    ``}``    ``else` `{``        ``System.out.print(a +``" "``+ b``                ``+``" "``+ c +``"\n"``);``    ``}``}`` ` `// Driver function``public` `static` `void` `main(String[] args)``{``    ``int` `n = ``64``;``    ``getnumbers(n);``}``}` `// This code is contributed by sapnasingh4991`

## Python3

 `# Python3 program to find the``# three numbers` `# function to find 3 distinct number``# with given product``def` `getnumbers(n):``     ` `     ``# Declare a vector to store``    ``# divisors``    ``divisor ``=` `[]` `    ``# store all divisors of number``    ``# in array``    ``for` `i ``in` `range``(``2``, n ``+` `1``):` `        ``# store all the occurence of``        ``# divisors``        ``while` `(n ``%` `i ``=``=` `0``):``            ``divisor.append(i)``            ``n ``/``/``=` `i` `    ``# check if n is not equals to -1``    ``# then n is also a prime factor``    ``if` `(n !``=` `1``):``        ``divisor.append(n)` `    ``# Initialize the variables with 1``    ``a, b, c, size ``=` `0``, ``0``, ``0``, ``0``    ``a ``=` `b ``=` `c ``=` `1``    ``size ``=` `len``(divisor)` `    ``for` `i ``in` `range``(size):` `        ``# check for first number a``        ``if` `(a ``=``=` `1``):``            ``a ``=` `a ``*` `divisor[i]` `        ``# check for second number b``        ``elif` `(b ``=``=` `1` `or` `b ``=``=` `a):``            ``b ``=` `b ``*` `divisor[i]` `        ``# check for third number c``        ``else``:``            ``c ``=` `c ``*` `divisor[i]` `    ``# check for all unwanted condition``    ``if` `(a ``=``=` `1` `or` `b ``=``=` `1` `or` `c ``=``=` `1``        ``or` `a ``=``=` `b ``or` `b ``=``=` `c ``or` `a ``=``=` `c):``        ``print``(``"-1"``)``    ``else``:``        ``print``(a, b, c)` `# Driver function` `n ``=` `64``getnumbers(n)` `# This code is contributed by mohit kumar 29`

## C#

 `// C# program to find the``// three numbers``using` `System;``using` `System.Collections.Generic;` `class` `GFG{``  ` `// function to find 3 distinct number``// with given product``static` `void` `getnumbers(``int` `n)``{``    ``// Declare a vector to store``    ``// divisors``    ``List<``int``> divisor = ``new` `List<``int``>();``  ` `    ``// store all divisors of number``    ``// in array``    ``for` `(``int` `i = 2; i * i <= n; i++) {``  ` `        ``// store all the occurence of``        ``// divisors``        ``while` `(n % i == 0) {``            ``divisor.Add(i);``            ``n /= i;``        ``}``    ``}``  ` `    ``// check if n is not equals to -1``    ``// then n is also a prime factor``    ``if` `(n != 1) {``        ``divisor.Add(n);``    ``}``  ` `    ``// Initialize the variables with 1``    ``int` `a, b, c, size;``    ``a = b = c = 1;``    ``size = divisor.Count;``  ` `    ``for` `(``int` `i = 0; i < size; i++) {``  ` `        ``// check for first number a``        ``if` `(a == 1) {``            ``a = a * divisor[i];``        ``}``  ` `        ``// check for second number b``        ``else` `if` `(b == 1 || b == a) {``            ``b = b * divisor[i];``        ``}``  ` `        ``// check for third number c``        ``else` `{``            ``c = c * divisor[i];``        ``}``    ``}``  ` `    ``// check for all unwanted condition``    ``if` `(a == 1 || b == 1 || c == 1``        ``|| a == b || b == c || a == c) {``        ``Console.Write(``"-1"` `+``"\n"``);``    ``}``    ``else` `{``        ``Console.Write(a +``" "``+ b``                ``+``" "``+ c +``"\n"``);``    ``}``}``  ` `// Driver function``public` `static` `void` `Main(String[] args)``{``    ``int` `n = 64;``    ``getnumbers(n);``}``}` `// This code is contributed by Rajput-Ji`

## Javascript

 ``
Output:
`2 4 8`

Time Complexity: O((log N)*sqrt(N))

Auxiliary Space: O(sqrt(n))

My Personal Notes arrow_drop_up