diff options
author | Igor <pashev.igor@gmail.com> | 2011-01-12 15:33:44 +0300 |
---|---|---|
committer | Igor <pashev.igor@gmail.com> | 2011-01-12 15:33:44 +0300 |
commit | cb9ab4e10b97f91bcf78fc643821851097a54e7e (patch) | |
tree | ac08985c2e405a77d7599f0934561cb6acdbd603 /gcd.c | |
download | gcd-cb9ab4e10b97f91bcf78fc643821851097a54e7e.tar.gz |
Begin: C, C#, Haskell, Java, Python
Diffstat (limited to 'gcd.c')
-rw-r--r-- | gcd.c | 46 |
1 files changed, 46 insertions, 0 deletions
@@ -0,0 +1,46 @@ +#include <stdlib.h> +#include <stdio.h> + +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; +} + |