code:
int euclid_gcd(int a,int b) { int dividend,divisor,remainder; dividend = a>=b?a:b; divisor= a<=b?a:b; while(divisor!=0) { remainder=dividend%divisor; dividend=divisor; divisor=remainder; } return dividend; }
more optimized:
int euclid_gcd(int a,int b) { int dividend,divisor,remainder; dividend = a; divisor= b; while(divisor!=0) { remainder=dividend%divisor; dividend=divisor; divisor=remainder; } return dividend; }
Recursive:
#include<bits/stdc++.h> int euclid_gcd_recursive(int a,int b) { return b==0?a:euclid_gcd_recursive(b,a%b); } int main() { int d,x,z; printf("Scanf a and b:"); scanf("%d %d",&x,&z); d=euclid_gcd_recursive(x,z); printf("GCD= %d",d); return 0; }
http://www.progkriya.org/gyan/basic-number-theory.html#section3