This reverts commit
4e4efc9eff5c77a2ca19002b1dfa45598e974c54. Example
4 in the text doesn't work with this implementation, but it does with
my original one. Let's stick with slow and correct, for now.
qs = [R.zero()]*s
while p != R.zero():
qs = [R.zero()]*s
while p != R.zero():
- i = 0
- division_occurred = false
- while i < s:
+ for i in range(0,s):
+ division_occurred = false
# If gs[i].lt() divides p.lt(), then this remainder will
# be zero and the quotient will be in R (and not the
# fraction ring, which is important).
# If gs[i].lt() divides p.lt(), then this remainder will
# be zero and the quotient will be in R (and not the
# fraction ring, which is important).
qs[i] += factor
p -= factor*gs[i]
division_occurred = true
qs[i] += factor
p -= factor*gs[i]
division_occurred = true
- # Don't increment "i" here because we want to try
- # again with this "denominator" g[i]. We might
- # get another factor out of it, but we know that
- # we can't get another factor out of an *earlier*
- # denominator g[i-k] for some k.
- else:
- i += 1
if not division_occurred:
r += p.lt()
if not division_occurred:
r += p.lt()