Pythagorean triples: Difference between revisions

Added XPL0 example.
(Added XPL0 example.)
Line 5,075:
Up to 1000000000: 1294080089 triples, 70230484 primitives, 45 seconds
Up to 10000000000: 14557915466 triples, 702304875 primitives, 463 seconds
</pre>
 
=={{header|XPL0}}==
Simple minded algorithm:
<lang XPL0>func GCD(N, D); \Return the greatest common divisor of N and D
int N, D, R; \numerator and denominator
[if D > N then
[R:=D; D:=N; N:=R];
while D > 0 do
[R:= rem(N/D);
N:= D;
D:= R;
];
return N;
];
 
int Max, PrimCnt, TripCnt, M, N, A, B, C, K, Prim;
[Max:= 10;
repeat PrimCnt:= 0; TripCnt:= 0;
for M:= 2 to Max do
for N:= 1 to M do
[if GCD(M,N) = 1 \coprime\ and
((M&1) = 0 xor (N&1) = 0) \one even\ then
[A:= M*M - N*N;
B:= 2*M*N;
C:= M*M + N*N;
Prim:= A+B+C;
if Prim <= Max then PrimCnt:= PrimCnt+1;
for K:= Max/Prim downto 1 do
if K*Prim <= Max then TripCnt:= TripCnt+1;
];
];
Format(6, 0);
Text(0, "Up to"); RlOut(0, float(Max));
RlOut(0, float(TripCnt)); Text(0, " triples,");
RlOut(0, float(PrimCnt)); Text(0, " primitives.^m^j");
Max:= Max*10;
until Max > 10_000;
]</lang>
 
{{out}}
<pre>
Up to 10 0 triples, 0 primitives.
Up to 100 17 triples, 7 primitives.
Up to 1000 325 triples, 70 primitives.
Up to 10000 4858 triples, 703 primitives.
</pre>
 
{{trans|Go}}
<lang XPL0>int Total, Prim, MaxPeri;
proc NewTri(S0, S1, S2);
int S0, S1, S2, P;
[P:= S0 + S1 + S2;
if P <= MaxPeri then
[Prim:= Prim+1;
Total:= Total + MaxPeri/P;
NewTri(+1*S0-2*S1+2*S2, +2*S0-1*S1+2*S2, +2*S0-2*S1+3*S2);
NewTri(+1*S0+2*S1+2*S2, +2*S0+1*S1+2*S2, +2*S0+2*S1+3*S2);
NewTri(-1*S0+2*S1+2*S2, -2*S0+1*S1+2*S2, -2*S0+2*S1+3*S2);
];
];
[MaxPeri:= 10;
while MaxPeri <= 100_000_000 do
[Prim:= 0;
Total:= 0;
NewTri(3, 4, 5);
Format(10, 0);
Text(0, "Up to"); RlOut(0, float(MaxPeri)); Text(0, ":");
RlOut(0, float(Total)); Text(0, " triples,");
RlOut(0, float(Prim)); Text(0, " primitives.^m^j");
MaxPeri:= MaxPeri*10;
];
]</lang>
 
{{out}}
<pre>
Up to 10: 0 triples, 0 primitives.
Up to 100: 17 triples, 7 primitives.
Up to 1000: 325 triples, 70 primitives.
Up to 10000: 4858 triples, 703 primitives.
Up to 100000: 64741 triples, 7026 primitives.
Up to 1000000: 808950 triples, 70229 primitives.
Up to 10000000: 9706567 triples, 702309 primitives.
Up to 100000000: 113236940 triples, 7023027 primitives.
</pre>
 
772

edits