本文整理汇总了Python中sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing.factor_mod方法的典型用法代码示例。如果您正苦于以下问题:Python PolynomialRing.factor_mod方法的具体用法?Python PolynomialRing.factor_mod怎么用?Python PolynomialRing.factor_mod使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing
的用法示例。
在下文中一共展示了PolynomialRing.factor_mod方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: Polynomial_padic_capped_relative_dense
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import factor_mod [as 别名]
#.........这里部分代码省略.........
sage: K = Qp(5)
sage: R.<t> = K[]
sage: f = 5 + 3*t + t^4 + 25*t^10
sage: f.newton_polygon()
Finite Newton polygon with 4 vertices: (0, 1), (1, 0), (4, 0), (10, 2)
Here is an example where the computation fails because precision is
not sufficient::
sage: g = f + K(0,0)*t^4; g
(5^2 + O(5^22))*t^10 + (O(5^0))*t^4 + (3 + O(5^20))*t + (5 + O(5^21))
sage: g.newton_polygon()
Traceback (most recent call last):
...
PrecisionError: The coefficient of t^4 has not enough precision
TESTS::
sage: (5*f).newton_polygon()
Finite Newton polygon with 4 vertices: (0, 2), (1, 1), (4, 1), (10, 3)
AUTHOR:
- Xavier Caruso (2013-03-20)
"""
if self._valaddeds is None:
self._comp_valaddeds()
from sage.geometry.newton_polygon import NewtonPolygon
valbase = self._valbase
polygon = NewtonPolygon([(x, val + valbase)
for x, val in enumerate(self._valaddeds)])
polygon_prec = NewtonPolygon([(x, val + valbase)
for x, val in enumerate(self._relprecs)])
vertices = polygon.vertices(copy=False)
vertices_prec = polygon_prec.vertices(copy=False)
# The two following tests should always fail (i.e. the corresponding errors
# should never be raised). However, it's probably safer to keep them.
if vertices[0][0] > vertices_prec[0][0]:
raise PrecisionError("The constant coefficient has not enough precision")
if vertices[-1][0] < vertices_prec[-1][0]:
raise PrecisionError("The leading coefficient has not enough precision")
for (x, y) in vertices:
if polygon_prec(x) <= y:
raise PrecisionError("The coefficient of %s^%s has not enough precision" % (self.parent().variable_name(), x))
return polygon
def newton_slopes(self, repetition=True):
"""
Returns a list of the Newton slopes of this polynomial.
These are the valuations of the roots of this polynomial.
If ``repetition`` is ``True``, each slope is repeated a number of
times equal to its multiplicity. Otherwise it appears only one time.
INPUT:
- ``repetition`` -- boolean (default ``True``)
OUTPUT:
- a list of rationals
EXAMPLES::
sage: K = Qp(5)
sage: R.<t> = K[]
sage: f = 5 + 3*t + t^4 + 25*t^10
sage: f.newton_polygon()
Finite Newton polygon with 4 vertices: (0, 1), (1, 0), (4, 0), (10, 2)
sage: f.newton_slopes()
[1, 0, 0, 0, -1/3, -1/3, -1/3, -1/3, -1/3, -1/3]
sage: f.newton_slopes(repetition=False)
[1, 0, -1/3]
AUTHOR:
- Xavier Caruso (2013-03-20)
"""
polygon = self.newton_polygon()
return [-s for s in polygon.slopes(repetition=repetition)]
def hensel_lift(self, a):
raise NotImplementedError
def factor_mod(self):
r"""
Returns the factorization of self modulo p.
"""
self._normalize()
if self._valbase < 0:
raise ValueError("Polynomial does not have integral coefficients")
elif self._valbase > 0:
raise ValueError("Factorization of the zero polynomial not defined")
elif min(self._relprecs) <= 0:
raise PrecisionError("Polynomial is not known to high enough precision")
return self._poly.factor_mod(self.base_ring().prime())