1 条题解
-
0

#include<bits/stdc++.h> using namespace std; typedef long long LL; LL inv[3110000]; int main() { LL n,p;scanf("%lld%lld",&n,&p); inv[1]=1; for(LL i=2;i<=n;i++) { inv[i]=(p-p/i)*inv[p%i] % p; } for(LL i=1;i<=n;i++) printf("%lld\n",inv[i]); return 0; }我们没有对 inv[0] 进行定义却可能会使用它:当 i | p 成立时,我们在代码中会访问 inv[p % i],也就是 inv[0], 这是因为当 i | p 时不存在 i 的逆元 i^{-1}。 线性同余方程 中指出,如果 i 与 p 不互素时不存在相应的逆元 (当一般而言我们会使用一个大素数,比如 10^9 + 7 来确保它有着有效的逆元)。 因此需要指出的是:如果没有相应的逆元的时候,inv[i] 的值是未定义的。
- 1
信息
- ID
- 393
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 133
- 已通过
- 44
- 上传者