抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

题目传送门

题意

\(1\sim n\)中所有整数在模\(p\)意义下的乘法逆元。

题解

\(a=\left\lfloor\frac{P}{i}\right\rfloor,b=P\bmod i\),则\(ai+b=P\)

\(ai+b\equiv 0 \pmod P\)

\[\begin{align*} &\therefore \frac{ai+b}{ib}\equiv 0 \pmod P \\ &\therefore ab^{-1}+i^{-1}\equiv 0 \pmod P \\ &\therefore\ i^{-1}\equiv -ab^{-1} \pmod P \end{align*}\]

\[inv(i)=\left(P-\left\lfloor\frac{P}{i}\right\rfloor\right)\cdot inv(P\bmod i)\bmod P\]

于是\(O(n)\)递推求一下就可以了。

代码

1
2
3
4
5
6
7
8
9
10
11
#include <cstdio>
int n, P, inv[3000005];
void print(int x){
if (x < 10) putchar(x + 48); else print(x / 10), putchar(x % 10 + 48);
}
int main(){
scanf("%d%d", &n, &P);
inv[1] = 1;
for (register int i = 2; i <= n; ++i) inv[i] = 1ll * (P - P / i) * inv[P % i] % P;
for (register int i = 1; i <= n; ++i) print(inv[i]), putchar('\n');
}

评论