Skip to content

Commit a0d14f9

Browse files
authored
Update Readme.md
1 parent 89f0dd5 commit a0d14f9

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

Template/Inverse_Element/Readme.md

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,40 @@
11
CF中经常会要求这样输出结果:```Let this probability be represented as an irreducible fraction x/y. You have to print x⋅y^−1 mod 998244353, where y^−1 is the inverse element of y modulo 998244353 (such integer that y⋅y−1 has remainder 1 modulo 998244353).```
22

3-
这里的inverse element并不是指的倒数,而是逆元。y的逆元写作y^-1,满足这样的性质:
3+
这里的inverse element并不是指的倒数,而是逆元。y的逆元写作y^-1,
4+
5+
更一般地,我们说如果a和b满足这样的性质:
6+
```
7+
x / a ≡ x * b (mod M)
8+
```
9+
从形式上来看,b好像就与1/a(在同余的意义上)等价,所以我们称b就是a的逆元,记做 b = a^-1(反之也成立)。
10+
对于a而言,存在逆元的充要条件是a与M互质。当然,我们做题时M一般都已经是质数。
11+
12+
#### 逆元的计算方法
13+
14+
##### 方法1:
415
```
5-
x / y = x * y^-1 (mod M), M is a prime
16+
a^-1 ≡ (M- [M/a] )(M%a)^-1(mod M),其中[]是向下取整。
617
```
7-
逆元的计算方法如下:
18+
19+
##### 方法2:快速幂法
20+
根据费马小定理,我们有
821
```
9-
a^-1 = (M- [M/a] )(M%a)^-1(mod M),其中[]是向下取整。
22+
a^-1 ≡ a ^ (M-2)
1023
```
11-
代码如下,可以作为模板记下来。
24+
显然,我们需要利用快速幂来计算这个数。
25+
26+
##### 方法3:线性求逆元
27+
如果我们想求1,2,3...N 每个数的逆元:
1228
```cpp
13-
const ll N=1e6+7,mod=998244353;
29+
const ll N=1e6+7, mod=998244353;
1430
ll inv[N];
1531
for(inv[1]=1,i=2;i<N;++i)
1632
inv[i]=(mod-mod/i)*inv[mod%i]%mod
1733
```
34+
35+
#### 逆元的一些性质
1836
逆元的计算有如下的性质:
1937
```
20-
x1/y1 + x2/y2 = x1 * y1^-1 + x2 * y2^-1 (mod M)
21-
x1/y1/y2 = x1 * y1^-1 * y2^-1 (mod M)
38+
x1/y1 + x2/y2 x1 * y1^-1 + x2 * y2^-1 (mod M)
39+
x1/y1/y2 x1 * y1^-1 * y2^-1 (mod M)
2240
```

0 commit comments

Comments
 (0)