[ 簡単な説明 ]
法 n における逆数を求めます。アルゴリズムはユークリッドの互除法です。 |
/* linv.c */ #include "longint.h" /* GCD(s, n) = 1 : s * x = 1 (mod n) */ LINT linv(LINT s, LINT n) { LINT q, t, u, v, w; t = n; u = lset(1); v.len = 0; while(s.len > 0) { q = ldivide(t, s, &w); t = s; s = w; w = lmul(q, u); w = lsub(v, w); v = u; u = w; } if(v.sign == -1) v = ladd(v, n); return v; } |