Related Articles
Count number of triplets (a, b, c) such that a^2 + b^2 = c^2 and 1 <= a <= b <= c <= n
• Difficulty Level : Easy
• Last Updated : 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:
The only possible triplet pair is (3, 4, 5)
3^2 + 4^2 = 5^2 i.e. 9 + 16 = 25

Input: N = 10
Output:
(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++

 `// C++ program to Find number of``// Triplets 1 <= a <= b<= c <= n,``// Such that a^2 + b^2 = c^2``#include ``using` `namespace` `std;` `// function to ind number of``// Triplets 1 <= a <= b<= c <= n,``// Such that a^2 + b^2 = c^2``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 = ``sqrt``(x);` `            ``// check if third number is perfect``            ``// square and less than n``            ``if` `(y * y == x && y <= n)``                ``++ans;``        ``}``    ``}` `    ``return` `ans;``}` `// Driver code``int` `main()``{` `    ``int` `n = 10;` `    ``// function call``    ``cout << Triplets(n);` `    ``return` `0;``}`

Java

 `// Java program to Find number of``// Triplets 1 <= a <= b<= c <= n,``// Such that a^2 + b^2 = c^2``class` `Solution``{``// function to ind number of``// Triplets 1 <= a <= b<= c <= n,``// Such that a^2 + b^2 = c^2``static` `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 code``public` `static` `void` `main(String args[])``{` `    ``int` `n = ``10``;` `    ``// function call``    ``System.out.println(Triplets(n));` `}``}``//contributed by Arnab Kundu`

Python3

 `# Python3 program to Find number of``# Triplets 1 <= a <= b<= c <= n,``# Such that a^2 + b^2 = c^2``import` `math` `# function to ind number of``# Triplets 1 <= a <= b<= c <= n,``# Such that a^2 + b^2 = c^2``def` `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 code``if` `__name__ ``=``=` `"__main__"``:``    ``n ``=` `10` `    ``# function call``    ``print``(Triplets(n))` `# This code is contributed``# by ChitraNayal`

C#

 `// C# program to Find number of``// Triplets 1 <= a <= b<= c <= n,``// Such that a^2 + b^2 = c^2``using` `System;` `class` `GFG``{``// function to ind number of``// Triplets 1 <= a <= b<= c <= n,``// Such that a^2 + b^2 = c^2``static` `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 code``static` `void` `Main()``{``    ``int` `n = 10;``    ``Console.WriteLine(Triplets(n));``}``}` `// This code is contributed by ANKITRAI1`

PHP

 ``

Javascript

 ``
Output:
`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.
• Print the count in the end.

Below is the implementation of the above approach:

C++

 `// C++ implementation of the approach``#include``using` `namespace` `std;` `// Function to return an Array containing``// all the perfect squares upto n``vector<``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 <= n``int` `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 code``int` `main()``{``    ``int` `n = 10;``    ` `    ``cout << countTriplets(n);` `    ``return` `0;``}` `// This code is contributed by himanshu77`

Java

 `// Java implementation of the approach``import` `java.util.*;` `public` `class` `GFG {` `    ``// Function to return an ArrayList containing``    ``// all the perfect squares upto n``    ``public` `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 <= n``    ``public` `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.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

 `# Python3  implementation of the approach``import` `math` `# Function to return an ArrayList containing``# all the perfect squares upto n``def` `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 <= n``def` `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 code``if` `__name__ ``=``=` `"__main__"``:` `    ``n ``=` `10` `    ``print``(countTriplets(n))` `# This code is contributed by chitranayal`

C#

 `// C# implementation of the approach``using` `System.Collections;``using` `System;` `class` `GFG``{` `// Function to return an ArrayList containing``// all the perfect squares upto n``public` `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 <= n``public` `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 code``public` `static` `void` `Main()``{``    ``int` `n = 10;` `    ``Console.WriteLine(countTriplets(n));``}``}` `// This code is contributed by mits.`

Javascript

 ``
Output:
`2`

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live

My Personal Notes arrow_drop_up