1 /**************************************** 2 A/B(hdu 1576) 3 求逆元模板(求(1/b)%p的值,p位素数) 4 5 令(1/b)%p=x (x为结果) 6 1/b=x+k*p (k未知) 7 1=x*b+k*p*b (左右同时模p) 8 1=x*b%p (1%p=1;k*p*b%p=0) 9 1+y*p=x*b 10 1=x*b-y*p; 11 用扩展欧几里得就可求出x的值了 12 13 *****************************************/ 14 15 #include<iostream> 16 using namespace std; 17 int p=9973; 18 19 ///扩展欧几里得算法模板 20 int extendGcd(int a,int b,int &x,int &y) 21 { 22 if (b==0) 23 { 24 x=1; 25 y=0; 26 return a; 27 } 28 int d= extendGcd(b,a%b,y,x); 29 y-=a/b*x; 30 return d; 31 } 32 33 ///逆元模板 34 int mod_reverse(int b,int p) 35 { 36 int x,y; 37 int d = extendGcd(b,p,x,y); 38 return x; 39 }
原文:http://www.cnblogs.com/pblr/p/5719618.html