O(1) 快速乘

有一些毒瘤题,数据大小不光会炸\(int\),有时甚至会炸\(long long\)。这时一个\(O(1)\)的防爆乘就很重要了

\(a*b%p\)可以转化为\(a*b-[a*b/p]*p\) 这里用了\(long double\)舍弃低位保留18位的特性

最后不要忘记特判

inline ll C(ll a,ll b,ll p){
	a%=p,b%=p;
	ll c=a*b-(ll)((long double)a*b/p+0.5)*p;
	return c<0?c+p:c;
}
posted @ 2018-11-08 11:03  nianheng  阅读(459)  评论(0编辑  收藏  举报