乘法逆元-线性算法
题目
https://www.luogu.com.cn/problem/P3811 给定 求 中所有整数在模 意义下的乘法逆元。 这里 模 的乘法逆元定义为 的解。
思路
- 费马小定理:逆元为
- 扩展欧几里得算法:逆元为
- 线性算法
首先有,设,是商,是余数,则两边同时乘上得: ,移项得 因此 注意要开LL
代码
/**
⠀⠀⠀⠀⠰⢷⢿⠄
⠀⠀⠀⠀⠀⣼⣷⣄
⠀⠀⣤⣿⣇⣿ ⣿⣧⣿⡄
⢴⠾⠋⠀⠀⠻⣿⣷⣿⣿⡀
0 ⠀⢀⣿⣿⡿⢿⠈⣿
⠀⠀⠀⢠⣿⡿⠁⠀⡊⠀⠙
⠀⠀⠀⢿⣿⠀⠀⠹⣿
⠀⠀⠀⠀⠹⣷⡀⠀⣿⡄
⠀⠀⠀⠀⣀⣼⣿⠀⢈⣧
*/
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define debug(x) cout<<"a["<<x<<"]="<<a[x]<<endl;
#define pr(x) cout<<x<<endl;
#define ct(x) cout<<x<<" ";
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
typedef long long LL;
typedef pair<int, int> PII;
const int INF = 0x3f3f3f3f;
const int N = 3e6 + 10;
int n,p;
LL nvi[N];
int main() {
IOS;
#ifndef ONLINE_JUDGE
freopen("/Users/houyunfei/CLionProjects/MyCppWorkSpace/test.in", "r", stdin);
freopen("/Users/houyunfei/CLionProjects/MyCppWorkSpace/test.out", "w", stdout);
#endif
cin>>n>>p;
nvi[1]=1;
pr(1)
for(int i=2;i<=n;i++){
nvi[i]=(p-p/i)*nvi[p%i]%p;
pr(nvi[i])
}
return 0;
}