TLE了13个测试点,求救

题目:

https://www.luogu.com.cn/problem/P4345 这里

代码:

#include<bits/stdc++.h>
using namespace std;
const int p=2333;
long long ny(long long a,long long b){
	long long c=1;    
	a%=p;   
	while(b > 0){                
		if(b%2 == 1)c=(a*c)%p;       
		b/=2;       
		a=(a*a)%p;    
	}    
	return c;
}
long long c(long long n1,long long i1){
	if(n1<i1)return 0;
	if(n1 == i1 || i1 == 0)return 1;
	if(i1 == 1 || n1 - i1 == 1)return n1;
	if(i1 > n1 - i1)i1 = n1 - i1;
	long long fz=1,fm=1,sum;
	for(long long j=1;j<=i1;j++){
		fz=fz*(n1-j+1)%p;
		fm=fm*j%p;
	}
	long long ny_fm=ny(fm,p-2);
	sum=fz*ny_fm%p;
	return sum;
}
long long lucas(long long n,long long i){
	if(i == 0)return 1;
	if(n < i)return 0;
	long long a=n%p,b=i%p,n1=(n-a)/p,i1=(i-b)/p;
	long long sum=c(a,b)*lucas(n1,i1)%p;
	return sum;
}
int main(){
	int t;
	long long sum=0;
	long long n,k;
	cin>>t;
	int t1=t;
	while(t!=0){
		t--;
		cin>>n>>k;
		for(long long i=0;i<=k;i++){
			sum+=lucas(n,i);
			sum=sum%p;
		}
		cout<<sum;
		sum=0;
	}
	return 0;
}