取模运算
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 质数时是封闭的。
相关文章推荐
- PHP取余函数介绍MOD(x,y)与x%y
- 求偶数之取模运算(%)与位运算(&)速度之比较
- 对于逆元的理解
- 对于逆元的理解
- [计算机基础]Mod Function and Negative Numbers
- 【数论】【逆元】【O(n)时间求出1~n对模MOD的逆元】
- 【SDOI2008】【BZOJ2186】【沙拉公主的困惑】【题解】【数论】
- 求逆元方法总结
- HDU 4869 求逆元,反转硬币题
- 逆元+树形dp-memset-hdu4661-Message Passing
- 求模m的逆元
- 求1-10000之间的同构数
- 编程之美挑战赛 大神与三位小伙伴 题解
- 大数运算实现(C++)
- hdu 4661 Message Passing(树形dp)
- POLYA合集 II
- POJ 1845 Sumdiv 解题报告(二分 & 逆元)
- 负数的除法和取模运算规则
- 编程语言中,取余和取模的区别到底是什么?
- oracle 取余/求积