关于线性递推求逆元不同的写法

P3811 【模板】模意义下的乘法逆元

代码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


|