summaryrefslogtreecommitdiff
path: root/gcd.c
diff options
context:
space:
mode:
authorIgor <pashev.igor@gmail.com>2011-01-12 15:33:44 +0300
committerIgor <pashev.igor@gmail.com>2011-01-12 15:33:44 +0300
commitcb9ab4e10b97f91bcf78fc643821851097a54e7e (patch)
treeac08985c2e405a77d7599f0934561cb6acdbd603 /gcd.c
downloadgcd-cb9ab4e10b97f91bcf78fc643821851097a54e7e.tar.gz
Begin: C, C#, Haskell, Java, Python
Diffstat (limited to 'gcd.c')
-rw-r--r--gcd.c46
1 files changed, 46 insertions, 0 deletions
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 <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;
+}
+