码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-07-30 21:07:05      阅读:140      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!