From: 雷蒻 <34390285+hsfzLZH1@users.noreply.github.com> Date: Fri, 2 Aug 2019 23:32:03 +0000 (+0800) Subject: Update inverse.md X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=ab95b446bd258b36725191104354202fa6dffc19;p=oi-wiki%2Fmain.git Update inverse.md 说明了递归求逆元的复杂度,注明的知乎讨论 --- diff --git a/docs/math/inverse.md b/docs/math/inverse.md index 311a01fa..05e3c11b 100644 --- a/docs/math/inverse.md +++ b/docs/math/inverse.md @@ -51,7 +51,9 @@ inline int qpow(long long a, int b) { ### 线性求逆元 -但是如果要求的很多,以上两种方法就显得慢了,很有可能超时,所以下面来讲一下如何线性求逆元。 +求出 $1,2,...,n$ 中每个数关于 $p$ 的逆元。 + +如果对于每个数进行单次求解,以上两种方法就显得慢了,很有可能超时,所以下面来讲一下如何线性( $O(n)$ )求逆元。 首先,很显然的 $1^{-1} \equiv 1 \pmod p$ ; @@ -85,7 +87,9 @@ for (int i = 2; i <= n; ++i) inv[i] = (long long)(p - p / i) * inv[p % i] % p; 递归求解 $j^-1$ , 直到 $j=1$ 返回 1。 -中间优化可以加入一个记忆化来避免多次递归导致的重复。 +中间优化可以加入一个记忆化来避免多次递归导致的重复,这样求 $1,2,...,n$ 中所有数的逆元的时间复杂度仍是 $O(n)$ 。 + +**注意** :如果用以上给出的式子递归进行单个数的逆元求解,目前已知的时间复杂度的上界为 $O(n^{\frac 1 3})$ ,具体请看 [知乎讨论](https://www.zhihu.com/question/59033693) 。算法竞赛中更好地求单个数的逆元的方法有扩展欧几里得法和快速幂法。 ### 线性求任意 n 个数的逆元