Sunday, November 5, 2017

Extended Euclid's Algorithm C Code

Before going through this article, please look at my previous article about Euclid's Algorithm. The Extended Euclid's algorithm solves the following equation.
\[GCD(a, b) = d = ax + by\]
In addition to calculating a GCD, it calculates coefficients x and y such that satisfies the above equation. These coefficients x and y are important for calculating modular multiplicative inverses. The Extended Euclid's algorithm is used in a much practical application specifically in cryptography.

The following C code presents the efficient algorithm to solve Extended Euclid's algorithm. The code is also available on GitHub.


#include <stdio.h>
#include <math.h>

typedef struct {
 int d;
 int x;
 int y;
} EE;

EE extended_euclid(int a, int b) {
 EE ee1, ee2, ee3;
 if (b == 0) {
  ee1.d = a;
  ee1.x = 1;
  ee1.y = 0;
  printf("%d %d %d %d %d\n", a, b, ee1.d, ee1.x, ee1.y);
  return ee1;
 } else {
  ee2 = extended_euclid(b, a % b);
  ee3.d = ee2.d;
  ee3.x = ee2.y;
  ee3.y = ee2.x - floor(a / b) * ee2.y;
  printf("%d %d %d %d %d\n", a, b, ee3.d, ee3.x, ee3.y);
  return ee3;
 }
}

int main(int argc, char* argv[]) {
 int a = 287, b = 288;
 EE ee = extended_euclid(a, b);
 printf("GCD = %d\n", ee.d);
 printf("x = %d\n", ee.x);
 printf("y = %d\n", ee.y);
 return 0;
}

No comments:

Post a Comment