思路:
线性推逆元模板。
核心代码:inv[i]=(long long)(p-p/i)*inv[p%i]%p;
注意中间结果要开long long,否则会上溢,只有32分。
1 #include<cstdio> 2 #include<cctype> 3 inline int getint() { 4 char ch; 5 while(!isdigit(ch=getchar())); 6 int x=ch^'0'; 7 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0'); 8 return x; 9 } 10 int main() { 11 int n=getint(),p=getint(); 12 int inv[n+1]; 13 inv[1]=1; 14 printf("%d\n",inv[1]); 15 for(int i=2;i<=n;i++) { 16 inv[i]=(long long)(p-p/i)*inv[p%i]%p; 17 printf("%d\n",inv[i]); 18 } 19 return 0; 20 }
本文介绍了一种高效的线性推逆元算法实现方法,并提供了完整的C++代码示例。该算法利用模数p下的费马小定理,通过线性递推的方式计算每个整数i(1≤i≤n)的逆元。
850

被折叠的 条评论
为什么被折叠?



