*【组合数:lucas定理】序列统计
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
Description
【题意】给定三个正整数 $N \ L \ R$,统计长度在 $1$ 到 $N$ 之间,元素大小都在 $L$ 到 $R$ 之间的单调不降序列的数量。输出答案对 $10^6+3$ 取模的结果。
【输入格式】
第一行一个整数 $T$($1 \le T \le 100$) ,表示测试数据数。
每组数据一行三个整数 $N \ L \ R$ ($1 \le N \le 10^9$;$L \le R \le 10^9$)。
【输出格式】
每组数据一行行一个整数,表示所求出的答案对 $10^6+3$ 取模的结果。
【样例输入】
2
1 4 5
2 4 5
【样例输出】
2
5
【样例说明】
满足条件的2个序列为[4]和[5]。
Hint

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL P=1000003;
LL fac[1110000];
LL qpow(LL a,LL b)
{
LL ans=1%P;a%=P;
for(;b>0;b>>=1)
{
if(b&1)ans=ans*a%P;
a=a*a%P;
}
return ans;
}
LL C(LL n,LL m)
{
if(n<m) return 0;
return fac[n]*qpow(fac[m],P-2)%P*qpow(fac[n-m],P-2)%P;
}
LL Lucas(LL n,LL m)
{
if(m==0) return 1;
return C(n%P,m%P)*Lucas(n/P,m/P)%P;
}
int main()
{
LL T,n,m,l,r;
cin>>T;
fac[0]=1;for(int i=1;i<=P;i++)fac[i]=fac[i-1]*i%P;
while(T--)
{
cin>>n>>l>>r;
LL ans= (Lucas(r-l+1+n,n)-1+P )%P;
printf("%lld\n",ans);
}
return 0;
}