7 num mod_inverse(num n, num p) {
11 num r_0, r_1=p, r_2=n;
12 num s_0, t_0, s_1=1, t_1=0, s_2=0, t_2=1;
19 num q = (r_0 - r_2) / r_1;
24 if (t_1 < 0) t_1 += p;
28 int main(int argc, char **argv) {
29 if (argc != 3) puts("invocation: ./eea <n> <p>"), exit(1);
30 num n = strtoll(argv[1], NULL, 0);
31 num p = strtoll(argv[2], NULL, 0);
32 if (n >= p || n < 0 || p <= 0) puts("bad input"), exit(1);
33 printf("%lld\n", mod_inverse(n, p));