MODE 12  :   REM SCREEN DISPLAY MODE,  Acorn A4000 2MB, BBC BASIC V-64.
PRINT "REM  > ""HARM92/11. SIMPLEMobi.us"" " ' "  by dsmcdona@actrix.gen.nz,  15.06.1998."
now = TIME
ON ERROR  REPORT
PRINT ' "Time = "; .01* (TIME - now) "  Seconds." CHR$7

INPUT "Enter MAXR=160 000   (0 = quit)"; MAXR
IF MAXR < 1 THEN PRINT "*SIMPLEMobi.us  e n d.*" ' :END

now = TIME
DIM R%( MAXR )

PRINT  "PRIMES."

R%() = 1
R%(1) = 2
PROCP2( 2 )
FOR P% = 3 TO MAXR STEP 2
   IF R%( P%) = 1  THEN  PROCP2( P% )
   NEXT P%
PROCT2
END

DEF PROCP2( P% )
PRINT  ; P% ",  ";
IF POS > 70 THEN PRINT
IF P% * P% < MAXR THEN
     FOR K% = P% * P% TO MAXR STEP P%*P%
        R%( K% ) = 0  :  REM MARK NON-Square-frees.
        NEXT K%
     FOR K% = P% TO MAXR DIV P%
        IF  R%( K% ) * R%( K% * P% ) > 0 THEN
            R%( K% * P% ) = R%( K% ) +1
            REM  MULTIPLY BY NEXT PRIME
            REM  PRINT ; K% * P% "  " R%( K% * P% )", ";
            ENDIF
        NEXT K%

        ENDIF

ENDPROC

DEF PROCT2
PRINT  '' "PRINT TABLE.  (Number of Prime Divisors of Non-Squarefree integers.)"
   s = 0
FOR PG = 0 TO MAXR STEP 500
   FOR C% = 1 TO 50 STEP 5
        PRINT  TAB( 8 + C% *6/5); C%;
        NEXT C%
   FOR L% = 0 TO 450 STEP 50
      N% = PG + L%
      PRINT  '; N%;
      FOR C% = 1 TO 50 STEP 5
        PRINT  TAB( 8 + C% *6/5);
             PRINT;  R%( N% + C%)   R%( N% + C%+1) R%( N% + C%+2);
             PRINT;  R%( N% + C%+3) R%( N% + C%+4);
        NEXT C%

       NEXT L%

PRINT  ' " 0 = Mu 0,  1 = Prime, Mu -1,  2 = Mu +1, Mu = (-1)^r." '
   FOR K% = PG+1 TO PG+500
       IF R%( K% ) > 0 THEN r = (-1)^ R%( K% ) * K% : s += 1/r
       NEXT K%

   PRINT " S = 1/M = 1 -1/2-1/3-5'+6'-7'+10'-+..."; r"' = 1/"; 1/s " cont."GET$
NEXT PG
ENDPROC

