线性求逆元

#include<cstdio>
#include<cstring>
const int  maxn=1e5+7;
using namespace std;

inline int read(){
  int x=0,f=1;
  char ch=getchar();
  while(ch>'9'||ch<'0'){
    if(ch=='-') f=-1;
    ch=getchar();
  }
  while(ch>='0'&&ch<='9'){
    x=(x<<1)+(x<<3)+(ch^48);
    ch=getchar();
  }
  return x*f;
}
long long inv[maxn];

void inverse(int mod){
  inv[0]=inv[1]=1;
  for(int i=2;i<maxn;i++){
    inv[i]=((mod-mod/i)*inv[mod%i])%mod;
  }
}
  int main(){
int n,p;
n=read(),p=read();
inverse(p);
for(int i=1;i<=n;i++){
  printf("%lld
",inv[i]);
}
  return 0;
}
原文地址:https://www.cnblogs.com/scy-fisheep/p/13848234.html