手推公式:
令
M=R−L+1
,
则答案为:
∑Ni=1CM−1i+M−1=∑MN+M−1
模数较小,
O(mod)
的预处理,预处理逆元就可以配合
Lucas
定理
O(log)
地计算了。
#include<set>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int mod=1000003;
void read(long long &res){
static char ch;register long long flag=1;
while((ch=getchar())<'0'||ch>'9')if(ch=='-')flag=-1;res=ch-48;
while((ch=getchar())>='0'&&ch<='9')res=res*10+ch-48;res*=flag;
}
long long fac[mod+5]={1},inv[mod+5]={0,1},t,n,m,l,r,i;
void init(){
for(i=1;i<mod;++i)fac[i]=fac[i-1]*i%mod;
for(i=2;i<mod;++i)inv[i]=(mod-mod/i)*inv[mod%i]%mod;
for(inv[0]=1,i=1;i<mod;++i)(inv[i]*=inv[i-1])%=mod;
}
long long C(int x,int y){
if(x<y)return 0;
if(x<mod&&y<mod)return fac[x]*inv[y]%mod*inv[x-y]%mod;
return C(x/mod,y/mod)*C(x%mod,y%mod)%mod;
}
int main(){
init();
read(t);
while(t--){
read(n),read(l),read(r);
m=r-l+1;
printf("%lld\n",(C(n+m,m)+mod-1)%mod);
}
return 0;
}