代码1
```cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=3*1e6+5;
int n,p,inv[maxn];
signed main(){
scanf("%lld%lld",&n,&p);
inv[1]=1;printf("1\n");
for(int i=2;i<=n;i++){
inv[i]=(p-(p/i))*inv[p%i]%p;printf("%lld\n",inv[i]);
}
return 0;
}
```
代码2
```cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=3*1e6+5;
int n,p,inv[maxn];
signed main(){
scanf("%lld%lld",&n,&p);
inv[1]=1;printf("1\n");
for(int i=2;i<=n;i++){
inv[i]=p-(p/i)*inv[p%i]%p;printf("%lld\n",inv[i]);
}
return 0;
}
```
by Ayaka_T @ 2023-05-10 20:21:09
@[Ayaka_T](/user/107568)
$-(p/i)inv(p\%i),(p-(p/i))inv(p\%i),p-(p/i)inv(p\%i)$ 这三个东西在 $\bmod~p$ 意义下本来就是一样的啊。错了说明你的取模有问题
by XeCtera @ 2023-05-10 20:21:49
(我这两个代码在洛谷上都对了,但是在本校oj第二种写法错误了,就是搞不懂为什么
by Ayaka_T @ 2023-05-10 20:29:12
@[icyM3tra](/user/38785)
by Ayaka_T @ 2023-05-10 20:30:50
@[Ayaka_T](/user/107568)
你的这两份代码在 $1\le n<p<2^{31}$ 的范围内应该是不会出错的。可能是因为其它的细节问题?
by XeCtera @ 2023-05-10 20:34:09
@[icyM3tra](/user/38785)
我人都傻了,一模一样的题目,直接复制过去的代码,好像编译语言也是一样的,但就是WA,都不知道是我们oj数据有问题还是自己代码的问题
by Ayaka_T @ 2023-05-10 20:38:04
那我这种写法应该也是可行的吧
by Ayaka_T @ 2023-05-10 20:38:26
@[Ayaka_T](/user/107568) 是可行的
by XeCtera @ 2023-05-10 20:40:54
@[icyM3tra](/user/38785) 行的,谢谢,我回头问一下教练
by Ayaka_T @ 2023-05-10 20:44:57