def division(p,q): r=[] m=len(p) n=len(q) if(islesser(p,q)): r=[] else: i=m-n rest=p[0:i] temp=p[i:m] while(i>0): rest=p[0:i] x=smalldiv(temp,q) r[0:0]=x temp=trnctr(subtract(trnctr(temp),trnctr(multiply(x,q)))) temp[0:0]=[rest[i-1]] rest[i-1:]=[] i=i-1 x=smalldiv(temp,q) r[0:0]=x r=trnctr(r) return r
def bsearch(l,r,p,q): temp1=p[:] temp2=q[:] m=(l+r)/2 if(isgreater(p,multiply([r],q))): return [r] elif(isequal(p,multiply([r],q))): return [r] elif(l-r==1): return [l] elif(isequal(p,multiply([l],q))): return [l] elif(isgreater(multiply([l+1],q),p)): return [l] elif(isequal(multiply([m],q),p)): return [m] elif(isgreater(multiply([m],q),p)): return bsearch(l,m,p,q) else: return bsearch(m,r,p,q)