文章
逆元
线性求 到 在模 意义下的乘法逆元(保证 为质数且 ),使用的是线性递推递推公式,时间复杂度为 。
递推公式推导
设模数为 ,当前要求逆元的数为 。令:
在模 意义下,有:
两边同乘 :
移项可得:
将 和 代回:
为了保证结果在 范围内,加上 取模:
由于 ,在计算 时, 已经求出,因此可以直接 递推。
代码实现
#include <bits/stdc++.h>
using namespace std;
const int N = 3e6 + 5;
long long inv[N];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, p;
cin >> n >> p;
inv[1] = 1;
for (int i = 2; i <= n; i++) {
inv[i] = (long long)(p - p / i) * inv[p % i] % p;
}
for (int i = 1; i <= n; i++) {
cout << inv[i] << "\n";
}
return 0;
}