   10REM  >  donmcd.calc.factors.abundaint,  10/3/95,  12/3/95
   20MODE 12
   30FOR d = 1 TO 2
   40   PRINT"bbc basic v program donmcd.calc.factors.abundaint, 12/3/95, 20:30pm."
   50   NEXT d
   60
   70PRINT ' "Calculate kinds of integers, ..."'"abundant nos. plus artificial intelligence,"'"Odds, Squares, Primes, Perfects, Abundant, Sqfree, Multiperfect"'"by :  D S (Don) McDonald,"'"  63/5 Hut chi son Road, Wellington2, New Zealand. " '
   80
   90PRINT "continu "; GET$
  100PRINT "ex. ODD  5 7 9 11 13.."
  110PRINT "ex. SQUARE  4 9 16 25 36 49..."
  120PRINT "ex. PRIME   5 7 11 13 17 19 23..."
  130PRINT "ex. PERFECT  6  28  496  8128  ..."
  140PRINT "ex. ABUNDANT  12  18  20 .."
  150PRINT "ex.  SQFREE  5 6 7 10 11 13  14 15  17 .."
  160PRINT "ex. MULTIPERFECT  =  sum divisors / n%. " '
  170
  180ON ERROR REPORT : PRINT " at erl. ";ERL
  190INPUT ' "Enter start no. to test if abundant, n$, [1],   0 end."'" (-ve,  full Report on each integer.) "; n$
  200IF n$ = "" THEN n% = 1  ELSE  n% = EVAL( n$)
  210:  PRINT ; n$ "= "; n%
  220IF n% = 0 THEN PRINT "Program  donmcd.calc.factors.abundaint, e.n.d.": VDU 3 : CLOSE #0 : PRINT "PRINT OFF, CLOSE #0"  : STOP
  230full = ( n% < 0 )  : n% = ABS( n% )
  240IF  ( n% < 4 )  THEN n% = 4
  250
  260INPUT '  "Enter artificial intelligence tests$" ' "E.g.  ODD AND SQUARE"'"E.g. PERFECT OR ABUNDANT,"''" words allowed :  ODD, SQUARE, PERFECT, PRIME, ABUNDANT, SQFREE," ' "e.g. (MULTIPERFECT > 2.4),   NOT, AND, OR  "; test$
  270PRINT "tests$ = "test$
  280
  290REPEAT
  300   INPUT "PRINT On , 'Yy (Nn)' ";Pt$
  310   IF Pt$ = "" THEN Pt$ = "n"
  320   IF INSTR("Yy", Pt$) > 0 THEN PRINT"Yes." : VDU 2
  330   IF INSTR("Nn", Pt$) > 0 THEN VDU 3 : PRINT"Off"
  340   UNTIL INSTR("YyNn", Pt$) > 0
  350
  360Count% = 0
  370
  380FOR n% = n% TO 2^31-1  :  REM  STEP 1
  390   root% = SQR(n%)
  400   SQFREE = TRUE
  410   sum = 1
  420      FOR fact% = 2 TO root%
  430         IF n% MOD fact% = 0  THEN
  440             sum += fact% + (n% DIV fact%)
  450             IF ( n% MOD (fact%^2) ) = 0 THEN SQFREE = FALSE
  460             ENDIF
  470         NEXT fact%
  480
  490      SQUARE= ( root%^2 = n%)
  500      IF SQUARE THEN sum -= root%  :  REM PRINT; n% " perfect square."
  510      ODD = ( n%  MOD 2 = 1)
  520      PRIME = ( sum = 1 )
  530      PERFECT = (sum = n%)
  540      MULTIPERFECT = (sum / n% ) + 1
  550      ABUNDANT =( sum > n% )
  560      IF ABUNDANT THEN
  570         REM PRINT ' ; n% " abundant,  sum proper factors = "; sum ' " multiperfect x "sum / n%
  580         REM IF (n% MOD 6) * (n% MOD 28) * (n% MOD (31*16) ) * (n% MOD 8128) > 0 THEN PRINT CHR$(7) "not perfect factor. 6, 28, 496 , 8128, ?? contin"; GET$
  590         ENDIF  :  REM sum
  600   PRINT; n%",  " ;
  610   IF full  OR EVAL( test$) = TRUE  THEN PRINT '; n% "  SQUARE=";SQUARE   "  ODD ="ODD "  PERFECT = "PERFECT "  ABUNDANT = "ABUNDANT   "  SQFREE = " SQFREE  "  PRIME = "PRIME  "  MULTIPERFECT = ";MULTIPERFECT
  620   IF EVAL( test$)= TRUE  THEN Count% += 1 : PRINT"[";Count%"] " n% "  test$ = TRUE (";test$ ") cont."GET$
  630   NEXT n%
  640
  650END