模块计算器
计算除法运算的余数. 立即用一步一步的解释找到mod b. 这个免费的数学工具提供了即时的,准确的结果.
什么是模块操作?
模块运算 (mod,或%) 返回一个数除以另一个数后的余数.对于一个模块b:将a除以b,结果是余数.例如,17模块5=2 (因为17=3x5+2). 结果总是在正值的范围[0,b-1]内.
这种基本关系:a = qxb + r,其中q是分数 (地板 ((a/b)) 和r是余数 (0 <= r < b). 模块是整数除法的伴侣运算 - 如果a ÷ b = q与余数r,那么mod b = r. 这个计算器使用真数学模块定义 (总是为正分数的非负数),而不是一些编程语言使用的符号余数.
模块化算法 - - 数字"绕着"的固定模块的算法 - - 构成了时钟算法的基础. 时钟上的小时被计算为mod 12或mod 24. 如果是早上10点,你加上5个小时: (10+5) mod 12=3 (PM). 这种绕着的行为是计算机科学,密码学和数论中的无数算法的核心.
模块示例和逐步解决方案
模块的理解通过工作示例变得直观.对于下面的每个计算,公式是:余数 = a - floor (a ÷ b) x b.
| 表达方式 | 分数 (地板) | 其余 (a mod b) | 验证情况 |
|---|---|---|---|
| 第十七节第五节 | 3 | 2 | 3x5+2=17 没有 |
| 20 模 4 | 5 | 0 | 5x4+0=20 时间 |
| 第七节第三节 | 2 | 1 | 2x3 + 1 = 7 没有 |
| 一百分之七 | 14 | 2 | 14x7+2=100 没有 |
| 十三代十三 | 1 | 0 | 1x13+0=13 没有 |
| 一个mod5 | 0 | 1 | 0x5+1=1 没有 |
| 256 模 16 的 | 16 | 0 | 16x16+0=256 时间 |
| 365 模 7 的 | 52 | 1 | 52x7加1等于365 |
注意 365 mod 7 = 1:这告诉我们,一个非 年有52个完整的周加上1个额外的天,这就是为什么每一个非 年周中的天会移动1.一个 年 (366天) mod 7 = 2,将天移动2.
模块数学的应用
模块出现在编程和数学中.偶数/奇数检查:如果n%2=0,n是偶数.环形阵列和环形缓冲器:index = (current_index + 1) % 的数组_大小环绕到开始.哈希表:% num_buckets 将任何哈希值映射到一个有效的 bucket 索引, 确保无外界访问.
In 日历计算塞勒公式和末日算法都依赖于模块化算法来确定任何日期的周日.这些工作是因为一周有7天 - 一个固定的模块.时区偏移使用mod 24来正确地包裹午夜边界的小时值.
In 数字系统,模块在任何涉及内存地址的地方都使用.页面表条目,缓存集选择和内存映射的I / O都依赖于模块化索引.CPU指令集通常包括除法 (模块类型) 指令,SIMD向量指令使用模块在混合中进行车道包裹.
In 错误检测信用卡号码通过卢恩算法 (模块-10 检查).ISBN-10 书号使用 mod 11. 这些检查总量捕获数字代码中的转换和单位错误.
在密码学中的模块
模块化算法是现代公钥密码学的数学基础.三个最重要的密码算法 - - RSA,迪菲-赫尔曼和 圆曲线密码学 - - 都依赖于模块化运算.
RSA加密方式使用模块化指数法:用公钥 (e,n) 来加密消息M,计算C = M^e mod n.解密,计算M = C^d mod n,其中d是私钥.安全性依赖于分解n (一个大半素数) 的难度 - 只知道n,恢复p和q对于超过2048位的密钥大小是计算不可行的.
迪菲 - 赫尔曼密钥交换允许两个当事人通过不安全的通道建立共享的秘密:Alice发送A = g^a mod p,Bob发送B = g^b mod p.每个当事人计算共享的秘密:Alice计算B^a mod p = g^(ab) mod p,Bob计算A^b mod p = g^(ab) mod p.一个窃听者拦截了g^a mod p和g^b mod p,如果不解决离散对数问题,就无法恢复g^(ab) mod p.
这些系统的安全性取决于模块化指数的单向性质:计算g^a mod p是快速的 (使用重复平方,O ((log a) 乘法),但逆转它 - 找到给定的g^a mod p - 据信需要指数时间大质数p.
有负数和边框的模块
负数的模块行为因编程语言而异,导致许多难以发现的错误.理解区别对于软件开发人员来说至关重要.
| 语言 | -7 百分之3 | 7 百分之三 | 定义 |
|---|---|---|---|
| 字符串 | 2 | -2 | 符号跟随分数 (真模数) |
| 在JavaScript中 | -1 | 1 | 在股息 (剩余) 之后的标志 |
| 在C/C++中 | -1 | 1 | 标志跟随股息 (C99+) |
| 雅瓦岛 | -1 | 1 | 标志跟随分红 |
| 红宝石 | 2 | -2 | 符号跟随分数 (真模数) |
| 数学 (定义) | 2 | 1 (或未定义) | 对于正分数总是非负数 |
在数学中,modulo总是返回一个非负的结果: -7 mod 3 = 2 (因为 -7 = -3x3 + 2 和 0 <= 2 < 3). 这个计算器使用数学定义.
确保任何语言的非负结果的安全方法:((a % b) + b) % b. 这正确地处理负输入,并由我们的计算器内部使用.当使用模块用于数组索引或日历日计算时,负结果会导致错误时,这种模式是必不可少的.
边缘案例需要记住:(1) 任何数mod 1 = 0 -- 分于 1 没有余数. (2) 任何数mod 本身 = 0. (3) 0 mod 任何非零数 = 0. (4) 分于零是未定义的 -- 在计算模数之前始终验证除数. 我们的计算器显示模数为零的清晰错误信息.
模块和可分割性测试
模块的最实用的应用之一是测试无需执行完全的除法的可分割性.一个数 a 是可分割的,如果和只有如果一个模 b = 0. 这使得快速可分割性检查:
| 由可分割性 | 测试 | 一个例子 |
|---|---|---|
| 2 | n mod 2 = 0 (最后一个数字为偶数) | 128 乘以 2 = 0 |
| 3 | 数字的总和mod 3 = 0 | 一加二加三等于六,六乘三等于零 |
| 4 | 最后两个数字mod 4 = 0 | 312: 12乘以4等于0 |
| 5 | 最后一个数字为0或5 | 735 mod 5 = 0 没有 |
| 9 | 数字的总和mod 9 = 0 | 369: 3+6+9=18, 18乘以9=0 |
| 10 | n mod 10 = 0 (最后一个数字为0) | 500 mod 10 = 0 没有 |
这些可除法规则是从模块化算术属性中得出的快捷方式. 3 和 9 的数字和规则是有效的,因为 10 1 (mod 3) 和 10 1 (mod 9),这意味着每个数字的位置值对于可除法无关 3 或 9. 这些在没有模块化算术上下文的小学中被教授,但底层机制是模块化.
模块化指数:快速功率模式
直接计算 a^b mod n 首先计算 a^b,然后取 mod n,对于大指数来说是不切实际的 - - a^100 可以有数千个位数.模块指数使用 (axb) mod n = ((a mod n) x (b mod n)) mod n 的等式来保持中间结果小.
快速算法使用重复平方 (二进制指数):
- 用二进制写 b:例如, b=13 = 11012
- 计算a,a2,a4,a8每一个mod n
- 乘以对应于 1 位的次数:a13 = a8 x a4 x a1 (mod n)
这减少了 b 的乘法数量到 O ((log2 b).对于 b = 2048 位 RSA 指数 (~ 10^600),这是万亿的乘法和仅 ~ 2000 的差异.没有这种优化,RSA 加密将是完全不切实际的.
人们常问的问题
15乘以4是什么?
15mod4=3. 因为15=3x4+3,剩余是3. 检查: 3x4=12,和15-12=3.
这意味着什么?
乘以零的模是未定义的,就像乘以零的除法一样.你不能计算一个mod 0.我们的计算器在这种情况下返回一个错误信息.任何基于除法的运算都需要一个非零的除法.
模块与可分割性有什么关系?
一个数 a 是由 b 分的,如果且只有 a mod b = 0. 例如, 24 mod 6 = 0,所以 24 是由 6 分的. 25 mod 6 = 1,所以 25 不是由 6 分的. 这使得 modulo 成为计算机科学中可分割性测试的基本工具.
模和剩余的区别是什么?
对于正数,mod和余数是相同的.对于负数,它们是不同的:数学模块总是返回一个非负的结果 (符号跟随分数),而余数则取分数的符号.例如,-7mod3=2 (数学),但-7余3=-1 (如C,Java,JavaScript).
10乘以3是什么?
10 mod 3 = 1. 因为 10 = 3x3 + 1, 余数是 1. 你可以验证: 3x3 = 9, 10 - 9 = 1. 这意味着10除以3时留下1的余数,所以10不能除以3
0乘以5是什么?
0mod5=0.零除以任何非零数得到分数0和余数0.一般来说,对于任何n≠0的0modn=0,这与定义一致:0=0x5+0.
模块在编程中如何使用?
常见的编程用途包括:检查偶数/奇数 (n%2==0),包裹数组索引 (index%length),实现环缓冲区,将项目分发到哈希表中的桶 (哈希%size),在状态机器中的状态中旋转,并确保每次n次 代 (计数%n==0) 发生周期性事件.
什么是时钟算术?
时钟算法是日常的模块化算法.一个12小时的时钟使用模块化12:11点+3小时= (11+3) 模块化12=2点.这种环绕的行为恰恰是模块化算法.同样,周日使用模块化7,军事时间使用模块化24小时.
为什么模块在密码学中很重要?
模块化算法使单向函数成为可能.计算g^a mod p (给定g,a,p) 是快速的,但找到给定的g^a mod p和p (离散对数问题) 对于大素数是无法计算的.这种不对称性是Diffie-Hellman密钥交换,RSA和大多数保护互联网通信的公钥加密的基础.
任何一个数的mod1的结果是什么?
任何整数mod1=0.除以1总是没有余数 - - 每个整数完全除以1. 这在数学上是一致的:a=ax1+0,所以余数总是0. 这种边缘情况在模块化算术实现中很重要.
日常生活中的模块:实用例子
模块化算法在日常生活中比大多数人想象的要频繁得多. 当你读出时钟,计算出每周的事件何时重演,检查一个数字是否可除以9或查看一年的最后一个数字以确定周年纪念日是哪一天, 你就在做模块化算法--即使你不用这个名字来描述它.
调度和复发情况:如果一个事件每7天发生一次,今天是星期二 (2日,零指数从周日=0),那么30天后是 (2+30) mod 7 = 32 mod 7 = 4,即星期四.这种直接计算比单独计算周和天要快.同样,如果订阅在每个月的28日更新,目前是15日,更新前的天是 (28-15) mod 31 = 13天.
数字检查数字:ISBN-13条形码标准使用模块10.任何ISBN-13的最后一个数字是这样选择的,即所有13个数字的加权和可被10除.如果在输入一本书的ISBN时输入错误的单个数字,检查将失败 (mod 10 ≠ 0),并标记错误.信用卡号码使用卢恩算法 - 一个mod-10检查 - 为同样的目的.ISBN-10标准使用mod 11,允许检测单个转换.
计算机内存和地址:存储器通常以2的权力 (每页1024,2048,4096) 进行处理.当程序访问内存时,操作系统使用模块来计算一个地址属于哪个内存页面:page_number = address mod page_size.CPU缓存中的缓存行选择也使用模块.音频处理,网络包排队和视频流中的缓冲包裹都使用循环缓冲数学:write_position = (write_position + 1) % buffer_size.
艺术和音乐模式:音乐理论中的节奏模式使用模块化算法进行分析. 4/4 时刻符号有 0, 1, 2, 3 节拍的重复 - 一个 mod-4 循环. 多节奏发生在两个独立的节奏与周期 m 和 n 同时演奏时;它们同步每一个 lcmm ((,n) 节拍. 像 嵌板这样的视觉模式在两个维度中与模块化周期重复.
地理和时区计算:UTC偏移范围从-12到+14.在时区之间转换:给定时间T在UTC,当地时间= (T+偏移) mod 24.结果值可能看起来不直观 (例如,23+5=28,mod 24=4,即第二天凌晨4点),但mod操作正确地处理午夜边界.国际日期线交叉使用mod 24与使用mod 7的周日计算相结合.
了解模块化使得这些日常计算变得更清晰,更快速,更少的错误. 一旦你看到模式,你会注意到编译器优化中的模块化算法,视频游戏中的旋转算法,轮回赛事安排,以及跨服务器集群的负载平衡 - 所有这些都依赖于简单但强大的除法后剩余的概念.