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