This blog post contains come comments about finding all triangles whose sizes are integers and the area/perimeter ratio is the integer *r*. This is related to Project Euler problem 283.

The blog post contains a nice analysis and some pseudocode for generating all possible (*a*, *b*, *c*) size triplets for the given ratio *r*. Unfortunately both the analysis and the pseudocode contains some mistakes.

Here is the corrected version:

def find_triangles_correct(r): for u in divisors of 2r: for v in 1 to floor(sqrt(3) * u): if gcd(u, v) == 1: lhs = 4*Some mistakes and other inaccuracies in the original:r*r*(u*u+v*v) for d1 in positive divisors of lhs: ifd1 <=lhs / d1: d2 = lhs / d1 if not (u < v and d1*u < (2r(v*v-u*u))): if ((d1+2ru) mod v) = 0 and ((d2+2ru) mod v) = 0:a = (d1 + 2ru) / v + 2rv / ub = (d2 + 2ru) / v + 2rv / u c = (d1 + d2 + 4ru) / v yield a, b, c

- The variable
*r*were silently renamed to*m*. - The formulas for
*a*,*b*and*c*were not included. - The analysis incorrectly states that
*v*must be smaller than*floor(sqrt(3)*u))*. The correct statement is:*v*must be smaller than*sqrt(3)*u*. Before the correction some solutions such as (6, 8, 10) for*r*=1 were not generated. - The condition
*d1 <= lhs / d1*had a*>=*instead.

Please note that the algorithm yields each triangle once, in an unspecified order of *a*, *b* and *c* within the triangle.

## No comments:

Post a Comment