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

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

So the aim is to find the number of solutions which satisfy equations a + b + c = p and a2 + b2 = c2.

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)))

Output:

number of right triangles = 8

Time complexity: O(P)

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

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.