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