Created
August 28, 2024 04:38
-
-
Save xacrimon/cda4359ffdd65192e474e01b6e1eaef9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* 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 | |
* | |
[>>>>>>>>>>]<<<<<<<<<<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]- | |
[>++++++++++++++++++++++++++++++++++++++++++++++++.<<<<<<<<<<<] | |
++++++++++. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment