0Pricing
Coding Interview Prep · 课时

在素数模数下运算

进行加法和乘法并保持在模数范围内

在素数模数下运算 是 CoddyKit 上的免费 Coding Interview Prep 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Coding Interview Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Coding Interview Prep 课程共包含 4 节课。

为什么要取模

竞赛题的答案可能变得极其庞大,远远超出其他地方使用的整数类型。因此,题目通常要求对一个大质数取模,以便让数字保持较小。🔢

认识著名的模数

您最常见到的质数是1000000007,通常写作 1e9+7。它足够大,可以避免冲突;又足够小,能够放入 64 位整数。

MOD = 1000000007

取模的含义

取模运算符会给出除法后的余数。因此,17 % 5 等于 2,因为 17 除以 5 后余数为 2。

print(17 % 5)  # 2

加法也保持在范围内

您可以先相加,最后再取模;也可以在计算过程中不断取模。无论采用哪种方式,余数都相同,因此应经常进行约减以保持数值较小。

total = (a + b) % MOD

乘法也同样如此

乘法也遵循同样的规则:将乘积对该质数取模。Python 原生支持大整数,但取模可以让每个值都保持很小,从而提高速度。

prod = (a * b) % MOD

每一步之后都进行约减

在较长的循环中,每次迭代都应用% MOD。这样可以防止数字不断膨胀,并让每次运算都保持廉价且可预测。

ans = (ans * i) % MOD

减法可能得到负数

减法在许多语言中可能产生负余数。在最后取模之前加回 MOD,就能让结果落在安全的非负范围内。

diff = (a - b + MOD) % MOD

Python 中友好的取模行为

好消息是:当模数为正时,Python 的%运算已经会返回非负结果。因此 -1 % 7 得到 6,而不是 -1,您无需额外修正。

print(-1 % 7)  # 6

取模可以分配到运算中

核心思想是:对于加法和乘法,(a op b) % m 等于 (a%m op b%m) % m。因此,您可以在合并输入之前先对它们进行约减。

除法是个例外

加法、减法和乘法都能在模运算下正常进行,但普通除法不行。本课程稍后会介绍如何使用模逆元来完成除法。

在顶部设置一次 MOD

在解答开头将MOD定义为常量。使用一个命名值,比在代码中到处散落 1000000007 更好,也能避免拼写错误藏在其中。

MOD = 10**9 + 7

快速检查

为什么要在对减法结果取模之前加上 MOD?

回顾

现在您可以使用 1e9+7 这样的素数模数,让庞大的计数保持较小。在每一步都对加法、减法和乘法进行约减,注意处理负数,并将除法留给逆元。🎯

常见问题解答

「在素数模数下运算」课时是免费的吗?

是的 — 「在素数模数下运算」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Coding Interview Prep 课程的其余内容,请升级到 CoddyKit PRO。 Coding Interview Prep 课程共包含 4 节课。

「在素数模数下运算」这节课中我会学到什么?

进行加法和乘法并保持在模数范围内 你通过在浏览器中直接运行的动手代码来练习 Coding Interview Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Coding Interview Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Coding Interview Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「在素数模数下运算」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Coding Interview Prep 课中编写并运行代码吗?

能。每节 Coding Interview Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 在素数模数下运算
  2. 快速模幂运算
  3. 使用费马定理求模逆元
  4. 使用预计算阶乘计算 nCr
← 返回 Coding Interview Prep