update hensel.py
This commit is contained in:
parent
058b45976f
commit
a3e31fb0db
2 changed files with 13 additions and 6 deletions
11
hensel.py
11
hensel.py
|
@ -19,11 +19,16 @@ class PAdicPoly(PAdic):
|
||||||
|
|
||||||
# take care of trailing zeros
|
# take care of trailing zeros
|
||||||
digit = self.root
|
digit = self.root
|
||||||
|
self.val = str(digit)
|
||||||
|
self.exp = self.p
|
||||||
while digit == 0:
|
while digit == 0:
|
||||||
digit = self._nextdigit()
|
|
||||||
self.order += 1
|
self.order += 1
|
||||||
self.prec += 1
|
digit = self._nextdigit()
|
||||||
|
# self.prec += 1
|
||||||
|
|
||||||
def _nextdigit(self):
|
def _nextdigit(self):
|
||||||
self.root = ModP(self.p ** (self.order + 2), self.root)
|
self.root = ModP(self.exp * self.p, self.root)
|
||||||
self.root = self.root - self.poly(self.root) / self.deriv(self.root) # coercions automatically taken care of
|
self.root = self.root - self.poly(self.root) / self.deriv(self.root) # coercions automatically taken care of
|
||||||
|
digit = self.root // self.exp
|
||||||
|
self.exp *= self.p
|
||||||
|
return digit
|
6
poly.py
6
poly.py
|
@ -26,6 +26,8 @@ class Poly:
|
||||||
return str(self)
|
return str(self)
|
||||||
|
|
||||||
# arithmetic
|
# arithmetic
|
||||||
|
def __neg__(self):
|
||||||
|
return Poly({(i, -self.coeffs[i]) for i in self.coeffs})
|
||||||
def __add__(self, other):
|
def __add__(self, other):
|
||||||
if not isinstance(other, Poly):
|
if not isinstance(other, Poly):
|
||||||
other = Poly(other)
|
other = Poly(other)
|
||||||
|
@ -41,11 +43,11 @@ class Poly:
|
||||||
def __sub__(self, other):
|
def __sub__(self, other):
|
||||||
if not isinstance(other, Poly):
|
if not isinstance(other, Poly):
|
||||||
other = Poly(other)
|
other = Poly(other)
|
||||||
return self.__add__(other._neg())
|
return self.__add__(other.__neg__())
|
||||||
def __rsub__(self, other):
|
def __rsub__(self, other):
|
||||||
if not isinstance(other, Poly):
|
if not isinstance(other, Poly):
|
||||||
other = Poly(other)
|
other = Poly(other)
|
||||||
return other.__add__(self._neg())
|
return other.__add__(self.__neg__())
|
||||||
|
|
||||||
def __mul__(self, other):
|
def __mul__(self, other):
|
||||||
if not isinstance(other, Poly):
|
if not isinstance(other, Poly):
|
||||||
|
|
Loading…
Reference in a new issue