每次写麻烦存一下
const int MN=1e6; ll jc[MN+10],jc2[MN+10]; int pri[MN+10],phi[MN+10],cntpri; bool vispri[MN+10]; ll fsp(int x,int y) { if (y==0) return 1; if (y==1) return x; ll ans=fsp(x,y/2); ans=ans*ans%mo; if (y%2==1) ans=ans*x%mo; return ans; } ll C(int n,int m) { if (n<m) return 0; return jc[n]*jc2[m]%mo*jc2[n-m]%mo; } int gcd(int x,int y) { if (!y) return x; return gcd(y,x%y); } inline void prime(){ jc[0]=jc2[0]=1; rep(i,1,1e6) jc[i]=jc[i-1]*i%mo; jc2[1000000]=fsp(jc[1000000],mo-2); dep(i,1e6-1,1) jc2[i]=jc2[i+1]*(i+1)%mo; phi[1]=1; rep(i,2,MN){ if(!vispri[i]) { pri[++cntpri]=i; phi[i]=i-1;} for(int j=1;j<=cntpri&&i*pri[j]<=MN;++j){ vispri[i*pri[j]]=1; if(i%pri[j]==0) { phi[i*pri[j]]=phi[i]*pri[j]; break; } phi[i*pri[j]]=phi[i]*(pri[j]-1); } } }