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

• Difficulty Level : Medium
• Last Updated : 08 Jul, 2022

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`

Time Complexity: O(n2sqrtx) where x is the max value of the third number.

Auxiliary Space: O(1)

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`

Time Complexity: O(nlogn)

Auxiliary Space: O(logn)

My Personal Notes arrow_drop_up