The following C function finds the greatest common divisor of a set of integers using the Divide et Impera method and returns it.
/* * Description: * Finds the greatest common divisor of an array of integers * Parameters: * a - the array * first - the index of the leftmost elements of the array * last - the index of the rightmost element of the array * Returns: * gcd - the greatest common divisor */ int ArrayGCD(int *a, int first, int last) { int x = 0, y = 0, gcd = 0; if(first == last) { gcd = a[first]; return gcd; } else { x = ArrayGCD(a,first,(first+last)/2); y = ArrayGCD(a,(first+last)/2+1,last); if(x < 0) { x = -x; } if(y < 0) { y = -y; } while(x != y) { if(x > y) { x = x-y; } else { y = y-x; } } gcd = x; return gcd; } }
Example:
#include<stdio.h> #include<conio.h> int ArrayGCD(int *a, int first, int last); int main(void) { int a[20], n = 0, i = 0, gcd = 0; printf("\n Enter the number of elements of the array: "); scanf("%d",&n); printf(" Enter the elements of the array:\n"); for(i=0; i<n; i++) { scanf("%d",&a[i]); } gcd = ArrayGCD(a,0,n-1); printf("\n\tThe greatest common divisor is: %d",gcd); getch(); return 0; }
thanx
ReplyDelete