From cb9ab4e10b97f91bcf78fc643821851097a54e7e Mon Sep 17 00:00:00 2001 From: Igor Date: Wed, 12 Jan 2011 15:33:44 +0300 Subject: Begin: C, C#, Haskell, Java, Python --- gcd.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 gcd.c (limited to 'gcd.c') diff --git a/gcd.c b/gcd.c new file mode 100644 index 0000000..5a520be --- /dev/null +++ b/gcd.c @@ -0,0 +1,46 @@ +#include +#include + +unsigned int gcd2(unsigned int a, unsigned int b) +{ + unsigned int c; + while (b != 0) { + c = b; + b = a % b; + a = c; + } + return a; +} + +unsigned int gcdn(unsigned int a[], size_t n) +{ + unsigned int r; + size_t i; + r = a[0]; + for(i = 1; i < n; i++) { + r = gcd2(r, a[i]); + } + return r; +} + + +int main (int argc, char *argv[]) +{ + unsigned int *a; + int i, n; + + if (argc > 1) { + n = argc - 1; + a = malloc(sizeof(unsigned int) * n); + if (NULL != a) { + for (i = 1; i <= n; i++) + a[i-1] = atoi(argv[i]); + printf("%u\n", gcdn(a, n)); + free(a); + return EXIT_SUCCESS; + } + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +} + -- cgit v1.2.3