A Pythagorean Triplet is a set of natural numbers such that a < b < c, for which a^2 + b^2 = c^2. For example, 3^2 + 4^2 = 5^2.
Given a number n, find a Pythagorean Triplet with sum as given n.
Examples :
Input : n = 12
Output : 3, 4, 5
Note that 3, 4 and 5 is a Pythagorean Triplet with sum equal to 12.Input : n = 4.
Output : No Triplet
There does not exist a Pythagorean Triplet with sum equal to 4.
A simple solution is to run three nested loops to generate all possible triplets and for every triplet, check if it is a Pythagorean Triplet and has given sum. Time complexity of this solution is O(n3).
An efficient solution is to run two loops, where first loop runs from i = 1 to n/3, second loop runs from j = i+1 to n/2. In second loop, we check if (n – i – j) is equal to i * i + j * j.
Below is the implementation of the above approach:
// C++ program to find Pythagorean // Triplet of given sum. #include <bits/stdc++.h> using namespace std;
void pythagoreanTriplet( int n)
{ // Considering triplets in
// sorted order. The value
// of first element in sorted
// triplet can be at-most n/3.
for ( int i = 1; i <= n / 3; i++)
{
// The value of second
// element must be less
// than equal to n/2
for ( int j = i + 1; j <= n / 2; j++)
{
int k = n - i - j;
if (i * i + j * j == k * k)
{
cout << i << ", "
<< j << ", "
<< k;
return ;
}
}
}
cout << "No Triplet" ;
} // Driver Code int main()
{ int n = 12;
pythagoreanTriplet(n);
return 0;
} |
// Java program to find Pythagorean // Triplet of given sum. class GFG
{ static void pythagoreanTriplet( int n)
{
// Considering triplets in
// sorted order. The value
// of first element in sorted
// triplet can be at-most n/3.
for ( int i = 1 ; i <= n / 3 ; i++)
{
// The value of second element
// must be less than equal to n/2
for ( int j = i + 1 ; j <= n / 2 ; j++)
{
int k = n - i - j;
if (i * i + j * j == k * k)
{
System.out.print(i + ", " +
j + ", " + k);
return ;
}
}
}
System.out.print( "No Triplet" );
}
// Driver Code
public static void main(String arg[])
{
int n = 12 ;
pythagoreanTriplet(n);
}
} // This code is contributed by Anant Agarwal. |
# Python3 program to find # Pythagorean Triplet of # given sum. def pythagoreanTriplet(n):
# Considering triplets in
# sorted order. The value
# of first element in sorted
# triplet can be at-most n/3.
for i in range ( 1 , int (n / 3 ) + 1 ):
# The value of second element
# must be less than equal to n/2
for j in range (i + 1 ,
int (n / 2 ) + 1 ):
k = n - i - j
if (i * i + j * j = = k * k):
print (i, ", " , j, ", " ,
k, sep = "")
return
print ( "No Triplet" )
# Driver Code n = 12
pythagoreanTriplet(n) # This code is contributed # by Smitha Dinesh Semwal |
// C# program to find // Pythagorean Triplet // of given sum. using System;
class GFG
{ static void pythagoreanTriplet( int n)
{
// Considering triplets in
// sorted order. The value
// of first element in sorted
// triplet can be at-most n/3.
for ( int i = 1; i <= n / 3; i++)
{
// The value of second element
// must be less than equal to n/2
for ( int j = i + 1;
j <= n / 2; j++)
{
int k = n - i - j;
if (i * i + j * j == k * k)
{
Console.Write(i + ", " +
j + ", " + k);
return ;
}
}
}
Console.Write( "No Triplet" );
}
// Driver Code
public static void Main()
{
int n = 12;
pythagoreanTriplet(n);
}
} // This code is contributed by Vt_m. |
<?php // PHP program to find // Pythagorean Triplet // of given sum. function pythagoreanTriplet( $n )
{ // Considering triplets in
// sorted order. The value
// of first element in sorted
// triplet can be at-most n/3.
for ( $i = 1; $i <= $n / 3; $i ++)
{
// The value of second
// element must be less
// than equal to n/2
for ( $j = $i + 1; $j <= $n / 2; $j ++)
{
$k = $n - $i - $j ;
if ( $i * $i + $j * $j == $k * $k )
{
echo $i , ", " , $j , ", " , $k ;
return ;
}
}
}
echo "No Triplet" ;
} // Driver Code $n = 12;
pythagoreanTriplet( $n );
// This code is contributed by anuj_67. ?> |
<script> // JavaScript program to find Pythagorean // Triplet of given sum. function pythagoreanTriplet(n)
{
// Considering triplets in
// sorted order. The value
// of first element in sorted
// triplet can be at-most n/3.
for (let i = 1; i <= n / 3; i++)
{
// The value of second element
// must be less than equal to n/2
for (let j = i + 1; j <= n / 2; j++)
{
let k = n - i - j;
if (i * i + j * j == k * k)
{
document.write(i + ", " +
j + ", " + k);
return ;
}
}
}
document.write( "No Triplet" );
}
// Driver Code let n = 12;
pythagoreanTriplet(n);
// This code is contributed by avijitmondal1998. </script> |
3, 4, 5
Time complexity: O(n2) for a given number n
Auxiliary space: O(1)