Exemplo n.º 1
0
def _polynom_irreduzibel(f: PolynomringElement, primzahl_test=None):
    import Extension.Primzahl as primzahl
    from Extension.PolynomRestklassenring import PolynomRestklassenring, PolynomRestklassenringElement

    if not primzahl_test:
        primzahl_test = primzahl.miller_rabin

    if not f.basisring.ist_endlicher_koerper():
        raise TypeError('Bassisring muss endlicher Körper sein')
    if f.grad == 0:
        return False

    KX_f = PolynomRestklassenring(f)
    var = PolynomRestklassenringElement(f.ring.variable, KX_f)

    n = [int(f.grad / p) for p in _primzahlen(f.grad, primzahl_test)]

    if isinstance(f.basisring, PolynomRestklassenring):
        q = f.basisring.modulus.basisring.modulus**f.basisring.modulus.grad
    else:
        q = f.basisring.modulus

    for i in range(0, len(n)):
        h = (((var**q)**n[i]) - var)
        g, _, _ = Polynomring.ExtGGT(f, h.wert, False)
        if g.grad != 0:
            return False

    g = ((var**(q**f.grad)) - var)
    if g == var.ring.null:
        return True
    return False
 def invers(self):
     print(self.wert)
     print(self.ring.modulus)
     _, u, _ = Polynomring.ExtGGT(self.wert, self.ring.modulus)
     if u != 1:
         raise RuntimeError("GGT von Wert und Modulus nicht 1")
     return PolynomRestklassenringElement(u, self.ring)
def _polynomring_ext_ggt(self: Polynomring, a: PolynomringElement,
                         b: PolynomringElement):
    if not (isinstance(a, PolynomringElement)
            and isinstance(b, PolynomringElement)):
        raise TypeError('Argumente nicht vom Typ PolynomringElement')

    if a.ring != self or b.ring != self:
        raise TypeError('PolynomringElement nicht im Polynomring')

    return Polynomring.ExtGGT(a, b)
 def invers(self):
     _, u, _ = Polynomring.ExtGGT(self.wert, self.ring.modulus)
     return PolynomRestklassenringElement(u, self.ring)