# Find a triplet (X, Y, Z) with given sum as N and GCD of two numbers is the third number

• Last Updated : 10 Jan, 2022

Given a positive integer N, the task is to find a triple of three distinct positive integers (X, Y, Z) such that X + Y + Z = N and X = GCD (Y, Z).

Example:

Input: N = 12
Output: 2 4 6
Explanation: The triplet (2, 4, 6) is set of distinct integers such that 2 + 4 + 6 = 12 and 2 = GCD(4, 6).

Input: N = 5675
Output:1 2835 2839

Naive Approach: The basic idea is to iterate over all possible triplets of (X, Y, Z) with sum N and for each triplet, check if GCD(Y, Z) = X.

Time Complexity: O(N2)
Auxiliary space: O(1)

Efficient Approach: The above approach can be further optimized using the observation that for any given N, there are the following three cases:

• Case 1: If N is even then, a valid triplet is (1, N/2, N/2 -1).
• Case 2: If N is odd and (N/2) is even then, a valid triplet is (1, N/2 + 1, N/2 -1).
• Case 3: If N is odd and (N/2) is also odd then, a valid triplet is (1, N/2 – 2, N/2 + 2).

Hence, for any given N, identify the case and print its respective triplet.
Below is the implementation of the approach:

## C++

 `// C++ program of the above approach``#include ``using` `namespace` `std;`` ` `// Function to find a triplet (X, Y, Z)``// of distinct integers with their sum``// as N and GCD(Y, Z) = X``int` `printTriplet(``int` `N)``{``    ``// Case 1 where N is even``    ``if` `(N % 2 == 0) {``        ``cout << 1 << ``" "` `<< (N / 2) ``<< ``" "` `<< (N / 2) - 1;``    ``}``    ``else` `{`` ` `        ``// Case 2 where N is Odd``        ``// and N/2 is even``        ``if` `((N / 2) % 2 == 0) {``            ``cout << 1 << ``" "`` ``<< (N / 2) - 1 << ``" "``                 ``<< (N / 2) + 1;``        ``}`` ` `        ``// Case 3 where N is Odd``        ``// and N/2 is also odd``        ``else` `{``            ``cout << 1 << ``" "`` ``<< (N / 2) - 2 << ``" "``                 ``<< (N / 2) + 2;``        ``}``    ``}``}`` ` `// Driver Code``int` `main()``{``    ``int` `N = 5875;``    ``printTriplet(N);`` ` `    ``return` `0;``}`

## Java

 `// Java program of the above approach``import` `java.util.*;``class` `GFG ``{`` ` `  ``// Function to find a triplet (X, Y, Z)``  ``// of distinct integers with their sum``  ``// as N and GCD(Y, Z) = X``  ``static` `void` `printTriplet(``int` `N) ``  ``{`` ` `    ``// Case 1 where N is even``    ``if` `(N % ``2` `== ``0``) {``      ``System.out.print(``1` `+ ``" "` `+ (N / ``2``) + ``                       ``" "` `+ ((N / ``2``) - ``1``));``    ``} ``else` `{`` ` `      ``// Case 2 where N is Odd``      ``// and N/2 is even``      ``if` `((N / ``2``) % ``2` `== ``0``) {``        ``System.out.print(``1` `+ ``" "` `+ ((N / ``2``) - ``1``) +``                         ``" "` `+ ((N / ``2``) + ``1``));``      ``}`` ` `      ``// Case 3 where N is Odd``      ``// and N/2 is also odd``      ``else` `{``        ``System.out.print(``1` `+ ``" "` `+ ((N / ``2``) - ``2``) +``                         ``" "` `+ ((N / ``2``) + ``2``));``      ``}``    ``}``  ``}`` ` `  ``// Driver Code``  ``public` `static` `void` `main(String[] args) {``    ``int` `N = ``5875``;``    ``printTriplet(N);`` ` `  ``}``}`` ` `// This code is contributed by 29AjayKumar`

## Python3

 `# python3 program of the above approach`` ` `# Function to find a triplet (X, Y, Z)``# of distinct integers with their sum``# as N and GCD(Y, Z) = X``def` `printTriplet(N):`` ` `    ``# Case 1 where N is even``    ``if` `(N ``%` `2` `=``=` `0``):``        ``print``(f``"{1} {(N / 2)} {(N / 2) - 1}"``)`` ` `    ``else``:`` ` `        ``# Case 2 where N is Odd``        ``# and N/2 is even``        ``if` `((N ``/``/` `2``) ``%` `2` `=``=` `0``):``            ``print``(f``"{1} {(N // 2) - 1} {(N // 2) + 1}"``)`` ` `        ``# Case 3 where N is Odd``        ``# and N/2 is also odd``        ``else``:``            ``print``(f``"{1} {(N // 2) - 2} {(N // 2) + 2}"``)`` ` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:`` ` `    ``N ``=` `5875``    ``printTriplet(N)`` ` `# This code is contributed by rakeshsahni`

## C#

 `// C# program of the above approach``using` `System;`` ` `class` `GFG{`` ` `// Function to find a triplet (X, Y, Z)``// of distinct integers with their sum``// as N and GCD(Y, Z) = X``static` `void` `printTriplet(``int` `N)``{``     ` `    ``// Case 1 where N is even``    ``if` `(N % 2 == 0)``    ``{``        ``Console.Write(1 + ``" "` `+ (N / 2) + ``" "` `+ ``                               ``((N / 2) - 1));``    ``}``    ``else``    ``{``         ` `        ``// Case 2 where N is Odd``        ``// and N/2 is even``        ``if` `((N / 2) % 2 == 0) ``        ``{``            ``Console.Write(1 + ``" "` `+ ((N / 2) - 1) + ``" "` `+ ``                                    ``((N / 2) + 1));``        ``}`` ` `        ``// Case 3 where N is Odd``        ``// and N/2 is also odd``        ``else``        ``{``            ``Console.Write(1 + ``" "` `+ ((N / 2) - 2) + ``" "` `+ ``                                    ``((N / 2) + 2));``        ``}``    ``}``}`` ` `// Driver Code``public` `static` `void` `Main()``{``    ``int` `N = 5875;``     ` `    ``printTriplet(N);``}``}`` ` `// This code is contributed by ukasp`

## Javascript

 ``
Output
`1 2935 2939`

Time Complexity: O(1)
Auxiliary space: O(1)

My Personal Notes arrow_drop_up