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:
- Make an array which stores all the divisors of the given number using the approach discussed in this article
- Let the three number be a, b, c initialize to 1
- 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.
- 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 occurrence 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<Integer> divisor = new Vector<Integer>();
// store all divisors of number
// in array
for ( int i = 2 ; i * i <= n; i++) {
// store all the occurrence 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 occurrence 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 occurrence 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
<script> // JavaScript program to find the // three numbers // function to find 3 distinct number // with given product function getnumbers(n)
{ // Declare a vector to store
// divisors
let divisor = [];
// store all divisors of number
// in array
for (let i = 2; i * i <= n; i++) {
// store all the occurrence of
// divisors
while (n % i == 0) {
divisor.push(i);
n = Math.floor(n/i);
}
}
// check if n is not equals to -1
// then n is also a prime factor
if (n != 1) {
divisor.push(n);
}
// Initialize the variables with 1
let a, b, c, size;
a = b = c = 1;
size = divisor.length;
for (let 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) {
document.write( "-1" + "<br>" );
}
else {
document.write(a + " " + b
+ " " + c + "<br>" );
}
} // Driver function let n = 64; getnumbers(n); // This code is contributed by patel2127 </script> |
Output:
2 4 8
Time Complexity: O((log N)*sqrt(N))
Auxiliary Space: O(sqrt(n))