DELETE PRIMES; REDEFINE PROCEDURE PRIMES ! ! Factor a number into Primes ! ! B. Z. Lederman ! DECLARE X USAGE DOUBLE. DECLARE Y USAGE DOUBLE. DECLARE NUMBER USAGE QUAD QUERY_HEADER "". DECLARE COPY USAGE QUAD QUERY_HEADER "". DECLARE FACTOR USAGE QUAD QUERY_HEADER "". DECLARE END_TEST USAGE QUAD. DECLARE COUNTER USAGE INTEGER QUERY_HEADER "". DECLARE PRINT_HEADER USAGE INTEGER. DECLARE FOREVER USAGE INTEGER. FOREVER = 1 ! WHILE (FOREVER = 1) BEGIN NUMBER = 0 WHILE (NUMBER = 0) BEGIN NUMBER = *."an integer number to be factored (0 to exit)" ! IF (NUMBER LE 0) THEN ABORT IF (NUMBER = 2) THEN BEGIN PRINT " 2 is a prime number" NUMBER = 0 END END ! COPY = NUMBER PRINT_HEADER = 0 FACTOR = 2 :FACTORIAL ! Check to see if 2 is a factor of the number X = COPY ! code was X = FLOAT(COPY) for explicit conversion Y = FN$SQRT(X) ! guess at range to test END_TEST = FN$NINT(Y) ! ! Test a range of possible factors ! FACTOR = 3 ! first possible factor WHILE (FACTOR LE END_TEST) BEGIN :FACTORIAL FACTOR = FACTOR + 2 ! check odd numbers only END ! IF (COPY NE 1) THEN BEGIN ! Have we factored it down as far as it can go? IF (PRINT_HEADER = 0) THEN ! No, it must be prime BEGIN PRINT COL 2, " The number", COPY USING ZZZ,ZZZ,ZZZ,ZZ9, "is prime" END ELSE PRINT COL 6, COPY (-) USING ZZZ,ZZZ,ZZZ,ZZ9, SPACE 8, "1" ! Yes, end-of-the-line. END END END_PROCEDURE DELETE FACTORIAL; REDEFINE PROCEDURE FACTORIAL ! ! Routine to check a number for factors ! All variables must be declared elsewhere (used by PRIMES) ! COUNTER = 0; ! WHILE (FN$MOD(COPY, FACTOR) = 0) BEGIN ! Does FACTOR divide evenly into COPY? COPY = COPY / FACTOR ! Yes, we've found a factor COUNTER = COUNTER + 1 ! see how many times it factors END ! IF (COUNTER GE 1) THEN BEGIN ! If FACTOR is a factor of COPY IF (PRINT_HEADER = 0) THEN BEGIN ! Print the header if we haven't yet done so */ PRINT_HEADER = 1 PRINT COL 2, "The prime factors of ", NUMBER USING ZZZ,ZZZ,ZZZ,ZZ9, " are:" PRINT COL 2, " Prime to the Factor" PRINT COL 2, "-----------------------------------------", SKIP END PRINT COL 2, FACTOR USING ZZZ,ZZZ,ZZZ,ZZZ,ZZ9, SPACE 2, COUNTER USING ZZZ,ZZ9 END END_PROCEDURE