123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- * factor an arbitrarily large positive integer
- *
- * Copyright (C) 1999 by Brian Raiter
- * under the GNU General Public License
- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-
- *
- * read in the number
- *
- <<<<<<<<<+
- [-[>>>>>>>>>>][-]<<<<<<<<<<[[->>>>>>>>>>+<<<<<<<<<<]<<<<<<<<<<]
- >>>>>>>>>>,----------]
- >>>>>>>>>>[------------------------------------->>>>>>>>>->]
- <[+>[>>>>>>>>>+>]<-<<<<<<<<<<]-
- *
- * display the number and initialize the loop variable to two
- *
- [>++++++++++++++++++++++++++++++++++++++++++++++++.
- ------------------------------------------------<<<<<<<<<<<]
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
- --------------------------.[-]
- >>>>>>>>>>>>++<<<<+
- *
- * the main loop
- *
- [ [-]>>
- *
- * make copies of the number and the loop variable
- *
- [>>>>[-]>[-]>[-]>[-]
- >[-]>[-]
- <<<<<<<[->>>+>+<<<<]>>>>>>>>]
- <<<<<<<<<<[>>>>>>[-<<<<+>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>>
- [>[->>>+>>+<<<<<]>>>>>>>>>]
- <<<<<<<<<<[>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>>
- *
- * divide the number by the loop variable
- *
- [>>>[-]>>>[-]>[-]>>>] initialize
- <<<<<<<<<<[<<<<<<<<<<]
- >>>>>>>>>[-]>>>>>>>+<<<<<<<<[+]+
- [ ->> double divisor until above dividend
- [>>>>>>[->++<]>>>>]<<<<<<<<<<
- [>>>>>>>>[-]>[-]
- <<<<[->>>++<<<]<<<<<<<<<<<<<<<]>>>>>>>>>>
- [>>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<
- [->--------->>>>>>>>>+<<<<<<<<<<[->+<]]]]]]]]]]]>>]
- <<<<<<<<<<[>>>>>>>>>[-<+<<<+>>>>]<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>
- [>>>>>>>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>
- [-<--------->>>>>>>>>>>+<<<<<<<<<<[-<+>]]]]]]]]]]]>>>]
- <<<<<<<<<<
- [>>>>[->>>+>>+<<<<<]<<<<<<<<<<<<<<]
- >>>>>>>>>>[>>>>>>>[-<<<+>>>]>>>]<<<<<<<<<<
- [>>>>>>>>[->-<]>
- [<<<<<<<<<[<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<]
- >>>>>>>>>>>>>>>>>>>]
- <<<<<<<<<<<<<<<<<<<]
- >>>>>>>>>[+[+[+[+[+[+[+[+[+[+[[-]<+>]]]]]]]]]]]<
- ]
- >>>>>>>>
- [ subtract divisor from dividend
- <<<<<<
- [>>>>>>>>[-]>[-]<<<<<[->>>+>+<<<<]>>>>>>]<<<<<<<<<<
- [>>>>>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]<<<<<<<<<<<<<<<]>>>>>>>>>>
- [>>>>>>>>>[-<<<<+>>>>]>]<<<<<<<<<<
- [>>>>>>>>[-<->]<<<<<<<<<<<<<<<<<<]>>>>>>>>>>
- [>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<
- [++++++++++[+>-<]>>>>>>>>>>-<<<<<<<<<<]]]]]]]]]]]>>>]
- >>>>>>>+
- [ if difference is nonnegative then
- [-]<<<<<<<<<<<<<<<<< replace dividend and increment quotient
- [>>>>[-]>>>>[-<<<<+>>>>]<<[->>+<<]<<<<<<<<<<<<<<<<]>>>>>>>>>>
- [>>>>>>>>[->+<<<+>>]>>]<<<<<<<<<<
- [>>>[->>>>>>+<<<<<<]<<<<<<<<<<<<<]>>>>>>>>>>
- [>>>>>>>>>[-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
- [-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
- [-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
- [-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
- [-<<<<<<+>>>>>>[-<<<<<<--------->>>>>>>>>>>>>>>>+<<<<<<<<<<
- [-<<<<<<+>>>>>>]]]]]]]]]]]>]
- >>>>>>>
- ] halve divisor and loop until zero
- <<<<<<<<<<<<<<<<<[<<<<<<<<<<]>>>>>>>>>>
- [>>>>>>>>[-]<<[->+<]<[->>>+<<<]>>>>>]<<<<<<<<<<
- [+>>>>>>>[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
- [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
- [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
- [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
- [-<<<<<<<+>>>>>>>]]]]]]]]]<<<<<<<
- [->>>>>>>+<<<<<<<]-<<<<<<<<<<]
- >>>>>>>
- [-<<<<<<<<<<<+>>>>>>>>>>>]
- >>>[>>>>>>>[-<<<<<<<<<<<+++++>>>>>>>>>>>]>>>]<<<<<<<<<<
- [+>>>>>>>>[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
- [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
- [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
- [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
- [-<<<<<<<<+>>>>>>>>]]]]]]]]]<<<<<<<<
- [->>>>>>>>+<<<<<<<<]-<<<<<<<<<<]
- >>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]>>
- [>>>>>>>>[-<<<<<<<<<<<<<+++++>>>>>>>>>>>>>]>>]<<<<<<<<<<
- [<<<<<<<<<<]>>>>>>>>>>
- >>>>>>
- ]
- <<<<<<
- *
- * make copies of the loop variable and the quotient
- *
- [>>>[->>>>+>+<<<<<]>>>>>>>]
- <<<<<<<<<<
- [>>>>>>>[-<<<<+>>>>]<<<<<[->>>>>+>>+<<<<<<<]<<<<<<<<<<<<]
- >>>>>>>>>>[>>>>>>>[-<<<<<+>>>>>]>>>]<<<<<<<<<<
- *
- * break out of the loop if the quotient is larger than the loop variable
- *
- [>>>>>>>>>[-<->]<
- [<<<<<<<<
- [<<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<]
- >>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<]
- >>>>>>>>[>-<[+[+[+[+[+[+[+[+[+[[-]>+<]]]]]]]]]]]>+
- [ [-]
- *
- * partially increment the loop variable
- *
- <[-]+>>>>+>>>>>>>>[>>>>>>>>>>]<<<<<<<<<<
- *
- * examine the remainder for nonzero digits
- *
- [<<<<<<[<<<<[<<<<<<<<<<]>>>>+<<<<<<<<<<]<<<<]
- >>>>>>>>>>>>>>>>>>>>[>>>>>>>>>>]<<<<<<<<<<[<<<<<<<<<<]
- >>>>-
- [ [+]
- *
- * decrement the loop variable and replace the number with the quotient
- *
- >>>>>>>>-<<[>[-]>>[-<<+>>]>>>>>>>]<<<<<<<<<<
- *
- * display the loop variable
- *
- [+>>[>>>>>>>>+>>]<<-<<<<<<<<<<]-
- [>>++++++++++++++++++++++++++++++++++++++++++++++++.
- ------------------------------------------------<<<<<<<<<<<<]
- ++++++++++++++++++++++++++++++++.[-]>>>>
- ]
- *
- * normalize the loop variable
- *
- >>>>>>
- [>>[->>>>>+<<<<<[->>>>>+<<<<<
- [->>>>>+<<<<<[->>>>>+<<<<<
- [->>>>>+<<<<<[->>>>>+<<<<<
- [->>>>>+<<<<<[->>>>>+<<<<<
- [->>>>>+<<<<<[->>>>>--------->>>>>+<<<<<<<<<<
- [->>>>>+<<<<<]]]]]]]]]]]>>>>>>>>]
- <<<<<<<<<<[>>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<<]
- >>>>>>>>>
- ]<
- ]>>
- *
- * display the number and end
- *
- [>>>>>>>>>>]<<<<<<<<<<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]-
- [>++++++++++++++++++++++++++++++++++++++++++++++++.<<<<<<<<<<<]
- ++++++++++.
|