Sum of two adjacent numbers are primes: Difference between revisions
Content added Content deleted
(Added Quackery.) |
(Added PL/M) |
||
Line 746: | Line 746: | ||
</pre> |
</pre> |
||
=={{header|PL/M}}== |
|||
{{works with|8080 PL/M Compiler}} ... under CP/M (or an emulator) |
|||
<syntaxhighlight lang="plm"> |
|||
100H: /* FIND NUMBERS N SUCH THAT N + N + 1 IS PRIME */ |
|||
/* CP/M SYSTEM CALL AND I/O ROUTINES */ |
|||
BDOS: PROCEDURE( FN, ARG ); DECLARE FN BYTE, ARG ADDRESS; GOTO 5; END; |
|||
PR$CHAR: PROCEDURE( C ); DECLARE C BYTE; CALL BDOS( 2, C ); END; |
|||
PR$STRING: PROCEDURE( S ); DECLARE S ADDRESS; CALL BDOS( 9, S ); END; |
|||
PR$NL: PROCEDURE; CALL PR$CHAR( 0DH ); CALL PR$CHAR( 0AH ); END; |
|||
PR$NUMBER: PROCEDURE( N ); /* PRINTS A NUMBER IN THE MINIMUN FIELD WIDTH */ |
|||
DECLARE N ADDRESS; |
|||
DECLARE V ADDRESS, N$STR ( 6 )BYTE, W BYTE; |
|||
V = N; |
|||
W = LAST( N$STR ); |
|||
N$STR( W ) = '$'; |
|||
N$STR( W := W - 1 ) = '0' + ( V MOD 10 ); |
|||
DO WHILE( ( V := V / 10 ) > 0 ); |
|||
N$STR( W := W - 1 ) = '0' + ( V MOD 10 ); |
|||
END; |
|||
CALL PR$STRING( .N$STR( W ) ); |
|||
END PR$NUMBER; |
|||
PR$NUMBER2: PROCEDURE( N ); /* PRINT A NUMBER IN AT LEAST 2 POSITIONS */ |
|||
DECLARE N ADDRESS; |
|||
IF N < 10 THEN CALL PR$CHAR( ' ' ); |
|||
CALL PR$NUMBER( N ); |
|||
END PR$NUMBER2; |
|||
/* TASK */ |
|||
/* ASSUMING THE FIRST 20 SUCH NUMBERS WILL BE < 255 */ |
|||
DECLARE MAX$NUMBER LITERALLY '255' |
|||
, FALSE LITERALLY '0' |
|||
, TRUE LITERALLY '0FFH' |
|||
; |
|||
DECLARE PRIME ( MAX$NUMBER )BYTE; /* SIEVE THE PRIMES TO MAX$NUMBER - 1 */ |
|||
DECLARE I ADDRESS; |
|||
PRIME( 0 ), PRIME( 1 ) = FALSE; |
|||
PRIME( 2 ) = TRUE; |
|||
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 = 3 TO LAST( PRIME ) BY 2; |
|||
IF PRIME( I ) THEN DO; |
|||
DECLARE S ADDRESS; |
|||
DO S = I + I TO LAST( PRIME ) BY I; |
|||
PRIME( S ) = FALSE; |
|||
END; |
|||
END; |
|||
END; |
|||
/* FIND THE NUMBERS */ |
|||
DECLARE ( N, N1, COUNT ) BYTE; |
|||
COUNT = 0; |
|||
N1 = 1; |
|||
DO WHILE COUNT < 20; |
|||
N = N1; |
|||
N1 = N1 + 1; |
|||
IF PRIME( N + N1 ) THEN DO; |
|||
COUNT = COUNT + 1; |
|||
CALL PR$NUMBER2( COUNT ); |
|||
CALL PR$STRING( .': $' ); |
|||
CALL PR$NUMBER2( N ); |
|||
CALL PR$STRING( .' + $' ); |
|||
CALL PR$NUMBER2( N1 ); |
|||
CALL PR$STRING( .' = $' ); |
|||
CALL PR$NUMBER2( N + N1 ); |
|||
CALL PR$NL; |
|||
END; |
|||
END; |
|||
EOF |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
1: 1 + 2 = 3 |
|||
2: 2 + 3 = 5 |
|||
3: 3 + 4 = 7 |
|||
4: 5 + 6 = 11 |
|||
5: 6 + 7 = 13 |
|||
6: 8 + 9 = 17 |
|||
7: 9 + 10 = 19 |
|||
8: 11 + 12 = 23 |
|||
9: 14 + 15 = 29 |
|||
10: 15 + 16 = 31 |
|||
11: 18 + 19 = 37 |
|||
12: 20 + 21 = 41 |
|||
13: 21 + 22 = 43 |
|||
14: 23 + 24 = 47 |
|||
15: 26 + 27 = 53 |
|||
16: 29 + 30 = 59 |
|||
17: 30 + 31 = 61 |
|||
18: 33 + 34 = 67 |
|||
19: 35 + 36 = 71 |
|||
20: 36 + 37 = 73 |
|||
</pre> |
|||
=={{header|Python}}== |
=={{header|Python}}== |