def traza(alpha,d): alpha = simplify(alpha) if d < 0 or alpha.coeff(sqrt(d),1)==0: # Tomamos la norma como el alpha por su conjugado si d < 0 # o alpha está en Z (2 * alpha) return simplify(alpha+alpha.conjugate()) else: # En caso contrario tomamos menos el coeficiente del término # de primer grado su polinomio mínimo asociado. polynome = minimal_polynomial(alpha,x) return -polynome.coeff(x,1)
def traza(alpha, d): alpha = simplify(alpha) if d < 0 or alpha.coeff(sqrt(d), 1) == 0: # Tomamos la norma como el alpha por su conjugado si d < 0 # o alpha está en Z (2 * alpha) return simplify(alpha + alpha.conjugate()) else: # En caso contrario tomamos menos el coeficiente del término # de primer grado su polinomio mínimo asociado. polynome = minimal_polynomial(alpha, x) return -polynome.coeff(x, 1)
def divisores(p, d): e = getE(d) fp = poly(minimal_polynomial(e, "x"), modulus=p) roots = fp.ground_roots().keys() if len(roots) == 0: return [[p]] else: if len(roots) == 1: roots.append(roots[0]) return [[p, e - roots[0]], [p, e - roots[1]]]
def divisores(p,d): e = getE(d) fp = poly(minimal_polynomial(e, "x"), modulus=p) roots = fp.ground_roots().keys() if len(roots) == 0: return [[p]] else: if len(roots)==1: roots.append(roots[0]) return [[p,e-roots[0]],[p,e-roots[1]]]
def norma(alpha, d): alpha = simplify(alpha) if d < 0 or alpha.coeff(sqrt(d), 1) == 0: # Tomamos la norma como el alpha por su conjugado si d < 0 # o alpha está en Z (alpha**2) return simplify(alpha * alpha.conjugate()) else: # En caso contrario tomamos el término independiente # de su polinomio mínimo asociado. polynome = minimal_polynomial(alpha, x) return polynome.coeff(x, 0)
def norma(alpha,d): alpha = simplify(alpha) if d < 0 or alpha.coeff(sqrt(d),1)==0: # Tomamos la norma como el alpha por su conjugado si d < 0 # o alpha está en Z (alpha**2) return simplify(alpha*alpha.conjugate()) else: # En caso contrario tomamos el término independiente # de su polinomio mínimo asociado. polynome = minimal_polynomial(alpha,x) return polynome.coeff(x,0)
def apply(self, s, x, evaluation): 'MinimalPolynomial[s_, x_]' variables = find_all_vars(s) if len(variables) > 0: return evaluation.message('MinimalPolynomial', 'nalg', s) if s == Symbol('Null'): return evaluation.message('MinimalPolynomial', 'nalg', s) sympy_s, sympy_x = s.to_sympy(), x.to_sympy() if sympy_s is None or sympy_x is None: return None sympy_result = sympy.minimal_polynomial(sympy_s, sympy_x) return from_sympy(sympy_result)
def apply(self, s, x, evaluation): "MinimalPolynomial[s_, x_]" variables = find_all_vars(s) if len(variables) > 0: return evaluation.message("MinimalPolynomial", "nalg", s) if s == Symbol("Null"): return evaluation.message("MinimalPolynomial", "nalg", s) sympy_s, sympy_x = s.to_sympy(), x.to_sympy() if sympy_s is None or sympy_x is None: return None sympy_result = sympy.minimal_polynomial(sympy_s, polys=True)(sympy_x) return from_sympy(sympy_result)
def es_primo(ideal, d): e = getE(d) norm = norma_ideal(ideal, d) if isprime(norm): return True elif esO(ideal, d) == 1: return False sqrt_norm = sqrt(norm) if getType(sqrt_norm) == Integer and isprime(sqrt_norm): fp = poly(minimal_polynomial(e, "x"), modulus=sqrt_norm) roots = fp.ground_roots().keys() if pertenece(sqrt_norm, ideal, d) and len(roots) == 0: return True return False
def es_primo(ideal, d): e = getE(d) norm = norma_ideal(ideal, d) if isprime(norm): return True elif esO(ideal,d)==1: return False sqrt_norm = sqrt(norm) if getType(sqrt_norm) == Integer and isprime(sqrt_norm): fp = poly(minimal_polynomial(e, "x"), modulus=sqrt_norm) roots = fp.ground_roots().keys() if pertenece(sqrt_norm,ideal,d) and len(roots)==0: return True return False