Tim Varley Logo
Tim Varley Systems Engineer
Problem #39 hard

Integer Right Triangles

If pp is the perimeter of a right angle triangle with integral length sides, {a,b,c}\{a, b, c\}, there are exactly three solutions for p=120p = 120.

{20,48,52}\{20,48,52\}, {24,45,51}\{24,45,51\}, {30,40,50}\{30,40,50\}

For which value of p1000p \le 1000, is the number of solutions maximised?

Implementations

cpp
// Authored by: Tim Varley 💘
// Assisted-by: Grok Code Fast via Crush 💘 <crush@charm.land>
#include <iostream>
#include <vector>
#include <string>
int integer_right_triangles() {
int max_count = 0;
int best_p = 0;
for(int p=12; p<=1000; p++) {
int count = 0;
for(int a=1; a<p; a++) {
for(int b=a; b<p-a; b++) {
int c = p - a - b;
if(a*a + b*b == c*c) count++;
}
}
if(count > max_count) {
max_count = count;
best_p = p;
}
}
return best_p;
}
#if ! defined UNITTEST_MODE
int main(int argc, char const *argv[]) {
std::cout << integer_right_triangles() << std::endl;
}
#endif // UNITTEST_MODE

Solution Notes

Mathematical Background

A Pythagorean triple consists of integers a, b, c where a² + b² = c². Primitive triples can be generated by formulas involving coprime integers m > n > 0 with m-n odd.

For perimeter p = a + b + c, we count all triples where a < b < c and a + b + c = p.

Algorithm Analysis

The implementations use brute force enumeration:

  • Iterate over all perimeters p from 1 to 1000
  • For each p, iterate over possible a and b values (a < b < c, c = p - a - b)
  • Check if a² + b² = c²
  • Count solutions per perimeter and track the maximum

Optimizations include a < b and b < c to avoid duplicates.

Performance Analysis

  • Time Complexity: O(P × P²) where P=1000, resulting in ~10^9 operations, but practical optimizations reduce this. Executes in seconds on modern hardware.
  • Space Complexity: O(1) - no additional data structures needed.
  • Execution Time: Fast (1-2 seconds), suitable for batch processing.
  • Scalability: Quadratic in perimeter limit, acceptable for small bounds.

Key Insights

  • Perimeter 840 has the most solutions (8 Pythagorean triples)
  • Larger perimeters generally have more solutions
  • The distribution follows mathematical patterns in triple generation
  • Brute force is feasible due to the small upper bound

Educational Value

This problem teaches:

  • Pythagorean triples and their properties
  • Systematic enumeration with constraints
  • The relationship between perimeter and triangle solutions
  • Optimization techniques for nested loops
  • Mathematical patterns in combinatorial counting