Pythagorean Triplet with given sum using single loop

A Pythagorean Triplet is a set of natural numbers such that a < b < c, for which 

a^2 + b^2 = c^2

Given a number N, find a Pythagorean Triplet with sum as given N or return -1.

Examples:  

Input: 12  
Output: 3 4 5
Explanation:
As 32 + 42 = 52

Input: 82
Output: -1

Approach: The idea is to find the value of b and c in terms of a and iterate a from 1 to N. To find the value of b and c in terms of a we have to do following:  



We have two equations,  

 a^2 + b^2 = c^2  [Tex] a + b + c = N  [/Tex]

We will find the value of c in term of a and b Then put this value in equation 1 to solve for b. 

From equation 2, 

 c = N - b - a

Now, put this value in equation 1.

 a^2 + b^2 = (N - b - a)^2

After solving the above equation we will get, 

 b = (N * N - 2 * N * a) / (2 * N - 2 * a)  [Tex]c = N – b – a  [/Tex]

Now, iterate a from 1 to N and calculate respectively the value of b and c Then, check if

a^2 + b^2 = c^2

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find the Pythagorean
// Triplet with given sum
#include <bits/stdc++.h>
using namespace std;
 
// Function to calculate the
// Pythagorean triplet in O(n)
void PythagoreanTriplet(int n)
{
    int flag = 0;
 
    // Iterate a from 1 to N-1.
    for (int a = 1; a < n; a++)
    {
        // Calculate value of b
        int b = (n * n - 2 * n * a)
                / (2 * n - 2 * a);
 
        // The value of c = n - a - b
        int c = n - a - b;
 
        if (a * a + b * b == c * c
            && b > 0 && c > 0)
        {
            cout << a << " " << b << " " << c;
            flag = 1;
            break;
        }
    }
 
    if (flag == 0) {
        cout << "-1";
    }
 
    return;
}
 
// Driver Code
int main()
{
    int N = 12;
 
    // Function call
    PythagoreanTriplet(N);
 
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the Pythagorean
// Triplet with given sum
 
class GFG {
 
    // Function to calculate the
    // Pythagorean triplet in O(n)
    static void PythagoreanTriplet(int n)
    {
        int flag = 0;
 
        // Iterate a from 1 to N-1.
        for (int a = 1; a < n; a++)
        {
            // Calculate value of b
            int b = (n * n - 2 * n * a)
              / (2 * n - 2 * a);
 
            // The value of c = n - a - b
            int c = n - a - b;
 
            if (a * a + b * b == c * c
                && b > 0 && c > 0)
            {
                System.out
                  .print(a + " " + b + " " + c);
                flag = 1;
                break;
            }
        }
 
        if (flag == 0)
        {
            System.out.print("-1");
        }
 
        return;
    }
   
    // Driver Code
    public static void main(String[] args)
    {
        int N = 12;
 
        // Function call
        PythagoreanTriplet(N);
    }
}
 
// This code contributed by sapnasingh4991

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the Pythagorean
# Triplet with a given sum
 
# Function to calculate the
# Pythagorean triplet in O(n)
 
 
def PythagoreanTriplet(n):
    flag = 0
 
    # Iterate a from 1 to N-1.
    for a in range(1, n, 1):
 
        # Calculate value of b
        b = (n * n - 2 * n * a) // (2 * n - 2 * a)
 
        # The value of c = n - a - b
        c = n - a - b
 
        if (a * a + b * b == c * c
            and b > 0 and c > 0):
            print(a, b, c)
            flag = 1
            break
 
    if(flag == 0):
        print("-1")
 
    return
 
 
# Driver code
if __name__ == '__main__':
    N = 12
 
    # Function call
    PythagoreanTriplet(N)
 
# This code is contributed by Bhupendra_Singh

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the Pythagorean
// Triplet with given sum
using System;
 
class GFG {
 
    // Function to calculate the
    // Pythagorean triplet in O(n)
    static void PythagoreanTriplet(int n)
    {
        int flag = 0;
 
        // Iterate a from 1 to N-1.
        for (int a = 1; a < n; a++)
        {
            // Calculate value of b
            int b = (n * n - 2 * n * a)
              / (2 * n - 2 * a);
 
            // The value of c = n - a - b
            int c = n - a - b;
            if (a * a + b * b == c * c
                && b > 0 && c > 0)
            {
                Console.Write(a + " " + b + " " + c);
                flag = 1;
                break;
            }
        }
 
        if (flag == 0) {
            Console.Write("-1");
        }
        return;
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int N = 12;
 
        // Function call
        PythagoreanTriplet(N);
    }
}
 
// This code is contributed by shivanisinghss2110

chevron_right


Output

3 4 5

Time Complexity: O(N)
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.