P3811 【模板】乘法逆元

/* #include<cstdio> #include<iostream> #include<algorithm> //#include<queue> //#include<vector> //#include<bits/stdc++.h> #define ll long long #define ddd printf("-----------------------\n"); using namespace std; const int maxn=1e1 ; int x,y,n,p; void exgcd(int a,int b,int &x,int &y){ if(b==0){ x=1,y=0;return;} exgcd(b,a%b,y,x); y-=(a/b)*x; } int main() { ios::sync_with_stdio(false); cin>>n>>p; for(int i=1;i<=n;i++) { x=0,y=0; exgcd(i,p,x,y); cout<<(x%p+p)%p<<endl; } return 0; }*/ /* //TLE_83分 #include<cstdio> #define ll long long using namespace std; int n,p; inline ll ksm(ll a,ll b){ ll ans=1; a%=p; while(b){ if(b&1) ans=ans*a%p; a=a*a%p; b>>=1; } return ans%p; } void write(ll x){ if(x<0) putchar('-'),x=-x; if(x>9) write(x/10);putchar(x%10^48); } int main(){ scanf("%d%d",&n,&p); for(int i=1;i<=n;i++) write(ksm(i,p-2)),putchar('\n'); return 0; }*/ #include<cstdio> #include<iostream> #include<algorithm> //#include<queue> //#include<vector> #include<bits/stdc++.h> #define ll long long #define ddd printf("-----------------------\n"); using namespace std; const int maxn=3e6+10 ; ll n,p,inv[maxn]; int main() { //ios::sync_with_stdio(false); cin>>n>>p; inv[1]=1; cout<<inv[1]<<endl; for(int i=2;i<=n;i++) inv[i]=(p-p/i)*inv[p%i]%p,printf("%lld\n",inv[i]); return 0; }