Advertisement
Guest User

here we go bitch!

a guest
Dec 14th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.35 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <gmp.h>
  3.  
  4. typedef mpz_t ll;
  5.  
  6. void extended_euclidian(ll a, ll b, ll* d, ll* x, ll* y){
  7.     if(mpz_cmp_ui(b, 0) == 0) {
  8.         mpz_set(*d, a);
  9.         mpz_set_ui(*x, 1);
  10.         mpz_set_ui(*y, 0);
  11.     } else {
  12.         ll r;
  13.         mpz_init(r);
  14.         mpz_tdiv_r(r, a, b);
  15.         extended_euclidian(b, r, d, x, y);
  16.  
  17.         ll xp, tmp, tmp2;
  18.         mpz_init(tmp);
  19.         mpz_init(tmp2);
  20.         mpz_init_set(xp, *y);
  21.         mpz_tdiv_q(tmp, a, b);
  22.         mpz_mul(tmp2, tmp, *y);
  23.         mpz_sub(tmp, *x, tmp2);
  24.         mpz_set(*y, tmp);
  25.         mpz_set(*x, xp);
  26.     }
  27. }
  28.  
  29. int main(int argc, char *argv[]) {
  30.     if (argc < 3) {
  31.         printf("Usage: example number1 number2\n");
  32.         return 1;
  33.     }
  34.  
  35.     ll a, b, d, x, y;
  36.     mpz_init(d);
  37.     mpz_init(x);
  38.     mpz_init(y);
  39.  
  40.     mpz_init_set_str(a, argv[1], 10);
  41.     mpz_init_set_str(b, argv[2], 10);
  42.  
  43.     extended_euclidian(a, b, &d, &x, &y);
  44.  
  45.     char* str_a = mpz_get_str(NULL, 10, a);
  46.     char* str_b = mpz_get_str(NULL, 10, b);
  47.     char* str_d = mpz_get_str(NULL, 10, d);
  48.     char* str_x = mpz_get_str(NULL, 10, x);
  49.     char* str_y = mpz_get_str(NULL, 10, y);
  50.  
  51.     printf("a*x + b*y = mdc(a, b) tal que\na \t= \t%s\nb \t= \t%s\nmdc(a, b) = \t%s\nx \t= \t%s\ny \t= \t%s\n",
  52.             str_a, str_b, str_d, str_x, str_y);
  53.  
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement