【模板】乘法逆元

扩欧求逆元:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 
 5 int n, b;
 6 
 7 int ex_gcd(int a, int b, int &x, int &y) {
 8     if(b == 0) {
 9         x = 1, y = 0;
10         return a;
11     }
12     int g = ex_gcd(b, a % b, y, x);
13     y -= a / b * x;
14     return g;
15 }
16 
17 int main() {
18     cin >> n >> b;
19     for(int a = 1; a <= n; a++) {
20         int x, y;
21         int g = ex_gcd(a, b, x, y);
22         int t = b / g;
23         x = (x % t + t) % t;
24         printf("%d\n", x);
25     }
26 }
扩欧求逆元

线性递推求逆元:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 
 5 const int MAXN = 3000000 + 5;
 6 
 7 int n, p;
 8 int iel[MAXN];
 9 
10 int main() {
11     iel[1] = 1;
12     scanf("%d%d", &n, &p);
13     for(int i = 2; i <= n; i++) {
14              //被注释掉的写法和程序中的写法是等价的
15          //iel[i] = 1LL * (p - p / i) * iel[p % i] % p;
16         iel[i] = - 1LL * (p / i) * iel[p % i] % p;
17         iel[i] = ((iel[i]) % p + p) % p;
18     }
19     for(int i = 1; i <= n; i++)
20         printf("%d\n", iel[i]);
21 }
线性求逆元

要下晚自习了..证明明天补...

猜你喜欢

转载自www.cnblogs.com/devilk-sjj/p/8999837.html