`
guanhuaing
  • 浏览: 1197151 次
文章分类
社区版块
存档分类
最新评论

acm-模运算

 
阅读更多

新浪博客 发表时间 -- 2009-07-26 20:19:43

很多地方用到模运算,这里说明模运算的一些规律,并加以证明。 后续会对这些理论实际的应用加以记录和说明。

1. 模运算是取余运算(记做 % 或者 mod),具有周期性的特点。 m%n的意思是n除m后的余数, 当m递增时m%n呈现周期性特点,并且n越大,周期越长,周期等于n。
<wbr><wbr><wbr><wbr> 例如<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 0 % 20 = 0,1 % 20 = 1, 2 % 20 = 2, 3 % 20 = 3, ..., 19 % 20 = 19<br><wbr><wbr><wbr><wbr><wbr><wbr> 20 % 20 = 0,21 % 20 = 1,22 % 20 = 2,23 % 20 = 3, ...,39 % 20 = 19<br> 2. 如果 m % n = r,那么可以推出如下等式<br><wbr><wbr><wbr><wbr> m = k * n + r (k为大于等于0的整数, r &lt;= m)<br> 3. 同余式, 表示正整数a,b对n取模,它们的余数相同,记做 a ≡ b mod n或者a = b (mod n)。<br><wbr><wbr><wbr> 根据2的等式可以推出 a = kn + b 或者 a - b = kn<br><wbr><wbr><wbr> 证明:<wbr><wbr> ∵ a = k1 * n + r1<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> b = k2 * n + r2<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> ∴ a - b = (k1 - k2) * n + (r1 - r2)<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> a = k * n + (r1 - r2) + b<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> ∵ a, b对n取模同余,r1 = r2<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> ∴ a = k * n + b (k = k1 - k2)<br> 4. 模运算规则, 模运算与基本四则运算有些相似,但是除法例外。其规则如下<br><wbr><wbr><wbr> (a + b) % n = (a % n + b % n) % n<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> (1)<br><wbr><wbr><wbr> (a - b) % n = (a % n - b % n) % n<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> (2)<br><wbr><wbr><wbr> (a * b) % n = (a % n * b % n) % n<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> (3)<br><wbr><wbr><wbr> a<sup>b</sup> % n = ((a % n)<sup>b</sup>) % n<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> (4)<br><br> (1)式证明<br> ∵ a = k1*n + r1</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr> b = k2*n + r2</wbr></wbr>

a % n = r1

b % n = r2

∴(a+b) % n = ((k1+k2)*n + (r1+r2)) % n = (r1+r2) % n = (a % n + b % n)% n
<wbr><wbr><wbr><wbr> 得证<br> (2)式证明同上<br> (3)式证明<br><wbr><wbr><wbr><wbr> a = k1*n + r1<br><wbr><wbr><wbr><wbr><wbr> b = k2*n + r2<br><wbr><wbr><wbr><wbr> (a*b) % n = (k1k2<span style="font-family:Tahoma">n<sup>2</sup></span> + (k1r2+k2r1)n + r1r2) % n = r1r2 % n = (a %n * b %n ) % n<br> (4)式证明<br><wbr><wbr><wbr><wbr><wbr><wbr> 设 a % n = r<br><wbr><wbr><wbr><wbr><wbr> a<sup>b</sup> %n= (a * a * a * a…*a) %n = (a %n * a %n * a %n * … * a %n) %n = r<sup>b</sup> % n = ((a % n) <sup>b</sup>) % n<br><br> 模运算看起来不是很直观,但是可以用来推导出一些有用的东西。 例如(4)式可以用来降幂运算,例如计算62<sup>65</sup> % 133,直接计算的话需要算出62<sup>65</sup> 利用(4)式可以进行降幂运算。<br><wbr><wbr> 62<sup>65</sup> % 133<br> = 62 * 62<sup>64</sup> % 133<br> = 62 * (62<sup>2</sup>)<sup>32</sup> % 133<br> = 62 * 3844<sup>32</sup> % 133<br> = 62 * (3844 % 133)<sup>32</sup> % 133<br> = 62 * 120<sup>32</sup> % 133</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

= 62 * 3616 % 133
= 62 * 998 % 133
= 62 * 924 % 133
= 62 * 852 % 133
= 62 * 43 % 133
= 2666 % 133
= 6

分享到:
评论

相关推荐

    ACM/ICPC模板

    ACM/ICPC模板 内容大概有这些 其他 --高精度模板 --RMQ --改点堆优化的dijkstra算法 --快速付利叶变换 --稳定婚姻问题 --SPFA(最短路快速算法) // thanks to love8909 几何相关 --初等几何学 --多边形几何 --...

    ACM大数模板(c/c++)

    ACM中的常用高精度模板,内容:大数加法,大数乘小数,大数乘大数,大数除法。

    简单acm小模板

    关于acm基本算法,包括位运算,完全数,幂运算等

    [2018 ACM-ICPC 焦作赛区网络赛] G - Give Candies(找规律+快速幂)

    可以达到10^100000,我们只能用字符串读这个数,这样的话我们肯定不能直接用快速幂算,其实有一个性质,2^N模一个质数,它的结果是具有周期性的,周期长度为mod-1,这道题就利用这个周期 性,具体步骤就是:先把N...

    所有ACM所需要的基本算法模板(图论,数论,计算几何,位运算,组合数学等)

    ACM所需要的基本算法模板(图论,数论,计算几何,位运算,组合数学等) 本人曾经就是在学校搞ACM,是我最精心的收藏,给大家分享。想进入ACM的新手和老手都是值得你们学习的!!

    ACM大数四则运算模板函数

    ACM大数四则运算模板函数 包含加减乘除四则运算 比较常用的算法模板

    C++大数模板。ACM必备

    处理大数的模板,C++大数模板。ACM必备

    浙江大学ACM模板

    模板包括几何、组合、结构、数论、数值运算和图论以及树的优化算法等

    浙江大学ACM模板 计算几何,图论,数据结构,经典题的模板

    ACM Fighting! 2 1.计算几何 5 1.1 注意 5 1.2几何公式 6 1.3 多边形 8 1.4多边形切割 11 1.5 浮点函数 12 1.6 面积 18 1.7球面 18 1.8三角形 19 1.9三维几何 22 1.10 凸包 30 1.11 网格 32 1.12 圆 33 1.13 矢量...

    ACM模版代码(已验证)

    ACM常用算法的自制模版,c++语言实现,包括高精度运算,查找,排序,字符串处理,数学问题,计算几何,数论,数据结构,图论及搜索等,代码正确性已验证。

    ACM算法模板和pku代码

    本科参加ACM竞赛的过程中积累下来的一部分算法模板,和自己在PKU上面做的一部分题目。 模板目录结构: 目录: 动态规划 O(n^2)的最长上升子序列 nlogn最长上升子序列 高精度 计算几何 Graham扫描法 两线段交点 凸...

    ACM数论模板

    acm常用的数论模板,集合运算类。有欧几里德、中国剩余定理、欧拉函数等

    ACM模板和一些题目的代码实现

    代码可能涉及素数检测、最大公约数、模运算、同余方程等算法。 三分法:在单峰或单谷函数上查找极值点的高效算法,通过不断缩小搜索区间来逼近解。 模板:预先编写的代码框架,用于快速构建特定类型的程序或算法,...

    acm常用代码及算法

    模取幂运算 4.求解模线性方程 5.求解模线性方程组(中国余数定理) 6.筛法素数产生器 7.判断一个数是否素数 图论: 1.Prim算法求最小生成树 2.Dijkstra算法求单源最短路径 3.Bellman-...

    ACM 内部预定函数

    3.模取幂运算 4.求解模线性方程 5.求解模线性方程组(中国余数定理) 6.筛法素数产生器 7.判断一个数是否素数 8.求子距阵最大和 9.求一个数每一位之和 10.质因数分解 11.高斯消元法解线性方程组 图论: ...

    ACM/ICPC数论报告

    对将要研究ACM数论方面的同学可能有帮助 模运算的两种算法 中国剩余定理

    acm代码模板

    这是 一份 我参加ACM使用的 代码模板 包括 自己写的 凸包模板 大数运算模板

    ACM算法竞赛常用代码

    数论(整除,集合论,关系,素数,进位制,辗转相除,扩展的辗转相除,同余运算,解线性同余方程,中国剩余定理) 指针(链表,搜索判重,邻接表,开散列,二叉树的表示,多叉树的表示) 按位运算(and,or,xor...

    ACM程序设计培训教程

     〖案例l〗高级模运算……………………………………………………………236  16.2 欧拉定理的应用…………………………………………………………………238  〖案例2〗快乐2004…………………………………………...

    挑战程序设计竞赛(第2版)

    4.1.2 模运算的世界 4.1.3 计数 4.1.4 具有对称性的计数 4.2 找出游戏的必胜策略 4.2.1 游戏与必胜策略 4.2.2 Nim 4.2.3 Grundy数 4.3 成为图论大师之路 4.3.1 强连通分量分解 4.3.2 2-SAT 4.3.3 LCA 4.4 常用技巧...

Global site tag (gtag.js) - Google Analytics