32 lines
715 B
ObjectPascal
32 lines
715 B
ObjectPascal
Program PythagoreanTriples (output);
|
|
|
|
var
|
|
total, prim, maxPeri: int64;
|
|
|
|
procedure newTri(s0, s1, s2: int64);
|
|
var
|
|
p: int64;
|
|
begin
|
|
p := s0 + s1 + s2;
|
|
if p <= maxPeri then
|
|
begin
|
|
inc(prim);
|
|
total := total + maxPeri div p;
|
|
newTri( s0 + 2*(-s1+s2), 2*( s0+s2) - s1, 2*( s0-s1+s2) + s2);
|
|
newTri( s0 + 2*( s1+s2), 2*( s0+s2) + s1, 2*( s0+s1+s2) + s2);
|
|
newTri(-s0 + 2*( s1+s2), 2*(-s0+s2) + s1, 2*(-s0+s1+s2) + s2);
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
maxPeri := 100;
|
|
while maxPeri <= 1e10 do
|
|
begin
|
|
prim := 0;
|
|
total := 0;
|
|
newTri(3, 4, 5);
|
|
writeln('Up to ', maxPeri, ': ', total, ' triples, ', prim, ' primitives.');
|
|
maxPeri := maxPeri * 10;
|
|
end;
|
|
end.
|