| 1 | 1 | from typing import List |
| 2 | 2 | |
| 3 | 3 | def triplets_with_sum(number: int) -> List[List[int]]: |
| 4 | | pass |
| 4 | result = [] |
| 5 | |
| 6 | # Edge Case: number less than 3 (minimum sum for natural numbers 1+1+1) |
| 7 | if number < 3: |
| 8 | return [] |
| 9 | |
| 10 | # For a Pythagorean triplet where a < b < c and a + b + c = number |
| 11 | # We know that a < number/3, b < number/2, and c > number/3 |
| 12 | # So we can limit our search space |
| 13 | |
| 14 | # Edge Case: a must be at least 1 |
| 15 | for a in range(1, number // 3 + 1): |
| 16 | # Using the two equations: |
| 17 | # a + b + c = number |
| 18 | # a² + b² = c² |
| 19 | |
| 20 | # Substituting c = number - a - b into the second equation: |
| 21 | # a² + b² = (number - a - b)² |
| 22 | # a² + b² = number² + a² + b² - 2*number*a - 2*number*b + 2*a*b |
| 23 | # 0 = number² - 2*number*a - 2*number*b + 2*a*b |
| 24 | # 2*number*b - 2*a*b = number² - 2*number*a |
| 25 | # b(2*number - 2*a) = number² - 2*number*a |
| 26 | # b = (number² - 2*number*a) / (2*number - 2*a) |
| 27 | # b = number(number - 2*a) / (2*(number - a)) |
| 28 | |
| 29 | # Edge Case: Avoid division by zero when number = a |
| 30 | if number == a: |
| 31 | continue |
| 32 | |
| 33 | numerator = number * (number - 2 * a) |
| 34 | denominator = 2 * (number - a) |
| 35 | |
| 36 | # Edge Case: Check if b is an integer |
| 37 | if numerator % denominator != 0: |
| 38 | continue |
| 39 | |
| 40 | b = numerator // denominator |
| 41 | c = number - a - b |
| 42 | |
| 43 | # Edge Case: Check if it forms a valid triplet (a < b < c and all positive) |
| 44 | if a < b < c and a*a + b*b == c*c: |
| 45 | result.append([a, b, c]) |
| 46 | |
| 47 | return result |
| 48 | |
| 49 | # Handled Edge Cases: number less than 3, a equals number (division by zero), b not integer, invalid triplet (a >= b or b >= c or not Pythagorean) |