RT,最后一个点2.02s,死活卡不过去……
#include<iostream>
#include<cstdio>
#define ll long long
#define M 20100403
using namespace std;
int p,q;
inline int mod(int x,int y)
{return (x%y+y)%y;}
int tyfc(int a,int b,int m)//ax=b(mod m)
{
// printf("%d %d %d\n",a,b,m);
if(a==b) return 1;
int y=tyfc(/*mod(-m,a)*/-m%a,mod(b,a),a);
return mod((b+(ll)m*(ll)y)/a,m);
}
inline int Cmod(int x,int y,int z)//C^x_y%z
{
ll ans=1;
for(register int i=1;i<=y;i++)
ans=(ans*(ll)i)%z;
for(register int i=1;i<=x;i++)
ans=(ans*(ll)tyfc(i,1,z))%z;
for(register int i=1;i<=y-x;i++)
ans=(ans*(ll)tyfc(i,1,z))%z;
// cout<<ans<<endl;
return (int)ans;
}
int main()
{
// p=q=1e6;
scanf("%d%d",&p,&q);
printf("%d",mod(Cmod(q,p+q,M)-Cmod(q-1,p+q,M),M));
return 0;
}
好吧,我求逆元写的比较奇怪,这里解释一下:
ax≡b(modm)
ax−my=b
−my≡b(moda)
(−mmoda)y≡b(moda)
从而递归求解。
求助各位大佬!