def _method_pt1(num_bits,k,D,y):
    a = Integer(-D*y**2)
    R = PolynomialRing(ZZ,'x')
    f = R.cyclotomic_polynomial(k)(x-1).polynomial(base_ring = R)
    g = (a+(x-2)**2).polynomial(base_ring = R)
    r = Integer(f.resultant(g))
    if (Mod(r, k) == 1) and r > 2**(num_bits-1) and utils.is_suitable_r(r): # found a valid r, so use it
        F = GF(r)
        f = f.change_ring(F)
        g = g.change_ring(F)
        t = Integer(f.gcd(g).any_root())
        return t,r
    else:
        return 0,0
def _method_pt1(num_bits, k, D, y):
    a = Integer(-D * y**2)
    R = PolynomialRing(ZZ, 'x')
    f = R.cyclotomic_polynomial(k)(x - 1).polynomial(base_ring=R)
    g = (a + (x - 2)**2).polynomial(base_ring=R)
    r = Integer(f.resultant(g))
    if (Mod(r, k) == 1) and r > 2**(num_bits - 1) and utils.is_suitable_r(
            r):  # found a valid r, so use it
        F = GF(r)
        f = f.change_ring(F)
        g = g.change_ring(F)
        t = Integer(f.gcd(g).any_root())
        return t, r
    else:
        return 0, 0