tux35(26)% cat gcd.c int main(int argc, char *argv[]) { int a, b, r; int x, y; int ax = 1; //a = ax * original_a + ay * original_b int bx = 0; int ay = 0; //b = bx * original_a + by * original_b int by = 1; if(argc != 3) { printf("usage: gcd a b\n"); exit(0); } for(a = atoi(argv[1]), b = atoi(argv[2]); b; r = a % b, a = b, b = r) { y = -a / b; x = ax + bx * y; y = ay + by * y; ax = bx; ay = by; bx = x; by = y; } printf("%i = %i*%i + %i*%i\n", a, ax, atoi(argv[1]), ay, atoi(argv[2])); } tux35(27)% ./gcd usage: gcd a b tux35(28)% ./gcd 51 69 3 = -4*51 + 3*69 tux35(29)% ./gcd 1479 323 17 = 7*1479 + -32*323 tux35(30)% ./gcd 10946 17711 1 = -6765*10946 + 4181*17711