求1~n所有数的逆元:
假设1~i-1的逆元已求出,设p÷i=d……r(商d余r),则p=i*d+r。其中r=p%i。
对p=i*d+r,等式两边同时%p,得到0=(i*d+r)%p。
即为0≡i*d+r(mod p)(同余有一条性质:如果a≡b(mod m),x≡y(mod m),则有ax≡by(mod m)。)
由同余的自反性(一个数永远和自己本身同余)可知:i^-1*r^-1≡i^-1*r^-1(mod p),即可运用该性质
对上述同余式,乘i^-1*r^-1(乘i的逆元与r的逆元的积)
得到:0≡r^-1*d+i^-1(mod p);
∴i^-1≡-r^-1*d(mod p),r=p%i。
于是就有了这样一段伪代码:
inv[1] = 1; for(int i = 2; i < p; ++ i) inv[i] = (p - p / i) * inv[p % i] % p;
标签:简略,inv,逆元,已求,p%,线性,同余,mod 来源: https://www.cnblogs.com/liumengliang/p/12559051.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。