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;

 

posted @ 2016-07-14 16:25  2014summer8  阅读(401)  评论(0)    收藏  举报