\C
gcd.c
/*
Greatest Common Denominator Functions
*/
// Single GCD - Euclid's Algorithm
int gcd(int x, int y)
{
int g;
if(x < 0) x = -x;
if(y < 0) y = -y;
if((x+y) == 0) return 0;
g = y;
while(x > 0)
{
g = x;
x = y % x;
y = g;
}
return g;
}
// gcd of array of numbers
int array_gcd(int m, int *x)
{
int i, g;
if(m < 1)
return 0;
g = x[0];
for(i =1; i < m; ++i)
{
g = gcd(g, x[i]);
// optimization, random x[i], g == 1 60% of the time
if(g == 1)
return 1;
}
return g;
}