35 lines
1.1 KiB
Text
35 lines
1.1 KiB
Text
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;
|
|
]
|