An Introduction to Modular Math

When we divide two integers we will have an equation that looks like the following:

AB=Q remainder R\dfrac{A}{B} = Q \text{ remainder } R​B​​A​​=Q remainder R

AAA
is the dividend

BBB
is the divisor

QQQ
is the quotient

RRR
is the remainder

Sometimes, we are only interested in what the remainder is when we divide
AAA
by BBB.

For these cases there is an operator called the modulo operator (abbreviated as mod).

Using the same AAA,
BBB,
QQQ,
and RRR
as above, we would have: A mod B=RA \text{ mod } B = RA mod B=R

We would say this as AAA
modulo BBB
is congruent to RRR.
Where BBB
is referred to as the modulus.

For example:

13513 mod 5==2 remainder 33

Visualize modulus with clocks

Observe what happens when we increment numbers by one and then divide them by 3.

03132333435363=======0 remainder 00 remainder 10 remainder 21 remainder 01 remainder 11 remainder 22 remainder 0

The remainders start at 0 and increases by 1 each time, until the number reaches one less than the number we are dividing by. After that, the sequence
repeats.

By noticing this, we can visualize the modulo operator by using circles.

We write 0 at the top of a circle and continuing clockwise writing integers 1, 2, ... up to one less than the modulus.

For example, a clock with the 12 replaced by a 0 would be the circle for a modulus of 12.

To find the result of A mod BA \text{ mod } BA mod B
we can follow these steps:

  1. Construct this clock for size BBB
  2. Start at 0 and move around the clock AAA
    steps
  3. Wherever we land is our solution.

(If the number is positive we step clockwise, if it's negative we step
counter-clockwise.)


Examples

8 mod 4=?8 \text{ mod } 4 = ?8 mod 4=?

With a modulus of 4 we make a clock with numbers 0, 1, 2, 3.

We start at 0 and go through 8 numbers in a clockwise sequence 1, 2, 3, 0, 1, 2, 3, 0.

We ended up at 0 so 8 mod 4=0.

7 mod 2=?7 \text{ mod } 2 = ?7 mod 2=?

With a modulus of 2 we make a clock with numbers 0, 1.

We start at 0 and go through 7 numbers in a clockwise sequence 1, 0, 1, 0, 1, 0, 1.

We ended up at 1 so 7 mod 2=1.

−5 mod 3=?-5 \text{ mod } 3 = ?−5 mod 3=?

With a modulus of 3 we we make a clock with numbers 0, 1, 2.

We start at 0 and go through 5 numbers in counter-clockwise sequence (5 is
negative) 2, 1, 0, 2, 1.

We ended up at 1 so −5 mod 3=1.


Conclusion

If we have A mod BA \text{ mod } BA mod B and
we increase AAA
by a multiple of B,
we will end up in the same spot, i.e.

A mod B=(A+K⋅B) mod BA \text{ mod } B = (A + K \cdot B) \text{ mod } BA mod B=(A+K⋅B) mod B for
any integer K.

For example:

3 mod 10=313 mod 10=323 mod 10=333 mod 10=3

Notes to the Reader

mod in programming languages and calculators

Many programming languages, and calculators, have a mod operator, typically represented with the % symbol. If you calculate the result of a negative number, some languages will give you a negative result.

e.g.

-5 % 3 = -2.In a future article we will explain, why this happens, and what it means.

Congruence Modulo

You may see an expression like:

A≡B (mod C)A \equiv B\ (\text{mod } C)A≡B (mod C)

This says that AAA
is congruent to BBB
modulo CCC.
It is similar to the expressions we used here, but not quite the same.

In the next article we will explain what it means and how it is related to the expressions above.

