1+ #! /bin/bf
2+
3+ * Factor an Arbitrarily Large Positive Integer
4+ *
5+ * Copyright (C) 1999 by Brian Raiter
6+ * Under the GNU General Public License
7+
8+ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -
9+
10+ *
11+ * read in the number
12+ *
13+
14+ <<<<<<<<< +
15+ [- [>>>>>>>>>> ][- ]<<<<<<<<<< [[- >>>>>>>>>> + <<<<<<<<<< ]<<<<<<<<<< ]
16+ >>>>>>>>>> , ---------- ]
17+ >>>>>>>>>> [------------------------------------- >>>>>>>>> - > ]
18+ < [+ > [>>>>>>>>> + > ]< - <<<<<<<<<< ]-
19+
20+ *
21+ * display the number and initialize the loop variable to two
22+ *
23+
24+ [> ++++++++++++++++++++++++++++++++++++++++++++++++ .
25+ ------------------------------------------------ <<<<<<<<<<< ]
26+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .
27+ -------------------------- . [- ]
28+ >>>>>>>>>>>> ++ <<<< +
29+
30+ *
31+ * the main loop
32+ *
33+
34+ [ [- ]>>
35+
36+ *
37+ * make copies of the number and the loop variable
38+ *
39+
40+ [>>>> [- ]> [- ]> [- ]> [- ]
41+ > [- ]> [- ]
42+ <<<<<<< [- >>> + > + <<<< ]>>>>>>>> ]
43+ <<<<<<<<<< [>>>>>> [- <<<< + >>>> ]<<<<<<<<<<<<<<<< ]>>>>>>>>>>
44+ [> [- >>> + >> + <<<<< ]>>>>>>>>> ]
45+ <<<<<<<<<< [>>>>>> [- <<<<< + >>>>> ]<<<<<<<<<<<<<<<< ]>>>>>>>>>>
46+
47+ *
48+ * divide the number by the loop variable
49+ *
50+
51+ [>>> [- ]>>> [- ]> [- ]>>> ] initialize
52+ <<<<<<<<<< [<<<<<<<<<< ]
53+ >>>>>>>>> [- ]>>>>>>> + <<<<<<<< [+ ]+
54+ [ - >> double divisor until above dividend
55+ [>>>>>> [- > ++ < ]>>>> ]<<<<<<<<<<
56+ [>>>>>>>> [- ]> [- ]
57+ <<<< [- >>> ++ <<< ]<<<<<<<<<<<<<<< ]>>>>>>>>>>
58+ [>>>>>>>> [- > + < [- > + < [- > + < [- > + < [- > + < [- > + < [- > + < [- > + < [- > + <
59+ [- > --------- >>>>>>>>> + <<<<<<<<<< [- > + < ]]]]]]]]]]]>> ]
60+ <<<<<<<<<< [>>>>>>>>> [- < + <<< + >>>> ]<<<<<<<<<<<<<<<<<<< ]>>>>>>>>>>
61+ [>>>>>>> [- < + > [- < + > [- < + > [- < + > [- < + > [- < + > [- < + > [- < + > [- < + >
62+ [- < --------- >>>>>>>>>>> + <<<<<<<<<< [- < + > ]]]]]]]]]]]>>> ]
63+ <<<<<<<<<<
64+ [>>>> [- >>> + >> + <<<<< ]<<<<<<<<<<<<<< ]
65+ >>>>>>>>>> [>>>>>>> [- <<< + >>> ]>>> ]<<<<<<<<<<
66+ [>>>>>>>> [- > - < ]>
67+ [<<<<<<<<< [< [- ]>>>>>>>>>> [- <<<<<<<<<< + >>>>>>>>>> ]<<<<<<<<<<<<<<<<<<< ]
68+ >>>>>>>>>>>>>>>>>>> ]
69+ <<<<<<<<<<<<<<<<<<< ]
70+ >>>>>>>>> [+ [+ [+ [+ [+ [+ [+ [+ [+ [+ [[- ]< + > ]]]]]]]]]]]<
71+ ]
72+ >>>>>>>>
73+ [ subtract divisor from dividend
74+ <<<<<<
75+ [>>>>>>>> [- ]> [- ]<<<<< [- >>> + > + <<<< ]>>>>>> ]<<<<<<<<<<
76+ [>>>>>>>> [- <<<< + >>>> ]<<< [- >>> + > + <<<< ]<<<<<<<<<<<<<<< ]>>>>>>>>>>
77+ [>>>>>>>>> [- <<<< + >>>> ]> ]<<<<<<<<<<
78+ [>>>>>>>> [- < - > ]<<<<<<<<<<<<<<<<<< ]>>>>>>>>>>
79+ [>>>>>>> [- > + < [- > + < [- > + < [- > + < [- > + < [- > + < [- > + < [- > + < [- > + < [- > + <
80+ [++++++++++ [+ > - < ]>>>>>>>>>> - <<<<<<<<<< ]]]]]]]]]]]>>> ]
81+ >>>>>>> +
82+ [ if difference is nonnegative then
83+ [- ]<<<<<<<<<<<<<<<<< replace dividend and increment quotient
84+ [>>>> [- ]>>>> [- <<<< + >>>> ]<< [- >> + << ]<<<<<<<<<<<<<<<< ]>>>>>>>>>>
85+ [>>>>>>>> [- > + <<< + >> ]>> ]<<<<<<<<<<
86+ [>>> [- >>>>>> + <<<<<< ]<<<<<<<<<<<<< ]>>>>>>>>>>
87+ [>>>>>>>>> [- <<<<<< + >>>>>> [- <<<<<< + >>>>>>
88+ [- <<<<<< + >>>>>> [- <<<<<< + >>>>>>
89+ [- <<<<<< + >>>>>> [- <<<<<< + >>>>>>
90+ [- <<<<<< + >>>>>> [- <<<<<< + >>>>>>
91+ [- <<<<<< + >>>>>> [- <<<<<< --------- >>>>>>>>>>>>>>>> + <<<<<<<<<<
92+ [- <<<<<< + >>>>>> ]]]]]]]]]]]> ]
93+ >>>>>>>
94+ ] halve divisor and loop until zero
95+ <<<<<<<<<<<<<<<<< [<<<<<<<<<< ]>>>>>>>>>>
96+ [>>>>>>>> [- ]<< [- > + < ]< [- >>> + <<< ]>>>>> ]<<<<<<<<<<
97+ [+ >>>>>>> [- <<<<<<< + >>>>>>> [- <<<<<<< - >>>>>> + >
98+ [- <<<<<<< + >>>>>>> [- <<<<<<< - >>>>>> + >
99+ [- <<<<<<< + >>>>>>> [- <<<<<<< - >>>>>> + >
100+ [- <<<<<<< + >>>>>>> [- <<<<<<< - >>>>>> + >
101+ [- <<<<<<< + >>>>>>> ]]]]]]]]]<<<<<<<
102+ [- >>>>>>> + <<<<<<< ]- <<<<<<<<<< ]
103+ >>>>>>>
104+ [- <<<<<<<<<<< + >>>>>>>>>>> ]
105+ >>> [>>>>>>> [- <<<<<<<<<<< +++++ >>>>>>>>>>> ]>>> ]<<<<<<<<<<
106+ [+ >>>>>>>> [- <<<<<<<< + >>>>>>>> [- <<<<<<<< - >>>>> + >>>
107+ [- <<<<<<<< + >>>>>>>> [- <<<<<<<< - >>>>> + >>>
108+ [- <<<<<<<< + >>>>>>>> [- <<<<<<<< - >>>>> + >>>
109+ [- <<<<<<<< + >>>>>>>> [- <<<<<<<< - >>>>> + >>>
110+ [- <<<<<<<< + >>>>>>>> ]]]]]]]]]<<<<<<<<
111+ [- >>>>>>>> + <<<<<<<< ]- <<<<<<<<<< ]
112+ >>>>>>>> [- <<<<<<<<<<<<< + >>>>>>>>>>>>> ]>>
113+ [>>>>>>>> [- <<<<<<<<<<<<< +++++ >>>>>>>>>>>>> ]>> ]<<<<<<<<<<
114+ [<<<<<<<<<< ]>>>>>>>>>>
115+ >>>>>>
116+ ]
117+ <<<<<<
118+
119+ *
120+ * make copies of the loop variable and the quotient
121+ *
122+
123+ [>>> [- >>>> + > + <<<<< ]>>>>>>> ]
124+ <<<<<<<<<<
125+ [>>>>>>> [- <<<< + >>>> ]<<<<< [- >>>>> + >> + <<<<<<< ]<<<<<<<<<<<< ]
126+ >>>>>>>>>> [>>>>>>> [- <<<<< + >>>>> ]>>> ]<<<<<<<<<<
127+
128+ *
129+ * break out of the loop if the quotient is larger than the loop variable
130+ *
131+
132+ [>>>>>>>>> [- < - > ]<
133+ [<<<<<<<<
134+ [<< [- ]>>>>>>>>>> [- <<<<<<<<<< + >>>>>>>>>> ]<<<<<<<<<<<<<<<<<< ]
135+ >>>>>>>>>>>>>>>>>> ]<<<<<<<<<<<<<<<<<< ]
136+ >>>>>>>> [> - < [+ [+ [+ [+ [+ [+ [+ [+ [+ [[- ]> + < ]]]]]]]]]]]> +
137+
138+ [ [- ]
139+
140+ *
141+ * partially increment the loop variable
142+ *
143+
144+ < [- ]+ >>>> + >>>>>>>> [>>>>>>>>>> ]<<<<<<<<<<
145+
146+ *
147+ * examine the remainder for nonzero digits
148+ *
149+
150+ [<<<<<< [<<<< [<<<<<<<<<< ]>>>> + <<<<<<<<<< ]<<<< ]
151+ >>>>>>>>>>>>>>>>>>>> [>>>>>>>>>> ]<<<<<<<<<< [<<<<<<<<<< ]
152+ >>>> -
153+
154+ [ [+ ]
155+
156+ *
157+ * decrement the loop variable and replace the number with the quotient
158+ *
159+
160+ >>>>>>>> - << [> [- ]>> [- << + >> ]>>>>>>> ]<<<<<<<<<<
161+
162+ *
163+ * display the loop variable
164+ *
165+
166+ [+ >> [>>>>>>>> + >> ]<< - <<<<<<<<<< ]-
167+ [>> ++++++++++++++++++++++++++++++++++++++++++++++++ .
168+ ------------------------------------------------ <<<<<<<<<<<< ]
169+ ++++++++++++++++++++++++++++++++ . [- ]>>>>
170+
171+ ]
172+
173+ *
174+ * normalize the loop variable
175+ *
176+
177+ >>>>>>
178+ [>> [- >>>>> + <<<<< [- >>>>> + <<<<<
179+ [- >>>>> + <<<<< [- >>>>> + <<<<<
180+ [- >>>>> + <<<<< [- >>>>> + <<<<<
181+ [- >>>>> + <<<<< [- >>>>> + <<<<<
182+ [- >>>>> + <<<<< [- >>>>> --------- >>>>> + <<<<<<<<<<
183+ [- >>>>> + <<<<< ]]]]]]]]]]]>>>>>>>> ]
184+ <<<<<<<<<< [>>>>>>> [- <<<<< + >>>>> ]<<<<<<<<<<<<<<<<< ]
185+ >>>>>>>>>
186+
187+ ]<
188+
189+ ]>>
190+
191+ *
192+ * display the number and end
193+ *
194+
195+ [>>>>>>>>>> ]<<<<<<<<<< [+ > [>>>>>>>>> + > ]< - <<<<<<<<<< ]-
196+ [> ++++++++++++++++++++++++++++++++++++++++++++++++ . <<<<<<<<<<< ]
197+ ++++++++++ .
0 commit comments