您的位置:首页 > 其它

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

2016-07-30 19:59 183 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: