def composite(draw, num_factors, min_value, max_value):
    return reduce(
        lambda x, h: x
        * next_prime(draw(st.integers(min_value=min_value, max_value=max_value))),
        range(num_factors),
        1,
    )
def test_quaternion_divisor(number):
    prime = next_prime(number)
    q = quaternion_divisor(prime)
    assert q.norm == prime
    assert Quaternion(prime, 0, 0, 0) % q == Quaternion(0, 0, 0, 0)
def test_gaussian_divisor(number):
    prime = next_prime(number)
    if prime % 4 == 1:
        g = gaussian_divisor(prime)
        assert g.norm == prime
        assert GaussianInteger(prime, 0) % g == GaussianInteger(0, 0)