[洛谷3811]【模板】乘法逆元

思路:

线性推逆元模板。
核心代码: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 }

 

posted @ 2017-08-14 15:01  skylee03  阅读(155)  评论(0编辑  收藏  举报