本文整理汇总了Python中sage.rings.arith.factor函数的典型用法代码示例。如果您正苦于以下问题:Python factor函数的具体用法?Python factor怎么用?Python factor使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了factor函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: mumu
def mumu(N):
"""
Return 0 if any cube divides `N`. Otherwise return
`(-2)^v` where `v` is the number of primes that
exactly divide `N`.
This is similar to the Moebius function.
INPUT:
- ``N`` - an integer at least 1
OUTPUT: Integer
EXAMPLES::
sage: from sage.modular.arithgroup.congroup_gammaH import mumu
sage: mumu(27)
0
sage: mumu(6*25)
4
sage: mumu(7*9*25)
-2
sage: mumu(9*25)
1
"""
if N < 1:
raise ValueError, "N must be at least 1"
p = 1
for _,r in factor(N):
if r > 2:
return ZZ(0)
elif r == 1:
p *= -2
return ZZ(p)
示例2: multiplicative_order
def multiplicative_order(self):
r"""
Returns the *multiplicative* order of this element, which must be
nonzero.
EXAMPLES::
sage: from sage.rings.finite_rings.finite_field_ext_pari import FiniteField_ext_pari
sage: a = FiniteField_ext_pari(5**3, 'a').0
sage: a.multiplicative_order()
124
sage: a**124
1
"""
try:
return self.__multiplicative_order
except AttributeError:
if self.is_zero():
raise ArithmeticError("Multiplicative order of 0 not defined.")
n = self.parent().order() - 1
order = 1
for p, e in arith.factor(n):
# Determine the power of p that divides the order.
a = self**(n//(p**e))
while a != 1:
order *= p
a = a**p
self.__multiplicative_order = order
return order
示例3: coefficient_n_recursive
def coefficient_n_recursive(self, n):
r"""
Reimplement the recursive algorithm in sage modular/hecke/module.py
We do this because of a bug in sage with .eigenvalue()
"""
from sage.rings import arith
ev = self.eigenvalues
c2 = self._coefficients.get(2)
if c2 is not None:
K = c2.parent()
else:
if ev.max_coefficient_in_db() >= 2:
ev.init_dynamic_properties()
else:
raise StopIteration,"Newform does not have eigenvalue a(2)!"
self._coefficients[2]=ev[2]
K = ev[2].parent()
prod = K(1)
if K.absolute_degree()>1 and K.is_relative():
KZ = K.base_field()
else:
KZ = K
#emf_logger.debug("K= {0}".format(K))
F = arith.factor(n)
for p, r in F:
#emf_logger.debug("parent_char_val[{0}]={1}".format(p,self.parent.character_used_in_computation.value(p)))
#emf_logger.debug("char_val[{0}]={1}".format(p,self.character.value(p)))
(p, r) = (int(p), int(r))
pr = p**r
cp = self._coefficients.get(p)
# emf_logger.debug("c{0} = {1}".format(p,cp))
if cp is None:
if ev.has_eigenvalue(p):
cp = ev[p]
elif ev.max_coefficient_in_db() >= p:
ev.init_dynamic_properties()
cp = ev[p]
if cp is None:
raise IndexError,"p={0} is outside the range of computed primes (primes up to {1})! for label:{2}".format(p,max(ev.primes()),self.label)
if self._coefficients.get(pr) is None:
if r == 1:
c = cp
else:
eps = KZ(self.parent.character_used_in_computation.value(p))
# a_{p^r} := a_p * a_{p^{r-1}} - eps(p)p^{k-1} a_{p^{r-2}}
apr1 = self.coefficient_n_recursive(pr//p)
#ap = self.coefficient_n_recursive(p)
k = self.weight
apr2 = self.coefficient_n_recursive(pr//(p*p))
c = cp*apr1 - eps*(p**(k-1)) * apr2
#emf_logger.debug("c({0})={1}".format(pr,c))
#ev[pr]=c
self._coefficients[pr]=c
prod *= self._coefficients[pr]
return prod
示例4: create_key_and_extra_args
def create_key_and_extra_args(self, order, name=None, modulus=None, names=None, impl=None, proof=None, **kwds):
"""
EXAMPLES::
sage: GF.create_key_and_extra_args(9, 'a')
((9, ('a',), 'conway', None, '{}', 3, 2, True), {})
sage: GF.create_key_and_extra_args(9, 'a', foo='value')
((9, ('a',), 'conway', None, "{'foo': 'value'}", 3, 2, True), {'foo': 'value'})
"""
from sage.structure.proof.all import WithProof, arithmetic
if proof is None:
proof = arithmetic()
with WithProof("arithmetic", proof):
order = int(order)
if order <= 1:
raise ValueError("the order of a finite field must be > 1.")
if arith.is_prime(order):
name = None
modulus = None
p = integer.Integer(order)
n = integer.Integer(1)
elif arith.is_prime_power(order):
if not names is None:
name = names
name = normalize_names(1, name)
p, n = arith.factor(order)[0]
if modulus is None or modulus == "default":
if exists_conway_polynomial(p, n):
modulus = "conway"
else:
if p == 2:
modulus = "minimal_weight"
else:
modulus = "random"
elif modulus == "random":
modulus += str(random.randint(0, 1 << 128))
if isinstance(modulus, (list, tuple)):
modulus = FiniteField(p)["x"](modulus)
# some classes use 'random' as the modulus to
# generate a random modulus, but we don't want
# to cache it
elif sage.rings.polynomial.polynomial_element.is_Polynomial(modulus):
modulus = modulus.change_variable_name("x")
elif not isinstance(modulus, str):
raise ValueError("Modulus parameter not understood.")
else: # Neither a prime, nor a prime power
raise ValueError("the order of a finite field must be a prime power.")
return (order, name, modulus, impl, str(kwds), p, n, proof), kwds
示例5: factored_order
def factored_order(self):
"""
EXAMPLES::
sage: R = IntegerModRing(18)
sage: FF = IntegerModRing(17)
sage: R.factored_order()
2 * 3^2
sage: FF.factored_order()
17
"""
return factor(self.__order, int_=(self.__order < 2 ** 31))
示例6: irred
def irred(K, n):
F = []
p = K.characteristic()
for ell, exp in factor(n):
if ell == 2:
F.append(rand_irred(K, ell**exp))
elif ell.divides(p-1):
F.append(kummer(K, ell, exp))
elif ell.divides(p+1):
F.append(cheby(K, ell, exp))
else:
F.append(rand_irred(K, ell**exp))
return reduce(comp_prod, F)
示例7: factored_order
def factored_order(self):
"""
EXAMPLES::
sage: R = IntegerModRing(18)
sage: FF = IntegerModRing(17)
sage: R.factored_order()
2 * 3^2
sage: FF.factored_order()
17
"""
if self.__factored_order is not None:
return self.__factored_order
self.__factored_order = factor(self.__order, int_=(self.__order < 2**31))
return self.__factored_order
示例8: squarefree_part
def squarefree_part(x):
"""
Returns the square free part of `x`, i.e., a divisor
`z` such that `x = z y^2`, for a perfect square
`y^2`.
EXAMPLES::
sage: squarefree_part(100)
1
sage: squarefree_part(12)
3
sage: squarefree_part(10)
10
sage: squarefree_part(216r) # see #8976
6
::
sage: x = QQ['x'].0
sage: S = squarefree_part(-9*x*(x-6)^7*(x-3)^2); S
-9*x^2 + 54*x
sage: S.factor()
(-9) * (x - 6) * x
::
sage: f = (x^3 + x + 1)^3*(x-1); f
x^10 - x^9 + 3*x^8 + 3*x^5 - 2*x^4 - x^3 - 2*x - 1
sage: g = squarefree_part(f); g
x^4 - x^3 + x^2 - 1
sage: g.factor()
(x - 1) * (x^3 + x + 1)
"""
try:
return x.squarefree_part()
except AttributeError:
pass
from sage.rings.arith import factor
from sage.structure.all import parent
F = factor(x)
n = parent(x)(1)
for p, e in F:
if e%2 != 0:
n *= p
return n * F.unit()
示例9: factored_unit_order
def factored_unit_order(self):
"""
Returns a list of Factorization objects, each the factorization of the
order of the units in a `\ZZ / p^n \ZZ` component of this group (using
the Chinese Remainder Theorem).
EXAMPLES::
sage: R = Integers(8*9*25*17*29)
sage: R.factored_unit_order()
[2^2, 2 * 3, 2^2 * 5, 2^4, 2^2 * 7]
"""
ans = []
from sage.structure.factorization import Factorization
for p, e in self.factored_order():
ans.append(Factorization([(p,e-1)]) * factor(p-1, int_=(self.__order < 2**31)))
return ans
示例10: create_key_and_extra_args
def create_key_and_extra_args(self, order, name=None, modulus=None, names=None,
impl=None, proof=None, **kwds):
"""
EXAMPLES::
sage: GF.create_key_and_extra_args(9, 'a')
((9, ('a',), x^2 + 2*x + 2, None, '{}', 3, 2, True), {})
sage: GF.create_key_and_extra_args(9, 'a', foo='value')
((9, ('a',), x^2 + 2*x + 2, None, "{'foo': 'value'}", 3, 2, True), {'foo': 'value'})
"""
from sage.structure.proof.all import WithProof, arithmetic
if proof is None: proof = arithmetic()
with WithProof('arithmetic', proof):
order = int(order)
if order <= 1:
raise ValueError("the order of a finite field must be > 1.")
if arith.is_prime(order):
name = None
modulus = None
p = integer.Integer(order)
n = integer.Integer(1)
elif arith.is_prime_power(order):
if not names is None: name = names
name = normalize_names(1,name)
p, n = arith.factor(order)[0]
if modulus is None or isinstance(modulus, str):
# A string specifies an algorithm to find a suitable modulus.
if modulus == "default": # for backward compatibility
modulus = None
modulus = GF(p)['x'].irreducible_element(n, algorithm=modulus)
elif isinstance(modulus, (list, tuple)):
modulus = GF(p)['x'](modulus)
elif sage.rings.polynomial.polynomial_element.is_Polynomial(modulus):
modulus = modulus.change_variable_name('x')
else:
raise TypeError("wrong type for modulus parameter")
else:
raise ValueError("the order of a finite field must be a prime power.")
return (order, name, modulus, impl, str(kwds), p, n, proof), kwds
示例11: other_keys
def other_keys(self, key, K):
"""
EXAMPLES::
sage: key, extra = GF.create_key_and_extra_args(9, 'a'); key
(9, ('a',), x^2 + 2*x + 2, None, '{}', 3, 2, True)
sage: K = GF.create_object(0, key); K
Finite Field in a of size 3^2
sage: GF.other_keys(key, K)
[(9, ('a',), x^2 + 2*x + 2, None, '{}', 3, 2, True),
(9, ('a',), x^2 + 2*x + 2, 'givaro', '{}', 3, 2, True)]
"""
if len(key) == 5: # backward compat
order, name, modulus, impl, _ = key
p, n = arith.factor(order)[0]
proof = True
else:
order, name, modulus, impl, _, p, n, proof = key
from sage.structure.proof.all import WithProof
with WithProof('arithmetic', proof):
if K.degree() > 1:
modulus = K.modulus().change_variable_name('x')
new_keys = [(order, name, modulus, impl, _, p, n, proof)]
from finite_field_prime_modn import FiniteField_prime_modn
if isinstance(K, FiniteField_prime_modn):
impl = 'modn'
elif isinstance(K, FiniteField_givaro):
impl = 'givaro'
else:
from finite_field_ntl_gf2e import FiniteField_ntl_gf2e
from finite_field_ext_pari import FiniteField_ext_pari
from finite_field_pari_ffelt import FiniteField_pari_ffelt
if isinstance(K, FiniteField_ntl_gf2e):
impl = 'ntl'
elif isinstance(K, FiniteField_ext_pari):
impl = 'pari_mod'
elif isinstance(K, FiniteField_pari_ffelt):
impl = 'pari_ffelt'
new_keys.append( (order, name, modulus, impl, _, p, n, proof) )
return new_keys
示例12: clifford_conductor
def clifford_conductor(self):
"""
This is the product of all primes where the Clifford invariant is -1
Note: For ternary forms, this is the discriminant of the
quaternion algebra associated to the quadratic space
(i.e. the even Clifford algebra)
EXAMPLES::
sage: Q = QuadraticForm(ZZ, 3, [1, 0, -1, 2, -1, 5])
sage: Q.clifford_invariant(2)
1
sage: Q.clifford_invariant(37)
-1
sage: Q.clifford_conductor()
37
::
sage: DiagonalQuadraticForm(ZZ, [1, 1, 1]).clifford_conductor()
2
sage: QuadraticForm(ZZ, 3, [2, -2, 0, 2, 0, 5]).clifford_conductor()
30
For hyperbolic spaces, the clifford conductor is 1::
sage: H = QuadraticForm(ZZ, 2, [0, 1, 0])
sage: H.clifford_conductor()
1
sage: (H + H).clifford_conductor()
1
sage: (H + H + H).clifford_conductor()
1
sage: (H + H + H + H).clifford_conductor()
1
"""
D = self.disc()
return prod(filter(lambda p: self.clifford_invariant(p) == -1,
map(lambda x: x[0], factor(2 * self.level()))))
示例13: hasse_conductor
def hasse_conductor(self):
"""
This is the product of all primes where the Hasse invariant equals -1
EXAMPLES::
sage: Q = QuadraticForm(ZZ, 3, [1, 0, -1, 2, -1, 5])
sage: Q.hasse_invariant(2)
-1
sage: Q.hasse_invariant(37)
-1
sage: Q.hasse_conductor()
74
::
sage: DiagonalQuadraticForm(ZZ, [1, 1, 1]).hasse_conductor()
1
sage: QuadraticForm(ZZ, 3, [2, -2, 0, 2, 0, 5]).hasse_conductor()
10
"""
D = self.disc()
return prod([x[0] for x in factor(2 * self.level()) if self.hasse_invariant(x[0]) == -1])
示例14: hasse_conductor
def hasse_conductor(self):
"""
This is the product of all primes where the Hasse invariant equals -1
EXAMPLES::
sage: Q = QuadraticForm(ZZ, 3, [1, 0, -1, 2, -1, 5])
sage: Q.hasse_invariant(2)
-1
sage: Q.hasse_invariant(37)
-1
sage: Q.hasse_conductor()
74
::
sage: DiagonalQuadraticForm(ZZ, [1, 1, 1]).hasse_conductor()
1
sage: QuadraticForm(ZZ, 3, [2, -2, 0, 2, 0, 5]).hasse_conductor()
10
"""
D = self.disc()
return prod(filter(lambda(p):self.hasse_invariant(p)==-1, \
map(lambda(x):x[0],factor(2*self.level()))))
示例15: CohenOesterle
def CohenOesterle(eps, k):
r"""
Compute the Cohen-Oesterle function associate to eps, `k`.
This is a summand in the formula for the dimension of the space of
cusp forms of weight `2` with character
`\varepsilon`.
INPUT:
- ``eps`` - Dirichlet character
- ``k`` - integer
OUTPUT: element of the base ring of eps.
EXAMPLES::
sage: G.<eps> = DirichletGroup(7)
sage: sage.modular.dims.CohenOesterle(eps, 2)
-2/3
sage: sage.modular.dims.CohenOesterle(eps, 4)
-1
"""
N = eps.modulus()
facN = factor(N)
f = eps.conductor()
gamma_k = 0
if k%4==2:
gamma_k = frac(-1,4)
elif k%4==0:
gamma_k = frac(1,4)
mu_k = 0
if k%3==2:
mu_k = frac(-1,3)
elif k%3==0:
mu_k = frac(1,3)
def _lambda(r,s,p):
"""
Used internally by the CohenOesterle function.
INPUT:
- ``r, s, p`` - integers
OUTPUT: Integer
EXAMPLES: (indirect doctest)
::
sage: K = CyclotomicField(3)
sage: eps = DirichletGroup(7*43,K).0^2
sage: sage.modular.dims.CohenOesterle(eps,2)
-4/3
"""
if 2*s<=r:
if r%2==0:
return p**(r//2) + p**((r//2)-1)
return 2*p**((r-1)//2)
return 2*(p**(r-s))
#end def of lambda
K = eps.base_ring()
return K(frac(-1,2) * mul([_lambda(r,valuation(f,p),p) for p, r in facN]) + \
gamma_k * mul([CO_delta(r,p,N,eps) for p, r in facN]) + \
mu_k * mul([CO_nu(r,p,N,eps) for p, r in facN]))