# Division algorithm in one variable

Hi! I'm trying to implement the division algorithm 'by hand' (yes, I know the existence of f.maxima_methods().divide(g))

So far I've came up with this:

def div(f,g):
q==0; r==f;
while r != 0 and g.lt().divides(r.lt()):
q==q+r.lt()/g.lt()
r==r-(r.lt()/g.lt())*g
return q,r


but I'm getting an error on the "while" line. I'm following Ideals, Varieties and Algorithms by Cox (page 39 of the book), and they insert a "do" at the end of the while line, but I'm getting an "invalid syntax" error there. I'm pretty inexperienced with coding, and even more with Python/Sage (I've only taken a numerical methods course with Fortran).

I've gotten this "far" reading the book + documentation. Any ideas on how to proceed here?

edit retag close merge delete

Sort by » oldest newest most voted

In Python (the programming language Sage uses),

• assignment uses =, while == is to test equality
• indentation is syntax, and in particular
• the content of a while loop is everything that is indented after :.

def div(f, g):
q = 0
r = f
while r != 0 and g.lt().divides(r.lt()):
q = q + r.lt() // g.lt()
r = r - (r.lt() // g.lt()) * g
return q, r


Then you can use the function as follows.

Define a polynomial ring and two polynomials:

sage: R.<x> = QQ[]
sage: f = x^5 + x^3 + 2
sage: g = x^2 + 1


Apply the function:

sage: div(f, g)
(x^3, 2)

more

Hi! After playing and reading for a while after posting the question I managed to make it look similar to yours, but still wasn't compiling correctly. Now I see why

Thanks a ton, mate!!