Special pythagorean triplet: Difference between revisions

Content added Content deleted
(→‎{{header|ALGOL 68}}: Remove possibly invalid optimisation)
(→‎{{header|PL/M}}: Minor tweak)
Line 268: Line 268:
DO N = 1 TO SQRT$1000;
DO N = 1 TO SQRT$1000;
DO M = N + 1 TO SQRT$1000;
DO M = N + 1 TO SQRT$1000;
/* PL/M ONLY DOES UNSIGNED ARITHMETIC SO WE USE THE EQUATIONS FOR */
/* NOTE: A = M2 - N2, B = 2MN, C = M2 + N2 */
/* 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 )*/
/* A + B + C = M2 - N2 + 2MN + M2 + N2 = 2( M2 + MN ) = 2M( M + N )*/
IF ( M * ( M + N ) ) = 500 THEN DO;
IF ( M * ( M + N ) ) = 500 THEN DO;
M2 = M * M;
M2 = M * M;
N2 = N * N;
N2 = N * N;
A = M2 - N2;
CALL SET$LONG$INTEGER( .A, M2 - N2 );
B = 2 * M * N;
CALL SET$LONG$INTEGER( .B, 2 * M * N );
C = M2 + N2;
CALL SET$LONG$INTEGER( .C, M2 + N2 );
CALL SET$LONG$INTEGER( .LA, A );
CALL LONG$MULTIPLY( .A, .B, .ABC );
CALL SET$LONG$INTEGER( .LB, B );
CALL LONG$MULTIPLY( .ABC, .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$LONG$INTEGER( .ABC );
CALL PRINT$NL;
CALL PRINT$NL;