Count number of triplets (a, b, c) such that a^2 + b^2 = c^2 and 1 <= a <= b <= c <= n - GeeksforGeeks

22 Apr, 2021
Given an integer N, the task is to count the number of triplets (a, b, c) such that a2 + b2 = c2 and 1 ≤ a ≤ b ≤ c ≤ N.
Examples: 
Input: N = 5 Output: 1 The only possible triplet pair is (3, 4, 5) 3^2 + 4^2 = 5^2 i.e. 9 + 16 = 25
Input: N = 10 Output: 2 (3, 4, 5) and (6, 8, 10) are the required triplet pairs.  
Method-1: Run two loop one from i = 1 to N and second from j = i+1 to N. Consider each and every pair and find i*i + j*j and check if this is a perfect square and its square root is less than N. If yes then increment the count.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
PHP
Javascript
// C++ program to Find number of// Triplets 1 <= a <= b<= c <= n,// Such that a^2 + b^2 = c^2#include <bits/stdc++.h>using namespace std; // function to ind number of// Triplets 1 <= a <= b<= c <= n,// Such that a^2 + b^2 = c^2int Triplets(int n){    // to store required answer    int ans = 0;     // run nested loops for first two numbers.    for (int i = 1; i <= n; ++i) {        for (int j = i; j <= n; ++j) {            int x = i * i + j * j;             // third number            int y = sqrt(x);             // check if third number is perfect            // square and less than n            if (y * y == x && y <= n)                ++ans;        }    }     return ans;} // Driver codeint main(){     int n = 10;     // function call    cout << Triplets(n);     return 0;}
// Java program to Find number of// Triplets 1 <= a <= b<= c <= n,// Such that a^2 + b^2 = c^2class Solution{// function to ind number of// Triplets 1 <= a <= b<= c <= n,// Such that a^2 + b^2 = c^2static int Triplets(int n){    // to store required answer    int ans = 0;     // run nested loops for first two numbers.    for (int i = 1; i <= n; ++i) {        for (int j = i; j <= n; ++j) {            int x = i * i + j * j;             // third number            int y =(int) Math.sqrt(x);             // check if third number is perfect            // square and less than n            if (y * y == x && y <= n)                ++ans;        }    }     return ans;} // Driver codepublic static void main(String args[]){     int n = 10;     // function call    System.out.println(Triplets(n)); }}//contributed by Arnab Kundu
# Python3 program to Find number of# Triplets 1 <= a <= b<= c <= n,# Such that a^2 + b^2 = c^2import math # function to ind number of# Triplets 1 <= a <= b<= c <= n,# Such that a^2 + b^2 = c^2def Triplets(n):     # to store required answer    ans = 0     # run nested loops for first two numbers.    for i in range(1, n + 1):        for j in range(i, n + 1):            x = i * i + j * j             # third number            y = int(math.sqrt(x))             # check if third number is perfect            # square and less than n            if (y * y == x and y <= n):                ans += 1    return ans # Driver codeif __name__ == "__main__":    n = 10     # function call    print(Triplets(n)) # This code is contributed# by ChitraNayal
// C# program to Find number of// Triplets 1 <= a <= b<= c <= n,// Such that a^2 + b^2 = c^2using System; class GFG{// function to ind number of// Triplets 1 <= a <= b<= c <= n,// Such that a^2 + b^2 = c^2static int Triplets(int n){    // to store required answer    int ans = 0;     // run nested loops for first two numbers.    for (int i = 1; i <= n; ++i)    {        for (int j = i; j <= n; ++j)        {            int x = i * i + j * j;             // third number            int y = (int)Math.Sqrt(x);             // check if third number is perfect            // square and less than n            if (y * y == x && y <= n)                ++ans;        }    }     return ans;} // Driver codestatic void Main(){    int n = 10;    Console.WriteLine(Triplets(n));}} // This code is contributed by ANKITRAI1
<?php// PHP program to Find number of// Triplets 1 <= a <= b<= c <= n,// Such that a^2 + b^2 = c^2 // Function to ind number of// Triplets 1 <= a <= b<= c <= n,// Such that a^2 + b^2 = c^2function Triplets($n){    // to store required answer    $ans = 0;     // run nested loops for first    // two numbers.    for ($i = 1; $i <= $n; ++$i)    {        for ($j =$i; $j <= $n; ++$j)        {            $x = $i * $i + $j * $j;             // third number            $y = (int)sqrt($x);             // check if third number is perfect            // square and less than n            if ($y * $y == $x && $y <= $n)                ++$ans;        }    }     return $ans;} // Driver code$n = 10; // function callecho Triplets($n); // This code is contributed by mits?>
<script>// javascript program to Find number of// Triplets 1 <= a <= b<= c <= n,// Such that a^2 + b^2 = c^2     // function to ind number of    // Triplets 1 <= a <= b<= c <= n,    // Such that a^2 + b^2 = c^2    function Triplets(n)    {             // to store required answer        var ans = 0;         // run nested loops for first two numbers.        for (let i = 1; i <= n; ++i) {            for (let j = i; j <= n; ++j) {                var x = i * i + j * j;                 // third number                var y = parseInt( Math.sqrt(x));                 // check if third number is perfect                // square and less than n                if (y * y == x && y <= n)                    ++ans;            }        }        return ans;    }     // Driver code    var n = 10;     // function call    document.write(Triplets(n)); // This code is contributed by shikhasingrajput</script>
2
 
