[bzoj2186] [Sdoi2008]沙拉公主的困惑
Posted czllgzmzl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj2186] [Sdoi2008]沙拉公主的困惑相关的知识,希望对你有一定的参考价值。
膜了半天sxt和网上题解。。。
http://www.cnblogs.com/BLADEVIL/p/3490321.html
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #define ll long long 5 using namespace std; 6 const int maxn=10023333,mx=1e7; 7 int p[maxn],pnum; 8 int jc[maxn],f[maxn]; 9 bool gg[maxn]; 10 int i,j,k,n,m,modd; 11 12 int ra;char rx; 13 inline int read(){ 14 rx=getchar(),ra=0; 15 while(rx<\'0\'||rx>\'9\')rx=getchar(); 16 while(rx>=\'0\'&&rx<=\'9\')ra*=10,ra+=rx-48,rx=getchar();return ra; 17 } 18 19 inline int poi(int a,int b){ 20 int c=1; 21 while(b){ 22 if(b&1)c=1ll*c*a%modd; 23 b>>=1,a=1ll*a*a%modd; 24 }return c; 25 } 26 inline void getp(){ 27 register int i,j; 28 for(i=2;i<=mx;i++){ 29 if(!gg[i])p[++pnum]=i; 30 for(j=1;j<=pnum&&1ll*p[j]*i<=mx;j++){ 31 gg[p[j]*i]=1; 32 if(!i%p[j])break; 33 } 34 } 35 } 36 inline void getphi(){ 37 f[1]=1; 38 for(register int i=2;i<=mx;i++)if(!gg[i])f[i]=1ll*f[i-1]*(i-1)%modd; 39 else f[i]=1ll*f[i-1]*i%modd; 40 } 41 int main(){int t; 42 t=read(),modd=read(); 43 getp(), 44 getphi(); 45 for(i=jc[0]=1;i<=mx;i++)jc[i]=1ll*jc[i-1]*i%modd; 46 while(t--){ 47 n=read(),m=read(); 48 printf("%lld\\n",1ll*f[m]*jc[n]%modd*poi(jc[m],modd-2)%modd); 49 } 50 } 51
以上是关于[bzoj2186] [Sdoi2008]沙拉公主的困惑的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ2186[Sdoi2008]沙拉公主的困惑 线性筛素数