(f, g, p, u, K)
return r
Compute resultant of `f` and `g` modulo a prime `p`.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> f = x + y + 2
    >>> g = 2*x*y + x + 3

    >>> R.dmp_zz_modular_resultant(f, g, 5)
    -2*y**2 + 1
Compute resultant of `f` and `g` modulo a prime `p`.
Compute resultant of f and g modulo a prime p .
def dmp_zz_modular_resultant(f, g, p, u, K):
    """
    Compute resultant of `f` and `g` modulo a prime `p`.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> f = x + y + 2
    >>> g = 2*x*y + x + 3

    >>> R.dmp_zz_modular_resultant(f, g, 5)
    -2*y**2 + 1

    """
    if not u:
        return gf_int(dup_prs_resultant(f, g, K)[0] % p, p)

    v = u - 1

    n = dmp_degree(f, u)
    m = dmp_degree(g, u)

    N = dmp_degree_in(f, 1, u)
    M = dmp_degree_in(g, 1, u)

    B = n*M + m*N

    D, a = [K.one], -K.one
    r = dmp_zero(v)

    while dup_degree(D) <= B:
        while True:
            a += K.one

            if a == p:
                raise HomomorphismFailed('no luck')

            F = dmp_eval_in(f, gf_int(a, p), 1, u, K)

            if dmp_degree(F, v) == n:
                G = dmp_eval_in(g, gf_int(a, p), 1, u, K)

                if dmp_degree(G, v) == m:
                    break

        R = dmp_zz_modular_resultant(F, G, p, v, K)
        e = dmp_eval(r, a, v, K)

        if not v:
            R = dup_strip([R])
            e = dup_strip([e])
        else:
            R = [R]
            e = [e]

        d = K.invert(dup_eval(D, a, K), p)
        d = dup_mul_ground(D, d, K)
        d = dmp_raise(d, v, 0, K)

        c = dmp_mul(d, dmp_sub(R, e, v, K), v, K)
        r = dmp_add(r, c, v, K)

        r = dmp_ground_trunc(r, p, v, K)

        D = dup_mul(D, [K.one, -a], K)
        D = dup_trunc(D, p, K)

    return r
def dmp_zz_modular_resultant ( f , g , p , u , K ) : if not u : return gf_int ( dup_prs_resultant ( f , g , K ) [ 0 ] % p , p ) v = u - 1 n = dmp_degree ( f , u ) m = dmp_degree ( g , u ) N = dmp_degree_in ( f , 1 , u ) M = dmp_degree_in ( g , 1 , u ) B = n * M + m * N D , a = [ K . one ] , - K . one r = dmp_zero ( v ) while dup_degree ( D ) <= B : while True : a += K . one if a == p : raise HomomorphismFailed ( 'no luck' ) F = dmp_eval_in ( f , gf_int ( a , p ) , 1 , u , K ) if dmp_degree ( F , v ) == n : G = dmp_eval_in ( g , gf_int ( a , p ) , 1 , u , K ) if dmp_degree ( G , v ) == m : break R = dmp_zz_modular_resultant ( F , G , p , v , K ) e = dmp_eval ( r , a , v , K ) if not v : R = dup_strip ( [ R ] ) e = dup_strip ( [ e ] ) else : R = [ R ] e = [ e ] d = K . invert ( dup_eval ( D , a , K ) , p ) d = dup_mul_ground ( D , d , K ) d = dmp_raise ( d , v , 0 , K ) c = dmp_mul ( d , dmp_sub ( R , e , v , K ) , v , K ) r = dmp_add ( r , c , v , K ) r = dmp_ground_trunc ( r , p , v , K ) D = dup_mul ( D , [ K . one , - a ] , K ) D = dup_trunc ( D , p , K ) return r