当前位置: 首页 > news >正文

[数论](a % MOD + b % MOD) % MOD = (a + b) % MOD

这个等式成立是因为模运算的加法性质,即模运算在加法操作下具有分配性。我们可以从数学上证明这个等式:


证明:​

设 a 和 b 是任意整数,MOD 是一个正整数。我们需要证明:

(a % MOD + b % MOD) % MOD=(a+b) % MOD

步骤 1:定义余数

我们可以将 a 和 b 表示为:

a=q1​⋅MOD+r1​(其中 0≤r1​<MOD)

b=q2​⋅MOD+r2​(其中 0≤r2​<MOD)

其中:

  • r1 = a % MODa 对 MOD 取余的结果)
  • r2 = b % MODb 对 MOD 取余的结果)
​步骤 2:计算 (a % MOD + b % MOD) % MOD

a % MOD+b % MOD=r1​+r2​

如果 r1 + r2 < MOD,那么:

(r1​+r2​) % MOD=r1​+r2​

如果 r1 + r2 >= MOD,那么:

(r1​+r2​) % MOD=(r1​+r2​)−MOD*n

​步骤 3:计算 (a + b) % MOD

a+b=(q1​⋅MOD+r1​)+(q2​⋅MOD+r2​)=(q1​+q2​)⋅MOD+(r1​+r2​)

因此:

(a+b) % MOD=(r1+r2) = (r1​+r2​) % MOD

步骤 4:比较两者

(a % MOD+b % MOD) % MOD=(r1​+r2​) % MOD

(a+b) % MOD=(r1​+r2​) % MOD

所以:

(a % MOD+b % MOD) % MOD=(a+b) % MOD


直观理解

  • a % MOD 表示 a 去掉尽可能多的 MOD 后剩下的部分(即 a 在 [0, MOD-1] 范围内)。
  • b % MOD 同理。
  • 它们的和 (a % MOD + b % MOD) 可能超过 MOD,所以需要再取一次模,确保结果在 [0, MOD-1] 范围内。
  • 而 (a + b) % MOD 也是去掉 a + b 中所有的 MOD 后剩下的部分,所以两者等价。

为什么这个性质在算法中很重要?​

在算法竞赛和大数计算中,我们经常需要对大数取模,以避免数值溢出(如 C++ 的 int 溢出)或提高计算效率(如 Python 的大数计算较慢)。
这个性质允许我们:

  1. 先对部分结果取模,再相加,最后再取模,而不会影响最终结果。
  2. 减少中间计算过程的数值大小,防止溢出或降低计算复杂度。

示例

假设 MOD = 7a = 10b = 8

a % MOD=10 % 7=3b % MOD=8 % 7=1(3+1) % 7=4 % 7=4(10+8) % 7=18 % 7=4

两者结果相同,验证了等式成立。


总结

这个等式成立是因为模运算在加法操作下具有分配性,允许我们先取模再相加,而不会影响最终结果。这在算法优化中非常有用,可以避免大数计算并提高效率。

相关文章:

  • 《P1637 三元上升子序列》
  • #华为昇腾#华为计算#昇腾开发者计划2025#
  • Redis学习笔记——黑马点评 附近商铺到UV统计 完结
  • 中州养老:学会设计数据库表
  • 银行账户管理系统01
  • 图解Git中Rebase与Merge的区别
  • Linux中《动/静态库原理》
  • WireShark网络取证分析第一集到第五集和dvwa靶场环境分析漏洞
  • C++并发编程-5.C++ 线程安全的单例模式演变
  • 暑假复习篇之五子棋①
  • MongoDB06 - MongoDB 地理空间
  • Cursor 教程:用 Cursor 创建第一个 Java 项目
  • Blood-Cat 公網網路攝像機泄露收集器:查看指定國家地區攝像
  • 左神算法之螺旋打印
  • Docker 镜像构建 - Aliyun
  • 深入探索 GORM:Go 语言中的强大 ORM 工具
  • 熟悉 PyCharm
  • 常识科普:去杠杆通常分为四个步骤
  • Spring Cloud:分布式事务管理与数据一致性解决方案
  • KPL战队近五年热度指数