RosettaCodeData/Task/Pythagorean-triples/Phix/pythagorean-triples.phix
2016-12-05 23:44:36 +01:00

20 lines
549 B
Text

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