大数取模的处理方法

当求n mod m,n很大,但是m又在int范围内时将大数写成以下形式:如1234 = ((1*10+2)*10+3)*10+4 ,然后每步取余,所以有:

/*用str存n*/
ll qmod(){
	int len = strlen(str);
	long long ans = 0;
	for(int i = 0;i < len;i++){
		ans = (long long)(((long long)ans*10+str[i]-'0')%mod);
	}
	return ans;
} 

当求C(n,m)%p,n和m都很大时,可以用卢卡斯定理,也可以用C(n,m) = n!/((n-m)!m!)=n(n-1)(n-2)(n-m+1)/m!,那么可以求(n(n-1)*(n-2)…(n-m+1))%p,再去乘以m!关于mod的逆元,最后结果再对mod求余

例如牛客挑战赛37B

发布了27 篇原创文章 · 获赞 0 · 访问量 335

猜你喜欢

转载自blog.csdn.net/weixin_44083561/article/details/104435356