Problem:
Score : 300 points

Problem Statement

You are given an integer N.

Find a triple of positive integers h, n and w such that 4/N = 1/h + 1/n + 1/w.

If there are multiple solutions, any of them will be accepted.

Constraints

It is guaranteed that, for the given integer N, there exists a solution such that h,n,w \leq 3500.

Inputs

Input is given from Standard Input in the following format:

N

Outputs

Print a triple of positive integers h, n and w that satisfies the condition, in the following format:

h n w

Sample Input 1

2

Sample Output 1

1 2 2

4/2 = 1/1 + 1/2 + 1/2.

Sample Input 2

3485

Sample Output 2

872 1012974 1539173474040

It is allowed to use an integer exceeding 3500 in a solution.

Sample Input 3

4664

Sample Output 3

3498 3498 3498

Solution in C++14 (GCC 5.4.1) (judge verdict: Time Limit Exceeded)

#include <iostream>
#include <string>

using namespace::std;

long int N, A[100000],B[100000],ans,h,w,v,tmp,x,r;
char S[6];

int min(int x, int y) {
	if (x > y)return y;
	return x;
}
long gcc(long a, long b) {
	x = a * b;

	if (a<b) {
		tmp = a;
		a = b;
		b = tmp;
	}

	r = a % b;

	while (r != 0) {
		a = b;
		b = r;
		r = a % b;
	}

	return x / b;
}

long gcc3(long a, long b,long c) {

	return gcc(gcc(a, b), c);

}

int main() {
	cin >> N;
	if (N % 4 == 0) {
		h = w = v = 3 * N/4;
	}
	else {
		if (N % 2 == 0) {
			h = N/2;
			w = v =  N;
		}
		else {
			for (int i = 1; i < 3501; i++) {
				for (int j= 1; j< 3501; j++) {
					for (int k = 1; k < 3501; k++) {
						if (gcc3(i, j, k) == N) {
							h = ((N / i)*(i + j + k));
							w = ((N / j)*(i + j + k));

							v = ((N / k)*(i + j + k));
						}
					}
				}
			}
		}
	}
	cout <<h<<" "<<w<<" "<<v<<endl;
	return 0;
		}