水問題について書いて怠惰正午に優れたものです[]
求\(\和\ limits_ {I = 0} ^ K \ binom {n}は{I} \; MOD \; 2333 \)
] [非常に小さいAモジュラス必ずルーカスを見て
ルーカス定理:\(\ {N-Binom} {K} = \ {N-Binom / MOD {K} / * MOD} \ {N-Binom%MOD%MOD K} {} \)
次いで] [[ハッピー分割ブロック波で、その後同様のアイテムの幸福合併の波
设\(F(N、K)= \和\ limits_ {I = 0} ^ K \ binom {n}は{I} \)
于是有\(F(N、K)= F(N / V、K / MOD-1)* F(N \%Vは、V-1)+ \和\ limits_ {I = 0} ^ {K \% V} \ {N binom / V {K} / V} \ {N binom \%} {V I} \)
快楽の波に再帰処理[]
[私はに、ああ、[A]はありませんTのメモリマップを使用する理由言っ]を
#include <bits/stdc++.h>
#define ll long long
#define For(i,x,y) for(int i=(x);i<=(y);++i)
#define Rof(i,x,y) for(int i=(x);i>=(y);--i)
#define mod 2333
using namespace std;
int pre[2334][2334],C[2334][2334];
int Lucas(ll x,ll y){
if(!y) return 1;
if(x<y) return 0;
if(x==y) return 1;
return C[x%mod][y%mod]*Lucas(x/mod,y/mod)%mod;
}
int F(ll n,ll k){
if(k<0 || n<0) return 0;
if(k<mod && n<mod) return pre[n][k];
return (1ll*Lucas(n/mod,k/mod)*pre[n%mod][k%mod]%mod+1ll*F(n/mod,k/mod-1)*pre[n%mod][mod-1]%mod)%mod;
}
int main(){
ll n,k;int T;
For(i,0,mod) C[i][0]=1;
For(i,1,mod) For(j,1,i) C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
For(i,0,mod) pre[i][0]=1;
For(i,0,mod) For(j,1,mod-1) pre[i][j]=(pre[i][j-1]+C[i][j])%mod;
scanf("%d",&T);
while(T--){
scanf("%lld%lld",&n,&k);
printf("%d\n",F(n,k));
}
}