O(N) 求 1~N 逆元 模板及证明

2019-04-14 12:30发布

class="markdown_views prism-github-gist">

Solution

inv[i]=(momo / i)inv[mo % i] % mo 证明: 设 t=mo / i ,k=mo % i , 则有:ti+k0 (mod mo) 有: tik (mod mo) 两边同时除以 ik 得到: tinv[k]inv[i] (mod mo) 即:inv[i]mo / iinv[mo % i] (mod mo) 即:inv[i](momo / i)inv[mo % i] % mo 证毕。
  • 适用于模数 mo质数的情况,能够 O(N) 时间求出 1N 对模 mo 的逆元。

Code

inv[0]=inv[1]=1; for (int i=2;i<=n;i++) inv[i]=(long long)(mo-mo/i)*inv[mo%i]%mo;