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 3^2 + 4^2 = 5^2.

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:

  1. We have two equations,



    1.  a^2 + b^2 = c^2 
    2.  a + b + c = N 
    
  2. 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 
    
  3. After solving the above equation we will get,

    
     b = (N * N - 2 * N * a) / (2 * N - 2 * a) .
    c = N - b - a.
    
  4. Now, iterate a from 1 to N and calculate respective 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.
    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;
}
  
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.
    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;
}
   
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.
    for a in range(1, n + 1, 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.
    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.