# Count number of right triangles possible with a given perimeter

Given a perimeter P, the task is to find the number of right triangles possible with perimeter equal to p.

Examples:

Input: P = 12 Output: number of right triangles = 1 The only right angle possible is with sides hypotenuse = 5, perpendicular = 4 and base = 3. Input: p = 840 Output: number of right triangles = 8

So the aim is to find the number of solutions which satisfy equations a + b + c = p and a^{2} + b^{2} = c^{2}.

A **naive** approach is to run two loops for a(1 to p/2) and b(a+1 to p/3) then make c=p-a-b and increase count by one if . This will take time.

An **efficient** approach can be found by little algebraic manipulation :

Since a + c > b or, p – b > b or, b < p/2. Thus iterating b from 1 to p/2, calculating a and storing only the whole number a would give all solutions for a given p. There are no right triangles are possible for odd p as right angle triangles follow the Pythagoras theorem. Use a list of pairs to store the values of a and band return the count at the end.

Below is the implementation of the above approach.

`# python program to find the number of ` `# right triangles with given perimeter ` ` ` `# Function to return the count ` `def` `countTriangles(p): ` ` ` ` ` `# making a list to store (a, b) pairs ` ` ` `store ` `=` `[] ` ` ` ` ` `# no triangle if p is odd ` ` ` `if` `p ` `%` `2` `!` `=` `0` `: ` `return` `0` ` ` `else` `: ` ` ` `count ` `=` `0` ` ` `for` `b ` `in` `range` `(` `1` `, p ` `/` `/` `2` `): ` ` ` ` ` `a ` `=` `p ` `/` `2` `*` `((p ` `-` `2` `*` `b) ` `/` `(p ` `-` `b)) ` ` ` `inta ` `=` `int` `(a) ` ` ` `if` `(a ` `=` `=` `inta ): ` ` ` ` ` `# make (a, b) pair in sorted order ` ` ` `ab ` `=` `tuple` `(` `sorted` `((inta, b))) ` ` ` ` ` `# check to avoid duplicates ` ` ` `if` `ab ` `not` `in` `store : ` ` ` `count ` `+` `=` `1` ` ` `# store the new pair ` ` ` `store.append(ab) ` ` ` `return` `count ` ` ` `# Driver Code ` `p ` `=` `12` `print` `(` `"number of right triangles = "` `+` `str` `(countTriangles(p))) ` |

*chevron_right*

*filter_none*

**Output:**

number of right triangles = 8

**Time complexity:** O(P)

## Recommended Posts:

- Count the number of possible triangles
- Number of triangles after N moves
- Number of triangles that can be formed
- Number of triangles that can be formed with given N points
- Number of possible Triangles in a Cartesian coordinate system
- Number of triangles formed from a set of points on three lines
- Number of Isosceles triangles in a binary tree
- Number of triangles possible with given lengths of sticks which are powers of 2
- Number of triangles in a plane if no more than two points are collinear
- Total number of triangles formed when there are H horizontal and V vertical lines
- Number of triangles formed by joining vertices of n-sided polygon with one side common
- Number of ways a convex polygon of n+2 sides can split into triangles by connecting vertices
- Number of triangles formed by joining vertices of n-sided polygon with two common sides and no common sides
- Count number of triplets with product equal to given number with duplicates allowed
- Count number of trailing zeros in Binary representation of a number using Bitset

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.