题目描述
给你一个数列 \(a\),要求在 \(O(n)\) 的时间复杂度内求出 \(a_i\) 的逆元。
具体思路
令 $$f_i=\prod_{j=1}^i a_j$$
令 $$s_i=\prod_{j=1}^i (a_j^{-1})= (\prod_{j=1}^i a_j)^{-1}$$
那么我们可以用费马小定理或者 exgcd 求出 \(s_n=f_n^{-1}\)。
考虑 \(s_i\) 的递推式。
由于我们知道:$$a_i^{-1} \times a_i=1$$
有:$$s_i=\prod_{j=1}^i (a_j^{-1})= \prod_{j=1}^{i+1} (a_j^{-1}) \times a_{i+1}=s_{i+1} \times a_{i+1}$$
令 $$inv_i=a_i^{-1}$$
显然 $$s_1=inv_1$$
考虑 \(inv_i\) 的递推式。
\[inv_i=a_i^{-1}=\prod_{j=1}^i a_j^{-1} \times \prod_{j=1}^{i-1} a_j=s_i \times f_{i-1} \] 标签:inv,times,逆元,线性,prod,递推 From: https://www.cnblogs.com/reclusive2007/p/17777954.html