|
[ 簡単な説明 ]
法 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;
}
|