ex_gcd扩展欧几里德求逆元模板pascal

有一问题求(A/B) mod p且A的值很大,此时答案不为((A mod p)/B) mod p,所以我们需要求逆元,逆元C定义为B*C mod p=1,由此可见,逆元只与除数和模数有关,原式A/B mod p=1两边同乘1即为A*C mod p,求逆元可用费马小定理,C=(B^(p-2)) mod p,但有限制,这里不详细讲,用快速幂即可,以下是扩展欧几里德求法,逆元即为x,第一次的a,b分别为除数与模数。

procedure ex_gcd(a,b: longint );
var
   t: longint ;
begin
   if b= 0 then
     begin x:= 1 ; y:= 0 ; end
          else
     begin
     ex_gcd(b,a mod b);
     t:=x;x:=y;y:=t-a div b*y;
     end ;
end ;

 

转载于:https://www.cnblogs.com/2014summer8/p/5670840.html

你可能感兴趣的:(ex_gcd扩展欧几里德求逆元模板pascal)