using gcd