妈妈呀我终于会写乘法逆元+排列组合了。
1 void exgcd(int a,int b,int&x,int&y){ 2 if(b==0){x=1;y=0;return;}exgcd(b,a%b,x,y);int t=x;x=y;y=t-a/b*y; 3 } 4 int qpow(int x,int y){ 5 int ans=1;x%=P;for(int i=y;i;i>>=1,x=x*x%P)if(i&1)ans=ans*x%P;return ans; 6 } 7 int ine(int T){ 8 int x,y;exgcd(T,P,x,y);x%=P;while(x<=0)x+=P;return x; 9 } 10 int C(int n,int m){ 11 int s1=1,s2=1;if(m>n-m)m=n-m; 12 for(int i=1;i<=m;i++){ 13 s1=s1*(n-i+1)%P; 14 s2=s2*i%P; 15 } return s1*ine(s2)%P; 16 }
时间: 2024-10-10 07:32:14