首页 > 其他 > 详细

中国剩余定理模板&俄罗斯乘法

时间:2016-07-30 21:04:45      阅读:230      评论:0      收藏:0      [点我收藏+]

 

void ex_gcd(ll a,ll b,ll &d,ll &x,ll &y){
    if(!b){d=a;x=1LL;y=0LL;}
    else {ex_gcd(b,a%b,d,y,x);y-=x*(a/b);}
}
/////大数乘法取模转换成加法取模,避免爆long long ll mult(ll a,ll k,ll m){ ll res
=0; while(k){ if(k&1LL)res=(res+a)%m; k>>=1; a=(a<<1)%m; } return res; }
///// 这段在正常的中国剩余定理中可以去掉 ll china(
int n,ll *a,ll *m){ ll M=1,d,y,x=0; for(int i=0;i<n;i++)M*=m[i]; for(int i=0;i<n;i++){ ll w=M/m[i]; ex_gcd(m[i],w,d,d,y); x=(x+mult(y,mult(w,a[i],M),M))%M; } return (x+M)%M; }

 

中国剩余定理模板&俄罗斯乘法

原文:http://www.cnblogs.com/pk28/p/5721610.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!