add GCD function