10 !  **********************************************************************
20 !  *     Prime Number Generator, implemented by Trygve Lode (7/25/85)   *
30 !  *       Lode Data Corporation                                        *
40 !  *       6450 E Hampden Ave             (303) 781-6309                *
50 !  *       Denver, CO 80222                                             *
60 !  *                                                                    *
70 !  *  Numbers up to 4*R2^2+1 will be tested in groups of 2*R2           *
80 !  *  Complete run with R1=16000,R2=4000 takes about 7 weeks on 100/L   *
85 !  *  Starting value of PASS may be increased if you are impatient      *
90 !  **********************************************************************
100 MAP1 SEED(16000),B,1  : ! SEED ARRAY OF DIMENSION R1
110 MAP1 NUM(4000),B,1    : ! TEST ARRAY OF DIMENSION R2
120 R1=16000 : R2=4000 : !R2<=R1
130 STRSIZ 80 : F$="###############"
140 ? USING F$,2; : LIN=1
200 !  *** INITIALIZE SEED ARRAY ***
210 FOR K = 1 TO R1 : SEED(K)=1 : NEXT K
220 P=1
230 IF (P > R1) THEN 300 ELSE IF (SEED(P)=0) THEN 260
240 P0 = P*2+1 : N=P+P0 : ? USING F$,P0; : LIN=LIN+1 : IF LIN=5 THEN LIN=0:?
250 IF (N<=R1) THEN SEED(N)=0 : N=N+P0 : GOTO 250
260 P=P+1 : GOTO 230
300 ! **** FIND REST OF PRIMES ****
310 FOR PASS = 1 TO INT(2*R1*R1/R2) : PZ = INT((SQR(2*R1+2*PASS*R2+1)-1)/2)
320 FOR K=1 TO R2 : NUM(K)=1 : NEXT K
330 P=1
340 IF (P > PZ) THEN 400 ELSE IF (SEED(P)=0) THEN 370
350 P0=P*2+1 : A=R2*(PASS-1)+R1-P : N = P0-(A-P0*INT(A/P0))
360 IF (N<=R2) THEN NUM(N)=0 : N=N+P0 : GOTO 360
370 P=P+1 : GOTO 340
400 ! **** PRINT THEM OUT ****
410 FOR K = 1 TO R2
420 IF NUM(K)=0 THEN 490
430 P = 2*K+2*R2*(PASS-1)+2*R1+1:? USING F$,P;:LIN=LIN+1:IF LIN=5 THEN LIN=0:?
490 NEXT K
500 NEXT PASS
510 END