Nice primes: Difference between revisions
Content added Content deleted
Drkameleon (talk | contribs) (Added Arturo implementation) |
(→{{header|PL/M}}: Optimise the sieve by using the SQRT routine from the PL/M solution to the Frobenius Numbers task) |
||
Line 1,003: | Line 1,003: | ||
CALL PRINT$STRING( .N$STR( W ) ); |
CALL PRINT$STRING( .N$STR( W ) ); |
||
END PRINT$NUMBER; |
END PRINT$NUMBER; |
||
/* INTEGER SUARE ROOT: BASED ON THE ONE IN THE PL/M FOR FROBENIUS NUMBERS */ |
|||
SQRT: PROCEDURE( N )ADDRESS; |
|||
DECLARE ( N, X0, X1 ) ADDRESS; |
|||
IF N <= 3 THEN X0 = 1; |
|||
ELSE DO; |
|||
⚫ | |||
DO WHILE( ( X1 := SHR( X0 + ( N / X0 ), 1 ) ) < X0 ); |
|||
X0 = X1; |
|||
END; |
|||
END; |
|||
RETURN X0; |
|||
END SQRT; |
|||
DECLARE MIN$PRIME LITERALLY '501'; |
DECLARE MIN$PRIME LITERALLY '501'; |
||
DECLARE MAX$PRIME LITERALLY '999'; |
DECLARE MAX$PRIME LITERALLY '999'; |
||
Line 1,014: | Line 1,026: | ||
DO I = 3 TO LAST( PRIME ) BY 2; PRIME( I ) = TRUE; END; |
DO I = 3 TO LAST( PRIME ) BY 2; PRIME( I ) = TRUE; END; |
||
DO I = 4 TO LAST( PRIME ) BY 2; PRIME( I ) = FALSE; END; |
DO I = 4 TO LAST( PRIME ) BY 2; PRIME( I ) = FALSE; END; |
||
DO I = 3 TO MAX$PRIME |
DO I = 3 TO SQRT( MAX$PRIME ); |
||
IF PRIME( I ) THEN DO; |
IF PRIME( I ) THEN DO; |
||
DO S = I * I TO LAST( PRIME ) BY I + I;PRIME( S ) = FALSE; END; |
DO S = I * I TO LAST( PRIME ) BY I + I;PRIME( S ) = FALSE; END; |
||
Line 1,027: | Line 1,039: | ||
DECLARE DIGIT$SUM BYTE, V ADDRESS; |
DECLARE DIGIT$SUM BYTE, V ADDRESS; |
||
V = I; |
V = I; |
||
DO WHILE( V > 9 ); |
|||
⚫ | |||
DIGIT$SUM = 0; |
DIGIT$SUM = 0; |
||
DO WHILE( V > 0 ); |
DO WHILE( V > 0 ); |
||
Line 1,050: | Line 1,061: | ||
END; |
END; |
||
END; |
END; |
||
EOF |
EOF |
||
</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |