Sequence of primes by trial division: Difference between revisions

no edit summary
m (→‎{{header|REXX}}: added whitespace, used a template for an output section.)
No edit summary
Line 94:
20 primes starting at 30: 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113
</pre>
 
=={{header|ALGOL-M}}==
<lang algol>
BEGIN
COMMENT
PRIME NUMBER GENERATOR IN ALGOL-M.
ONLY ODD NUMBERS ARE CHECKED, AND ONLY THE PRIME NUMBERS
PREVIOUSLY FOUND (UP TO THE SQUARE ROOT OF THE NUMBER
CURRENTLY UNDER EXAMINATION) ARE TESTED AS DIVISORS;
 
INTEGER I, K, M, N, S, NPRIMES, DIVISIBLE, FALSE, TRUE;
 
COMMENT COMPUTE P MOD Q;
INTEGER FUNCTION MOD (P, Q);
INTEGER P, Q;
BEGIN
MOD := P - Q * (P / Q);
END;
 
COMMENT MAIN PROGRAM BEGINS HERE;
 
WRITE ("How many primes do you want to generate?");
READ (NPRIMES);
BEGIN
INTEGER ARRAY P[1:NPRIMES];
FALSE := 0;
TRUE := -1;
 
COMMENT INITIALIZE P WITH FIRST PRIME NUMBER AND DISPLAY IT;
P[1] := 2;
WRITE (1, ":", P[1]);
 
I := 1; % COUNT OF PRIME NUMBERS FOUND SO FAR %
K := 1; % INDEX OF LARGEST PRIME <= SQRT OF N %
N := 3; % CURRENT NUMBER BEING CHECKED %
WHILE I < NPRIMES DO
BEGIN
S := P[K] * P[k];
IF S <= N THEN K := K + 1;
DIVISIBLE := FALSE;
M := 1; % INDEX OF POSSIBLE DIVISORS %
WHILE M <= K AND DIVISIBLE = FALSE DO
BEGIN
IF MOD(N, P[M]) = 0 THEN DIVISIBLE := TRUE;
M := M + 1;
END;
IF DIVISIBLE = FALSE THEN
BEGIN
I := I + 1;
P[I] := N;
WRITE (I, ":", N);
END;
N := N + 2;
END;
END;
WRITE("All done. Goodbye");
END
</lang>
 
=={{header|ALGOL W}}==
211

edits