m-th Residue Symbol
system:sage


{{{id=1|
def power_residue_symbol(e, P, m, check=True):
    """
    The m-th power residue symbol for an element e and proper ideal P.
    
    .. math: 
    
    .. note: accepts m=1, returns 1
    
    INPUT:
        
    - ``e`` - element of a number field
    
    - ``P`` - proper ideal of a number field or ZZ
    
    - ``m`` - positive integer
    
    OUTPUT:
        
    - an m-th root of unity in the number field of definition for P
    
    EXAMPLES:
        
        sage: power_residue_symbol(7,ZZ.ideal(11),2)
        -1
        sage: K.<w> = NumberField(x^2 - x + 1)
        sage: power_residue_symbol(w^2+3,K.ideal(17),3)
        -w
        
    """
    Felt = parent(e)
    K = P.ring()
    if (K == ZZ and m == 2):
        return kronecker_symbol(e,P.gen())
    if (check):
        if (P.is_trivial()):
            raise ValueError, "Ideal must be proper"
        if (m < 1):
            raise ValueError, "Power must be positive"
        if (K == ZZ or Set(Felt.embeddings(K)).cardinality() == 0):
            raise ValueError, "Element is not in the same number field as the ideal"
        if (not P.is_coprime(e)):
            raise ValueError, "Element is not coprime to the ideal"
        if (not P.is_coprime(m)):
            raise ValueError, "Ideal is not coprime to the power"
    roots = K.roots_of_unity()
    if (check):
        if (not len(roots)%m == 0):
            raise ValueError, "The residue symbol to that power is not defined for the number field"
    if (not P.is_prime()):
        return prod(power_residue_symbol(e,Q,m)^i for Q, i in P.factor())
    k = P.residue_field()
    r = k(e)
    r = k(r^((1/m)*(P.norm()-1)))
    for j in roots:
        if k(j) == r:
            return j
    return 'Failure'
///
}}}

{{{id=2|
kronecker_symbol(7,11)
///
-1
}}}

{{{id=3|
power_residue_symbol(7,ZZ.ideal(11),2)
///
-1
}}}

{{{id=4|
K.<w> = NumberField(x^2 - x + 1)
power_residue_symbol(w^2+4,K.ideal(11),3)
///
w - 1
}}}

{{{id=5|

///
}}}