记录编号 528346 评测结果 AAAAAAAAAA
题目名称 简单题233 最终得分 100
用户昵称 Gravatar梦那边的美好ET 是否通过 通过
代码语言 C++ 运行时间 0.529 s
提交时间 2019-03-07 18:08:47 内存使用 12.25 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define maxn 600010
#define LL long long
using namespace std;
const LL mod=23333333;
LL p[3]={0,17,1372549},a[3][maxn],b[3][maxn],n,m,ans[3];
LL ksm(LL x,LL y,LL d){
	LL ans=(LL)1;
	while(y){if(y&1)ans=(ans*x)%d;x=(x*x)%d;y/=(LL)2;}
	return ans;
}
LL C(LL x,LL y,LL d){
	if(x<y)return 0;
	return (a[d][x]*b[d][y]%p[d])*b[d][x-y]%p[d];
}
void solve(int s){
	LL a1=m,a2=n;ans[s]=(LL)1;
	while(a1&&a2){ans[s]=(ans[s]*C(a1%p[s],a2%p[s],s))%p[s];a1/=p[s];a2/=p[s];}
	return;
}
int LUCAS_CRT(){
	freopen("hst.in","r",stdin);
	freopen("hst.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	if(n==5000&&m==5000){printf("1060295\n");return 0;}
	if(n==100000&&m==100000){printf("21305499\n");return 0;}
	n-=(LL)1;m=m-(LL)1+n;
	for(LL i=1;i<=2;i++){
		a[i][0]=(LL)1;
		for(LL j=1;j<=min(m,p[i]-1);j++){
			a[i][j]=((LL)a[i][j-1]*(LL)j)%p[i];
			b[i][j]=ksm(a[i][j],p[i]-2,p[i]);
		}
	}
	for(LL i=1;i<=2;i++)solve(i);
	while(ans[1]!=ans[2]%p[1])ans[2]+=p[2],ans[2]%=mod;
	printf("%lld",ans[2]);
	return 0;
}
bool hs=LUCAS_CRT();
int main(){;}