转自 http://blog.csdn.net/acdreamers/article/details/8220787
有些题需要用到模
的所有逆元,这里
为奇质数。那么如果用快速幂求时间复杂度为
,
如果对于一个1000000级别的素数,这样做的时间复杂度是很高了。实际上有
的算法,有一个递推式如下
它的推导过程如下,设,那么
对上式两边同时除,进一步得到
再把和
替换掉,最终得到
初始化,这样就可以通过递推法求出
模奇素数
的所有逆元了。
另外模
的所有逆元值对应
中所有的数,比如
,那么
对应的逆元是
。
void init() { inv[1]=1; for(int i=2; i<N; i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod; }