Special pythagorean triplet: Difference between revisions

(→‎{{header|ALGOL 68}}: Remove possibly invalid optimisation)
(→‎{{header|PL/M}}: Minor tweak)
Line 268:
DO N = 1 TO SQRT$1000;
DO M = N + 1 TO SQRT$1000;
/* PL/MNOTE: A = M2 - N2, B = 2MN, C = M2 + N2 ONLY DOES UNSIGNED ARITHMETIC SO WE USE THE EQUATIONS FOR */
/* A, B AND C: A = M2 - N2, B = 2MN, C = M2 + N2 TO CALCULATE */
/* A + B + C = M2 - N2 + 2MN + M2 + N2 = 2( M2 + MN ) = 2M( M + N )*/
IF ( M * ( M + N ) ) = 500 THEN DO;
M2 = M * M;
N2 = N * N;
ACALL SET$LONG$INTEGER( =.A, M2 - N2 );
BCALL SET$LONG$INTEGER( =.B, 2 * M * N );
CCALL SET$LONG$INTEGER( =.C, M2 + N2 );
CALL SET$LONG$INTEGERMULTIPLY( .LAA, A .B, .ABC );
CALL SET$LONG$INTEGERMULTIPLY( .LBABC, B.C, .ABC );
CALL SET$LONG$INTEGER( .LC, C );
CALL LONG$MULTIPLY( .LA, .LB, .ABC );
CALL LONG$MULTIPLY( .ABC, .LC, .ABC );
CALL PRINT$LONG$INTEGER( .ABC );
CALL PRINT$NL;
3,043

edits