您的位置:首页 > 其它

取模运算

2015-07-17 18:56 330 查看

运算性质

(A+B) mod C = (A mod C + B mod C) mod C

(A-B) mod C = (A mod C - B mod C) mod C

(A * B) mod C = (A mod C) * (B mod C) mod C

对于负数的处理

(A-B) mod C=(A%C-B%C+C)%C

加C,使答案在0..C-1内

乘法取模

若C较大,则容易乘的结果超出long long 的范围

采用类似快速幂的方法,将乘法改为加法,时间多一个log

int mul(int a,int b,int MOD){
int ans=0;
while(b){
if(b&1)(ans+=a)%=MOD;
(a+=a)%=MOD;
b>>=1;
}
return ans;
}


对于除法的处理

A/B mod C

需要求B关于C的逆元

逆元存在,当且仅当B,C互质

求逆元的方法:解线性同余方程B*x=1(mod C)

转化为Bx-Cy=1,用扩展欧几里得算法可解

或者利用欧拉定理,可知 B^(phi(C)-1)即为x的解

注意,逆元是唯一的,同余系在mod 质数时是封闭的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  取模 快速乘 逆元