线性求逆元

题目描述

给你一个数列 \(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} \]

posted @ 2023-10-20 20:26  reclusive2007  阅读(14)  评论(0)    收藏  举报