10 REM PRIME/FACTORS

20 REM William B. Brown

30 REM 223 Harper Ridge Place

40 REM Antioch, TN 37013-3722

50 REM (573) 552-6822

60 REM COPYRIGHT July 1996, March 2017 by William B. Brown.

63 REM This program CANNOT be sold for any purpose without the

64 REM express written purpose of the author.

70 S$ = "ONLY WHOLE NUMBERS GREATER THAN ZERO"

80 E$ = "END NUMBER MUST BE EQUAL TO OR GREATER THAN THE START NUMBER"

90 CLS: PRINT: PRINT: PRINT " PRIMES AND FACTORS":

91 PRINT: PRINT " COPYRIGHT July 1996, March 2017 by William B. Brown.":

92 PRINT " This program CANNOT be sold for any purpose without the EXPRESS";

93 PRINT " written permission of the author.";

94 PRINT " All rights reserved.":

95 REM MAIN MENU

100 PRINT: PRINT " (1) FIND THE PRIME FACTORS OF ONE NUMBER"

120 PRINT: PRINT " (2) FIND THE PRIME FACTORS OF A RANGE OF NUMBERS"

140 PRINT: PRINT " (3) TEST ONE NUMBER FOR PRIME"

150 PRINT: PRINT " (4) FIND THE PRIMES IN A RANGE OF NUMBERS"

170 PRINT: PRINT " (5) QUIT THE PROGRAM"

180 PRINT: PRINT: INPUT "TYPE THE NUMBER OF YOUR SELECTION"; Q

190 ON Q GOTO 810, 210, 960, 360, 1150

200 GOTO 90

205 REM FACTORS OF A RANGE OF NUMBERS

210 CLS: PRINT: PRINT: PRINT: PRINT "FIND THE FACTORS OF A RANGE OF NUMBERS"

220 PRINT: PRINT: PRINT: INPUT "TYPE S FOR SCREEN P FOR PRINTER "; T$

230 IF T$ = "S" OR T$ = "s" THEN PS = 0: GOTO 260

240 IF T$ = "P" OR T$ = "p" THEN PS = 1: GOTO 310

250 GOTO 210

260 GOSUB 550

270 CLS: PRINT: PRINT: PRINT: PRINT "FINDING ALL FACTORS OF THE NUMBERS BETWEEN"; SN; "AND"; EN; ".": PRINT: PRINT

290 GOSUB 610

300 PRINT "FINISHED": GOTO 770

310 GOSUB 550

330 LPRINT "FACTORS OF THE NUMBERS BETWEEN "; SN; " AND "; EN: LPRINT

335 PRINT "FACTORS OF THE NUMBERS BETWEEN "; SN; " AND "; EN: PRINT

340 GOSUB 1300

350 LPRINT: LPRINT "FINISHED": PRINT: PRINT "FINISHED": GOTO 770

355 REM TEST A RANGE OF NUMBERS FOR PRIMES

360 CLS: PRINT: PRINT: PRINT: PRINT "FIND THE PRIMES IN A RANGE OF NUMBERS"

370 PRINT: PRINT: PRINT: INPUT "TYPE S FOR SCREEN P FOR PRINTER "; T$

380 IF T$ = "S" OR T$ = "s" THEN SP = 0: GOTO 410

390 IF T$ = "P" OR T$ = "p" THEN SP = 1: GOTO 460

400 GOTO 360

410 GOSUB 550

420 CLS: PRINT: PRINT: PRINT: PRINT "FINDING ALL PRIME NUMBERS BETWEEN"; SN; "AND"; EN; ".": PRINT: PRINT

440 GOSUB 700

450 PRINT: GOTO 770

460 GOSUB 550

480 LPRINT "ALL THE PRIME NUMBERS BETWEEN "; SN; " AND "; EN: LPRINT

485 PRINT "ALL THE PRIME NUMBERS BETWEEN "; SN; " AND "; EN: PRINT

490 GOSUB 700

500 LPRINT: LPRINT: LPRINT "FINISHED": PRINT: PRINT: PRINT "FINISHED": GOTO 770

510 IF FP <> 2 THEN PRINT FP; "*";: N = N / FP: RETURN

520 N = N / FP: IF N / FP = INT(N / FP) THEN PRINT FP; "*";: RETURN

530 IF N <> FP AND N <> 1 THEN PRINT FP; "*";: RETURN

540 PRINT FP;: RETURN

545 REM RANGE OF NUMBERS ENTRY

550 PRINT: PRINT: PRINT: INPUT "ENTER START NUMBER"; SN: N1 = SN

560 IF SN < 1 OR INT(SN) <> SN THEN PRINT: PRINT S$: GOTO 550

570 PRINT: PRINT: PRINT: INPUT "ENTER ENDING NUMBER (< 10,000,000)"; EN

580 IF EN < 1 OR INT(EN) <> EN THEN PRINT: PRINT S$: GOTO 570

590 IF EN < SN THEN: PRINT: PRINT E$: GOTO 550

600 R = SN: RETURN

605 REM FACTOR FINDER-SCREEN

610 N = R: N1 = N: Z = 0

620 FOR FP = 2 TO SQR(N)

630 IF N / FP = INT(N / FP) THEN GOSUB 510: Z = 1: GOTO 620

650 NEXT: IF N <> 1 THEN PRINT N; "="; N1: GOTO 670

660 PRINT N; "="; N1

670 R = R + 1: IF R > EN THEN RETURN