Method-2: 
Find all the perfect squares upto n2 and save it to an ArrayList.
Now for every a from 1 to n, do the following: Choose c2 from the list of perfect squares calculated earlier.Then b2 can be calculated as b2 = c2 – a2.Now check if a <= b <= c and b2 calculated in the previous step must be a perfect square.If the above conditions are satisfied then increment the count.
Choose c2 from the list of perfect squares calculated earlier.
Then b2 can be calculated as b2 = c2 – a2.
Now check if a <= b <= c and b2 calculated in the previous step must be a perfect square.
If the above conditions are satisfied then increment the count.
Print the count in the end.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include<bits/stdc++.h>using namespace std; // Function to return an Array containing// all the perfect squares upto nvector<int> getPerfectSquares(int n){    vector<int> perfectSquares;    int current = 1, i = 1;     // While current perfect square    // is less than or equal to n    while (current <= n)    {        perfectSquares.push_back(current);        current = pow(++i, 2);    }    return perfectSquares;} // Function to return the count of// triplet (a, b, c) pairs such that// a^2 + b^2 = c^2 and// 1 <= a <= b <= c <= nint countTriplets(int n){         // Vector of perfect squares upto n^2    vector<int> perfectSquares = getPerfectSquares(                                 pow(n, 2));     int count = 0;    for(int a = 1; a <= n; a++)    {        int aSquare = pow(a, 2);         for(int i = 0; i < perfectSquares.size(); i++)        {            int cSquare = perfectSquares[i];             // Since, a^2 + b^2 = c^2            int bSquare = abs(cSquare - aSquare);            int b = sqrt(bSquare);            int c = sqrt(cSquare);             // If c < a or bSquare is not a            // perfect square            if (c < a || (find(perfectSquares.begin(),                               perfectSquares.end(),                               bSquare) ==                               perfectSquares.end()))                continue;             // If triplet pair (a, b, c) satisfy            // the given condition            if ((b >= a) && (b <= c) &&                (aSquare + bSquare == cSquare))                count++;        }    }    return count;} // Driver codeint main(){    int n = 10;         cout << countTriplets(n);     return 0;} // This code is contributed by himanshu77
// Java implementation of the approachimport java.util.*; public class GFG {     // Function to return an ArrayList containing    // all the perfect squares upto n    public static ArrayList<Integer> getPerfectSquares(int n)    {        ArrayList<Integer> perfectSquares = new ArrayList<>();        int current = 1, i = 1;         // while current perfect square is less than or equal to n        while (current <= n) {            perfectSquares.add(current);            current = (int)Math.pow(++i, 2);        }        return perfectSquares;    }     // Function to return the count of triplet (a, b, c) pairs    // such that a^2 + b^2 = c^2 and 1 <= a <= b <= c <= n    public static int countTriplets(int n)    {        // List of perfect squares upto n^2        ArrayList<Integer> perfectSquares            = getPerfectSquares((int)Math.pow(n, 2));         int count = 0;        for (int a = 1; a <= n; a++) {            int aSquare = (int)Math.pow(a, 2);            for (int i = 0; i < perfectSquares.size(); i++) {                int cSquare = perfectSquares.get(i);                 // Since, a^2 + b^2 = c^2                int bSquare = cSquare - aSquare;                int b = (int)Math.sqrt(bSquare);                int c = (int)Math.sqrt(cSquare);                 // If c < a or bSquare is not a perfect square                if (c < a || !perfectSquares.contains(bSquare))                    continue;                 // If triplet pair (a, b, c) satisfy the given condition                if ((b >= a) && (b <= c) && (aSquare + bSquare == cSquare))                    count++;            }        }        return count;    }     // Driver code    public static void main(String[] args)    {        int n = 10;         System.out.println(countTriplets(n));    }}
# Python3  implementation of the approachimport math # Function to return an ArrayList containing# all the perfect squares upto ndef getPerfectSquares(n):     perfectSquares = []    current = 1    i = 1     # while current perfect square is less than or equal to n    while (current <= n) :        perfectSquares.append(current)        i += 1        current = i** 2         return perfectSquares # Function to return the count of triplet (a, b, c) pairs# such that a^2 + b^2 = c^2 and 1 <= a <= b <= c <= ndef countTriplets(n):     # List of perfect squares upto n^2    perfectSquares= getPerfectSquares(n**2)     count = 0    for a in range(1, n +1 ):        aSquare = a**2        for i in range(len(perfectSquares)):            cSquare = perfectSquares[i]             # Since, a^2 + b^2 = c^2            bSquare = abs(cSquare - aSquare)            b = math.sqrt(bSquare)            b = int(b)            c = math.sqrt(cSquare)            c = int(c)                         # If c < a or bSquare is not a perfect square            if (c < a or (bSquare not in perfectSquares)):                continue             # If triplet pair (a, b, c) satisfy the given condition            if ((b >= a) and (b <= c) and (aSquare + bSquare == cSquare)):                count += 1                     return count # Driver codeif __name__ == "__main__":     n = 10     print(countTriplets(n)) # This code is contributed by chitranayal
// C# implementation of the approachusing System.Collections;using System; class GFG{ // Function to return an ArrayList containing// all the perfect squares upto npublic static ArrayList getPerfectSquares(int n){    ArrayList perfectSquares = new ArrayList();    int current = 1, i = 1;     // while current perfect square is less    // than or equal to n    while (current <= n)    {        perfectSquares.Add(current);        current = (int)Math.Pow(++i, 2);    }    return perfectSquares;} // Function to return the count of triplet// (a, b, c) pairs such that a^2 + b^2 = c^2// and 1 <= a <= b <= c <= npublic static int countTriplets(int n){    // List of perfect squares upto n^2    ArrayList perfectSquares = getPerfectSquares((int)Math.Pow(n, 2));     int count = 0;    for (int a = 1; a <= n; a++)    {        int aSquare = (int)Math.Pow(a, 2);        for (int i = 0; i < perfectSquares.Count; i++)        {            int cSquare = (int)perfectSquares[i];             // Since, a^2 + b^2 = c^2            int bSquare = cSquare - aSquare;            int b = (int)Math.Sqrt(bSquare);            int c = (int)Math.Sqrt(cSquare);             // If c < a or bSquare is not a perfect square            if (c < a || !perfectSquares.Contains(bSquare))                continue;             // If triplet pair (a, b, c) satisfy            // the given condition            if ((b >= a) && (b <= c) &&                (aSquare + bSquare == cSquare))                count++;        }    }    return count;} // Driver codepublic static void Main(){    int n = 10;     Console.WriteLine(countTriplets(n));}} // This code is contributed by mits.
<script> // Javascript implementation of the approach // Function to return an Array containing// all the perfect squares upto nfunction getPerfectSquares(n){    var perfectSquares = [];    var current = 1, i = 1;     // While current perfect square    // is less than or equal to n    while (current <= n)    {        perfectSquares.push(current);        current = Math.pow(++i, 2);    }    return perfectSquares;} // Function to return the count of// triplet (a, b, c) pairs such that// a^2 + b^2 = c^2 and// 1 <= a <= b <= c <= nfunction countTriplets(n){         // Vector of perfect squares upto n^2    var perfectSquares = getPerfectSquares(                                 Math.pow(n, 2));    var count = 0;    for(var a = 1; a <= n; a++)    {        var aSquare = Math.pow(a, 2);         for(var i = 0;                i < perfectSquares.length;                i++)        {            var cSquare = perfectSquares[i];             // Since, a^2 + b^2 = c^2            var bSquare = Math.abs(cSquare -                                   aSquare);            var b = Math.sqrt(bSquare);            var c = Math.sqrt(cSquare);             // If c < a or bSquare is not a            // perfect square            if (c < a ||                !perfectSquares.includes(bSquare))                continue;             // If triplet pair (a, b, c) satisfy            // the given condition            if ((b >= a) && (b <= c) &&                (aSquare + bSquare == cSquare))                count++;        }    }    return count;} // Driver codevar n = 10; document.write(countTriplets(n)); // This code is contributed by noob2000 </script>
2
 
andrew1234
ankthon
ukasp
Mithun Kumar
himanshu77
shikhasingrajput
noob2000
maths-perfect-square
Competitive Programming
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Modulo 10^9+7 (1000000007)
Prefix Sum Array - Implementation and Applications in Competitive Programming
Bits manipulation (Important tactics)
Formatted output in Java
Shortest path in a directed graph by Dijkstra’s algorithm
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7