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 Java8 (OpenJDK 1.8.0) (judge verdict: Wrong Answer)


import java.util.Scanner;

public class Main{
	
	public static void main(String []args) {
		Scanner sc = new Scanner(System.in);
		
		int n = Integer.parseInt(sc.next());
		
		double X = (double)3 * n /4; 
		
		int ans1= 0;
		int ans2 = 0;
		int ans3 = 0;
		if(n == 2) {
			System.out.println(2+" "+2+" "+1);
			return;
		}
		
	f:	for(int i = 1 ; i <= X ; i++) {
			for(int j = n % 4 == 0 ? 3*n/4 : 1+((3*n)/4) ; j <= 3500 ; j++) {
				int h = j;
				int l = i;
				while(h - l >= 1) {
					int mid = ((h+l)/2);
					//System.out.println(h+" "+l+" "+mid);
					long temp = (long)((4*h*l)-n*(h+l)) * mid;
					if(temp == (long)n*h*l) {
						
						ans1 = h;	ans2 = l; ans3 = mid;
						break f;
					}
					if(h - l == 1) break;
					
					if(temp > h*l*n) {
						h = mid;
					}
					else {
						l = mid;
					}
				}	
			}
		}
		System.out.println(ans1+" "+ans2+" "+ans3);
		
		}	
	}