P3811 【模板】模意义下的乘法逆元
题目背景
这是一道模板题
题目描述
给定 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>
const int N = 3e6+10;
typedef long long ll;
using namespace std;
ll n,p;
ll inv[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>p;
inv[1]=1;
cout<<1<<"\n";
for(int i=2;i<=n;i++)
{
inv[i]=(p-inv[p%i]*(p/i)%p);
cout<<inv[i]<<"\n";
}
return 0;
}