atom total, prim, maxPeri = 10 procedure tri(atom s0, s1, s2) atom p = s0 + s1 + s2 if p<=maxPeri then prim += 1 total += floor(maxPeri/p) tri( s0+2*(-s1+s2), 2*( s0+s2)-s1, 2*( s0-s1+s2)+s2); tri( s0+2*( s1+s2), 2*( s0+s2)+s1, 2*( s0+s1+s2)+s2); tri(-s0+2*( s1+s2), 2*(-s0+s2)+s1, 2*(-s0+s1+s2)+s2); end if end procedure while maxPeri<=1e8 do prim := 0; total := 0; tri(3, 4, 5); printf(1,"Up to %d: %d triples, %d primitives.\n", {maxPeri,total,prim}) maxPeri *= 10; end while