Skip to content
Hardy Hardy

文章

逆元

37 0 0

线性求 在模 意义下的乘法逆元(保证 为质数且 ),使用的是线性递推递推公式,时间复杂度为


递推公式推导

设模数为 ,当前要求逆元的数为 。令:

在模 意义下,有:

两边同乘

移项可得:

代回:

为了保证结果在 范围内,加上 取模:

由于 ,在计算 时, 已经求出,因此可以直接 递推。


代码实现

#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;
}