(F, m, p, K)
return result
Wang/EEZ: Solve univariate Diophantine equations.
Wang/EEZ: Solve univariate Diophantine equations.
Wang / EEZ : Solve univariate Diophantine equations .
def dup_zz_diophantine(F, m, p, K):
    """Wang/EEZ: Solve univariate Diophantine equations. """
    if len(F) == 2:
        a, b = F

        f = gf_from_int_poly(a, p)
        g = gf_from_int_poly(b, p)

        s, t, G = gf_gcdex(g, f, p, K)

        s = gf_lshift(s, m, K)
        t = gf_lshift(t, m, K)

        q, s = gf_div(s, f, p, K)

        t = gf_add_mul(t, q, g, p, K)

        s = gf_to_int_poly(s, p)
        t = gf_to_int_poly(t, p)

        result = [s, t]
    else:
        G = [F[-1]]

        for f in reversed(F[1:-1]):
            G.insert(0, dup_mul(f, G[0], K))

        S, T = [], [[1]]

        for f, g in zip(F, G):
            t, s = dmp_zz_diophantine([g, f], T[-1], [], 0, p, 1, K)
            T.append(t)
            S.append(s)

        result, S = [], S + [T[-1]]

        for s, f in zip(S, F):
            s = gf_from_int_poly(s, p)
            f = gf_from_int_poly(f, p)

            r = gf_rem(gf_lshift(s, m, K), f, p, K)
            s = gf_to_int_poly(r, p)

            result.append(s)

    return result
def dup_zz_diophantine ( F , m , p , K ) : if len ( F ) == 2 : a , b = F f = gf_from_int_poly ( a , p ) g = gf_from_int_poly ( b , p ) s , t , G = gf_gcdex ( g , f , p , K ) s = gf_lshift ( s , m , K ) t = gf_lshift ( t , m , K ) q , s = gf_div ( s , f , p , K ) t = gf_add_mul ( t , q , g , p , K ) s = gf_to_int_poly ( s , p ) t = gf_to_int_poly ( t , p ) result = [ s , t ] else : G = [ F [ - 1 ] ] for f in reversed ( F [ 1 : - 1 ] ) : G . insert ( 0 , dup_mul ( f , G [ 0 ] , K ) ) S , T = [ ] , [ [ 1 ] ] for f , g in zip ( F , G ) : t , s = dmp_zz_diophantine ( [ g , f ] , T [ - 1 ] , [ ] , 0 , p , 1 , K ) T . append ( t ) S . append ( s ) result , S = [ ] , S + [ T [ - 1 ] ] for s , f in zip ( S , F ) : s = gf_from_int_poly ( s , p ) f = gf_from_int_poly ( f , p ) r = gf_rem ( gf_lshift ( s , m , K ) , f , p , K ) s = gf_to_int_poly ( r , p ) result . append ( s ) return result