Attractive numbers: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add Cowgol) |
Not a robot (talk | contribs) (Add PL/M) |
||
Line 2,495: | Line 2,495: | ||
{{out}} |
{{out}} |
||
<pre>4 6 8 10 12 14 15 18 20 21 22 26 27 28 30 32 33 34 35 36 38 39 42 44 45 46 48 50 51 52 55 57 58 62 63 65 66 68 69 70 74 75 76 77 78 80 82 85 86 87 91 92 93 94 95 98 99 100 102 105 106 108 110 111 112 114 115 116 117 118 119 120</pre> |
<pre>4 6 8 10 12 14 15 18 20 21 22 26 27 28 30 32 33 34 35 36 38 39 42 44 45 46 48 50 51 52 55 57 58 62 63 65 66 68 69 70 74 75 76 77 78 80 82 85 86 87 91 92 93 94 95 98 99 100 102 105 106 108 110 111 112 114 115 116 117 118 119 120</pre> |
||
=={{header|PL/M}}== |
|||
<lang pli>100H: |
|||
BDOS: PROCEDURE (F, ARG); DECLARE F BYTE, ARG ADDRESS; GO TO 5; END BDOS; |
|||
EXIT: PROCEDURE; CALL BDOS(0,0); END EXIT; |
|||
PUT$CHAR: PROCEDURE (CH); DECLARE CH BYTE; CALL BDOS(2,CH); END PUT$CHAR; |
|||
DECLARE MAXIMUM LITERALLY '120'; |
|||
PRINT4: PROCEDURE (N); |
|||
DECLARE (N, MAGN, Z) BYTE; |
|||
CALL PUT$CHAR(' '); |
|||
MAGN = 100; |
|||
Z = 0; |
|||
DO WHILE MAGN > 0; |
|||
IF NOT Z AND N < MAGN THEN |
|||
CALL PUT$CHAR(' '); |
|||
ELSE DO; |
|||
CALL PUT$CHAR('0' + N/MAGN); |
|||
N = N MOD MAGN; |
|||
Z = 1; |
|||
END; |
|||
MAGN = MAGN/10; |
|||
END; |
|||
END PRINT4; |
|||
NEW$LINE: PROCEDURE; |
|||
CALL PUT$CHAR(13); |
|||
CALL PUT$CHAR(10); |
|||
END NEW$LINE; |
|||
SIEVE: PROCEDURE (MAX, PRIME); |
|||
DECLARE PRIME ADDRESS; |
|||
DECLARE (I, J, MAX, P BASED PRIME) BYTE; |
|||
P(0)=0; |
|||
P(1)=0; |
|||
DO I=2 TO MAX; P(I)=1; END; |
|||
DO I=2 TO SHR(MAX,1); |
|||
IF P(I) THEN DO J=SHL(I,1) TO MAX BY I; |
|||
P(J) = 0; |
|||
END; |
|||
END; |
|||
END SIEVE; |
|||
FACTORS: PROCEDURE (N, MAX, PRIME) BYTE; |
|||
DECLARE PRIME ADDRESS; |
|||
DECLARE (I, J, N, MAX, F, P BASED PRIME) BYTE; |
|||
F = 0; |
|||
DO I=2 TO MAX; |
|||
IF P(I) THEN DO WHILE N MOD I = 0; |
|||
F = F + 1; |
|||
N = N / I; |
|||
END; |
|||
END; |
|||
RETURN F; |
|||
END FACTORS; |
|||
ATTRACTIVE: PROCEDURE(N, MAX, PRIME) BYTE; |
|||
DECLARE PRIME ADDRESS; |
|||
DECLARE (N, MAX, P BASED PRIME) BYTE; |
|||
RETURN P(FACTORS(N, MAX, PRIME)); |
|||
END ATTRACTIVE; |
|||
DECLARE (I, COL) BYTE INITIAL (0, 0); |
|||
CALL SIEVE(MAXIMUM, .MEMORY); |
|||
DO I=2 TO MAXIMUM; |
|||
IF ATTRACTIVE(I, MAXIMUM, .MEMORY) THEN DO; |
|||
CALL PRINT4(I); |
|||
COL = COL + 1; |
|||
IF COL MOD 18 = 0 THEN CALL NEW$LINE; |
|||
END; |
|||
END; |
|||
CALL EXIT; |
|||
EOF</lang> |
|||
{{out}} |
|||
<pre> 4 6 8 9 10 12 14 15 18 20 21 22 25 26 27 28 30 32 |
|||
33 34 35 38 39 42 44 45 46 48 49 50 51 52 55 57 58 62 |
|||
63 65 66 68 69 70 72 74 75 76 77 78 80 82 85 86 87 91 |
|||
92 93 94 95 98 99 102 105 106 108 110 111 112 114 115 116 117 118 |
|||
119 120</pre> |
|||
=={{header|Prolog}}== |
=={{header|Prolog}}== |