Mod in math的更多相关文章

  1. VB6与VB.NET对照表

    VB6与VB.NET对照表 VB6.0 VB.NET AddItem Object名.AddItem Object名.Items.Add ListBox1.Items.Add ComboBox1.It ...

  2. VB6.0 和VB.NET 函数对比

    VB6.0和VB.Net的对照表 VB6.0 VB.NET AddItem Object名.AddItem Object名.Items.Add ListBox1.Items.Add ComboBox1 ...

  3. Java的数组长度无需编译指定,因为它是对象

    大家可以看从Thinking in Java中摘出来的代码理解一下,甚至.多维数组的子数组无须等长 //: MultiDimArray.java// Creating multidimensional ...

  4. VB6.0和VB.Net的函数等对照表

    VB6.0和VB.Net的对照表 VB6.0 VB.NET AddItem Object名.AddItem Object名.Items.Add ListBox1.Items.Add ComboBox1 ...

  5. 利用eval函数实现简单的计算器

    """ description : use python eval() function implement a simple calculator functions ...

  6. [洛谷P4245]【模板】任意模数NTT

    题目大意:给你两个多项式$f(x)$和$g(x)$以及一个模数$p(p\leqslant10^9)$,求$f*g\pmod p$ 题解:任意模数$NTT$,最大的数为$p^2\times\max\{n ...

  7. 子数组最小值的总和 Sum of Subarray Minimums

    2018-09-27 23:33:49 问题描述: 问题求解: 方法一.DP(MLE) 动态规划的想法应该是比较容易想到的解法了,因为非常的直观,但是本题的数据规模还是比较大的,如果直接使用动态规划, ...

  8. 动态规划-填格子问题 Domino and Tromino Tiling

    2018-09-01 22:38:19 问题描述: 问题求解: 本题如果是第一看到,应该还是非常棘手的,基本没有什么思路. 不妨先从一种简化的版本来考虑.如果仅有一种砖块,那么,填充的方式如下.

  9. SharePoint REST API - OData查询操作

    博客地址:http://blog.csdn.net/FoxDave 本篇主要讲述SharePoint REST中OData的查询操作.SharePoint REST服务支持很多OData查询字符串 ...

随机推荐

  1. Qt中Ui名字空间以及setupUi函数的原理和实现

    用最新的QtCreator选择GUI的应用会产生含有如下文件的工程 下面就简单分析下各部分的功能. .pro文件是供qmake使用的文件,不是本文的重点[不过其实也很简单的],在此不多赘述. 所以呢, ...

  2. WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

    原文:WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经> ...

  3. 在SharePoint 2013 中使用文档库Scheduling (计划公布功能)

    本文讲述在SharePoint2013 中使用文档库Scheduling (计划公布功能)的步骤和注意的事项. 文档库Scheduling (计划公布功能) 用于设定当文档通过审批后特定的时间区间内才 ...

  4. JS firebug小技巧

    实际上前端的发展与进步也离不开浏览器的支持,而对于开发者来讲,浏览器最好的支持,就是对于debug的良好支持,甚至在某些兴许接手的项目中,前端的debug甚至能够解决好多问题--不说了,都是泪啊!还是 ...

  5. gdi+ 高速绘制透明窗体

    gdi+ 高速绘制透明窗体: 方法一: 1.用Iamge对象载入png资源, 2.调用drawimage函数讲图片绘制出了 3.UpdateLayeredWindow对窗体进行布局 方法二: 1.用B ...

  6. Qt之日志输出文件

    在Qt开发过程当中经常使用qDebug等一些输出来调试程序,但是到了正式发布的时候,都会被注释或者删除,采用日志输出来代替.     做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪.定 ...

  7. Axure快捷键大全 Axure RP Pro 6.5快捷键

    习惯用Axure快捷键会让你做原型的时候更得心应手.Axure中文网总结了常用的一些快捷键分享给大家 . Axure RP Pro 6.5快捷键大全,如有疏漏,欢迎补充. 基本快捷键:   打开:Ct ...

  8. 阿里巴巴 web前端性能优化进阶路

    Web前端性能优化WPO,相信大多数前端同学都不会陌生,在各自所负责的站点页面中,也都会或多或少的有过一定的技术实践.可以说,这个领域并不缺乏成熟技术理论和技术牛人:例如Yahoo的web站点性能优化 ...

  9. Coreseek:第二步建索引及測试

    1,建索引非常easy.一行代码 g:/service/coreseek/bin/indexer -c g:/service/coreseek/etc/csft_mysql.conf   person ...

  10. POJ 2762推断单个联通(支撑点甚至通缩+拓扑排序)

    Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14789 ...