乘法逆元的应用

这个博客讲的很好,直接拉过来了。http://blog.sina.com.cn/s/blog_7c4c33190100s48a.html 网络上讲的也很少,这个算是最清楚的了。

定义:

满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元。

 

为什么要有乘法逆元呢?

当我们要求(a/b) mod p的值,且a很大,无法直接求得a/b的值时,我们就要用到乘法逆元。

我们可以通过求b关于p的乘法逆元k,将a乘上k再模p,即(a*k) mod p。其结果与(a/b) mod p等价。

 

 

证:

根据b*k≡1 (mod p)有b*k=p*x+1。

k=(p*x+1)/b。

把k代入(a*k) mod p,得:

 (a*(p*x+1)/b) mod p

=((a*p*x)/b+a/b) mod p

=[((a*p*x)/b) mod p +(a/b)] mod p

=[(p*(a*x)/b) mod p +(a/b)] mod p

//p*[(a*x)/b] mod p=0

所以原式等于:(a/b) mod p

 

更简单的证明:

a/b mod p =  a* (b*b^(-1) ) /b =a*b^(-1);

 

至于怎么求解二元不定方程,参见扩展欧几里得算法。(extended-gcd)

http://blog.sina.com.cn/s/blog_7c4c33190100s4a8.html

 

http://wenku.baidu.com/link?url=u2bKSFtzyQ8KT1lhlAUvQ1mYGHSU9iOkUpVSiJe7b_kYGAdHZUwdB3ipbf0DVZvqO_1mgyw0SrpJ7Zj7g3E5M2r0t9bCAVQ7U1QF_2fYNnu 贾志鹏线性筛;介绍了O(n)算法求出多个数的逆元。

 

快速求出1—n的逆元(mod p)

以下所有数都mod p

首先要求出 1! 2!。。。n! 的值, 先求出 n!的逆元。

逆元是积性函数, 可以根据n!的逆元 求出 1! 2!。。。(n-1)!的逆元。

(n!)^(-1)= (n-1)!^(-1)  *  n^(-1)

 移项得

( (n!)^(-1) )/( n^(-1) ) = (n-1)! ^ (-1)  

根据除以一个数等价于乘以这个数的逆元

(n!)^(-1) * n = (n-1) ^ (-1)

 

这样就求出了 1!,  2!。。。(n-1)!, n!的逆元。

接下来 就是 如何 利用 阶乘的逆 求出 每个数的逆;

( (n-1)! ^ (-1) ) * n ^ (-1) = (n!) ^ (-1);

移项得

n ^ (-1) = (  (n!) ^ (-1) )  / ( (n-1)! ^ (-1) ) ;

根据除以一个数等价于乘以这个数的逆元

n ^ (-1) =  (n!) ^ (-1)  *   (n-1)! ;

 

 

定义:

 

若 a*k≡1 (mod p), a 与 p 互质,就说 k 是 a 模 p 的乘法逆元。记为 k = a-1.

 

我个人习惯用 ie(a) 表示 a 模某数的逆元。(inverse element)

 

 

 

补充性质:

 

  1. a/b≡a*b-1 (mod p),b | a.

    证明:a/b mod p = a/b*b* b-1 mod p,化简得 a/b mod p = a*b-1 mod p.

     

  2. ie(x) 是积性函数

    证明:设 x 是 a 关于 p 的逆元,y 是 b 关于 p 的逆元,即 xa mod p = yb mod p = 1,则

    xayb mod p = 1

    (ab)*(xy) mod p = 1

    即 xy 是 ab 关于模 p 的逆元,即 ie(ab) = xy = ie(a)*ie(b)。

     

  3. a-1 = ap-2

    证明:先证明 ap-1 mod p = 1.

    首先,a, 2a, 3a, ..., (p-1)a,这些数 mod p 的值互不相同。

    用反证法可以证明:假设 i*a≡j*a(mod p) (1 <= i, j < p),设 i > j,则 (i-j)*a mod p = 0,由于 a 与 p 互质,可以得到 (i-j)又 i-j 是 p 的倍数,又 i-j < p,矛盾,所以假设不成立。

    由上述结论可知,a, 2a, 3a, ..., (p-1)a mod p 的值与 0, 1, 2, ..., p-1 一一对应(不一定按顺序对应),将这些数相乘可以得到 (p-1)!*ap-1≡(p-1)! (mod p),两边消去 (p-1)!,得到 ap-1 mod p = 1.

    又 ap-1 = a*ap-2,所以 a*ap-2≡a*a-1 (mod p),即 a-1=ap-2.

 

你可能感兴趣的:(应用)