--
-- based on Kilburn's Highest Factor Routine
--
https://www.computerhistory.org/revolution/birth-of-the-computer/4/87/360
--
01: LDN 24 -- \
02: SUB 22 -- | initialization:
03: STO 27 -- | $27 - initial subtraction step (a - 1)
04: LDN 27 -- | $26 - supplementary value -$27
05: STO 26 -- /
06: LDN 24 -- \
07: SUB 27 -- | subtraction loop
08: CMP -- | subtract $27 from `a` until negative
09: JRP 21 -- /
10: SUB 26 -- \
11: STO 25 -- | compare negative rest with -$27
12: LDN 25 -- | stop if equal, then $27 is the answer
13: CMP -- /
14: STOP -- stops when C=0, $27 (or $26) is the result
15: LDN 26 -- \
16: SUB 22 -- \
17: STO 27 -- | decrement $27
18: LDN 27 -- | jump to division by subtraction
19: STO 26 -- /
20: JMP 23 -- /
21: NUM -3 -- subtraction loop iteration jump
22: NUM 1 -- probe value decrement
23: NUM 5 -- subtraction loop absolute line number (preceeding one)
24: NUM -262144 -- -a ; a=2^18 -- value to factor in negated form
-- $25 register to negate result after subtraction loop to compare with iteration step
-- $26 supplementary value -$27
-- $27 iteration step