sgd.c

Denna kod är public domain. Om ni hittar fel eller vill ändra något i koden blir jag jätteglad om ni skickar dessa ändringar till jesper [at] fantasi [punkt] se.


/* Funktionen SGD använder Euklides algoritm för att finna den största
 * gemensamma delaren mellan två tal. Om detta tal är ett säger man
 * att talen är relativt prima.
 */

#include<stdlib.h>
#include<stdio.h>

static int sgd_rekursiv(int a, int b)
{
   if (b == 0)
      return a;

   return sgd_rekursiv(b, a % b);
}

static int sgd_ickeRekursiv(int a, int b)
{
   while(b != 0)
   {
      int tmp = a;
      a = b;
      b = tmp % b;
   }
   return a;
}

int main(int argc, char* argv[])
{
   /* Vi måste kontrollera argumenten! */
   if (argc != 3)
   {
      printf("Usage: sgd n1 n2\n");
      return EXIT_FAILURE;
   }

   /* Gör om argumenten till tal och anropa sgd */
   printf("Största Gemensamma Delare\n");
   printf("Rekursiv: %d\n", sgd_rekursiv(atoi(argv[1]), atoi(argv[2])));
   printf("Icke rekursiv: %d\n",
          sgd_ickeRekursiv(atoi(argv[1]), atoi(argv[2])));
   return EXIT_SUCCESS;
}