680 GOTO 610

695 REM PRIME FINDER

700 N = R: N1 = N: IF N = 2 THEN GOTO 740

705 IF N = 1 THEN X = 1: NN = 1: GOTO 740

710 FOR FP = 2 TO SQR(N)

720 IF N / FP = INT(N / FP) THEN X = 1: GOTO 750

730 NEXT

740 IF N <> 1 THEN GOSUB 1200: GOTO 750

750 R = R + 1: IF R > EN THEN RETURN

760 GOTO 700

765 REM END OF OPTION SELECT

770 PRINT: PRINT: INPUT "TYPE Q TO QUIT OR M TO RETURN TO THE MAIN MENU"; Y$

780 IF Y$ = "Q" OR Y$ = "q" THEN 1150

790 IF Y$ = "M" OR Y$ = "m" THEN 90

800 Y$ = "": PRINT: GOTO 770

805 REM FACTORS OF ONE NUMBER

810 CLS: PRINT: PRINT: PRINT "FIND THE FACTORS OF A NUMBER"

820 PRINT: PRINT: PRINT: INPUT "TYPE S FOR SCREEN OR P FOR PRINTER"; T$

830 IF T$ = "S" OR T$ = "s" THEN GOTO 860

840 IF T$ = "P" OR T$ = "p" THEN GOTO 910

850 GOTO 810

860 GOSUB 1120

870 CLS: PRINT: PRINT: PRINT: PRINT "FINDING THE FACTORS OF THE NUMBER"

880 PRINT NN

890 GOSUB 610

900 PRINT: PRINT "FINISHED": GOTO 770

910 GOSUB 1120

920 LPRINT "FACTORS OF THE NUMBER"; NN: LPRINT

925 PRINT "FACTORS OF THE NUMBER"; NN: PRINT

940 GOSUB 1300

950 LPRINT: LPRINT "FINISHED": PRINT: PRINT "FINISHED": GOTO 770

960 CLS: PRINT: PRINT: PRINT: PRINT "TEST A NUMBER FOR PRIME": X = 0

970 PRINT: PRINT: PRINT: INPUT "TYPE S FOR SCREEN OR P FOR PRINTER"; T$

980 IF T$ = "S" OR T$ = "s" THEN GOTO 1010

990 IF T$ = "P" OR T$ = "p" THEN GOTO 1060

1000 GOTO 960

1010 GOSUB 1120

1020 CLS: PRINT: PRINT: PRINT "TESTING THE NUMBER"; NN; "FOR PRIME": PRINT: PRINT

1030 GOSUB 700: IF X <> 0 THEN PRINT NN; "NOT PRIME": GOTO 1050

1040 PRINT "IS PRIME"

1050 PRINT: R = NN: GOSUB 610: GOTO 770

1060 GOSUB 1120

1070 LPRINT "TESTING NUMBER"; NN; "FOR PRIME": LPRINT

1075 PRINT "TESTING NUMBER"; NN; "FOR PRIME": PRINT

1090 GOSUB 700: IF X <> 0 THEN LPRINT NN; "NOT PRIME": IF X <> 0 THEN PRINT NN; "NOT PRIME": GOTO 1110

1100 LPRINT NN; "IS PRIME": PRINT NN; "IS PRIME"

1110 LPRINT: LPRINT: LPRINT "FINISHED": PRINT: PRINT: PRINT "FINISHED": GOTO 770

1115 REM SINGLE NUMBER ENTRY

1120 PRINT: PRINT: PRINT: INPUT "ENTER NUMBER (< 10,000,000)"; NN: N1 = NN

1130 IF NN < 1 OR INT(NN) <> NN THEN PRINT: PRINT S$: GOTO 1120

1140 R = NN: EN = NN: RETURN

1150 CLS: PRINT: PRINT: PRINT: PRINT "THANK YOU FOR USING FACTOR/PRIME FINDER":

1151 PRINT: PRINT " (C) JULY 1996, MARCH 2017 By William B. Brown":

1152 PRINT " WBBROWN11@GMAIL.COM":

1154 PRINT " This program CANNOT be sold for any purpose without the EXPRESS";

1155 PRINT " written permission of the author.";

1156 PRINT " All rights reserved.": END

1200 IF SP = 0 THEN PRINT N; " ";: RETURN

1210 LPRINT N; " ";: PRINT N; " ";: RETURN

1295 REM FACTOR FINDER-PRINTER

1300 N = R: N1 = N: Z = 0

1320 FOR FP = 2 TO SQR(N)

1330 IF N / FP = INT(N / FP) THEN GOSUB 1510: Z = 1: GOTO 1320

1350 NEXT: IF N <> 1 THEN LPRINT N; "="; N1: PRINT N; "="; N1: GOTO 1370

1360 LPRINT N; "="; N1: PRINT N; "="; N1

1370 R = R + 1: IF R > EN THEN RETURN

1380 GOTO 1300

1510 IF FP <> 2 THEN LPRINT FP; "*";: IF FP <> 2 THEN PRINT FP; "*";: N = N / FP: RETURN

1520 N = N / FP: IF N / FP = INT(N / FP) THEN LPRINT FP; "*";: IF N / FP = INT(N / FP) THEN PRINT FP; "*";: RETURN

1530 IF N <> FP AND N <> 1 THEN LPRINT FP; "*";: IF N <> FP AND N <> 1 THEN PRINT FP; "*";: RETURN

1540 LPRINT FP;: PRINT FP;: RETURN