【模板】模意义下的乘法逆元
题目背景
这是一道模板题
题目描述
给定 n,pn,pn,p 求 1∼n1\sim n1∼n 中所有整数在模 ppp 意义下的乘法逆元。
这里 aaa 模 ppp 的乘法逆元定义为 ax≡1(modp)ax\equiv1\pmod pax≡1(modp) 的解。
输入格式
一行两个正整数 n,pn,pn,p。
输出格式
输出 nnn 行,第 iii 行表示 iii 在模 ppp 下的乘法逆元。
样例 #1
样例输入 #1
10 13
样例输出 #1
1
7
9
10
8
11
2
5
3
4
提示
$ 1 \leq n \leq 3 \times 10 ^ 6,,,n < p < 20000528 $。
输入保证 $ p $ 为质数。
代码
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
using ll = long long;
vector<ll> compute_inverses(ll n, ll p) {
vector<ll> inv(n + 1);
inv[1] = 1;
for (int i = 2; i <= n; i++) {
inv[i] = -(p / i) * inv[p % i];
inv[i] = (inv[i] % p + p) % p; // 防止负数
}
return inv;
}
void solve() {
int n, p;
cin >> n >> p;
vector<ll> inv = compute_inverses(n, p);
for (int i = 1; i <= n; i++) {
cout << inv[i] << endl;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}
- 线性求逆元
6)]
[外链图片转存中…(img-lu6euieF-1733312046476)]
[外链图片转存中…(img-h3mVdMFh-1733312046476)]