首页
学习
活动
专区
圈层
工具
发布

mod 1000000007 到底是个啥?-野牛程序员讲少儿编程

「mod 1000000007」到底是个啥?

在写算法题、信息学竞赛、甚至刷 LeetCode 时,经常看到下面这种代码:

这时候很多小朋友都问:

“为什么结果还要对个一十亿零七取模?这数字是干嘛的?”

“为啥老是 1000000007,不能是 8888 吗?”

来,讲清楚

🧠 mod 是什么?

mod叫做“取模”或“取余数”。

意思就是:只保留除法的余数,不要整数部分

比如:

7 % 3 = 1,因为 7 ÷ 3 = 2 余 1

10 % 4 = 2

那么a % 1000000007就是把a除以 1000000007,结果只要余数部分。

为什么要取模?

原因一:防止“爆炸”!

程序中经常会算非常非常大的数,比如:

这些结果会远远超出 int/long long 的表示范围。

🧯 所以就像加“保险”一样,取模能把数限制在一个合理的范围里(最多不超过 1000000006),不容易爆掉。

为什么是 1000000007?

这个数字不是随便编的,它有三大“隐藏属性”

1. 它是一个质数(素数)!

质数就是只能被 1 和自己整除的数,比如 2、3、5、7、11……

1000000007是一个特别大的质数。

为什么要用质数?

因为在很多算法中,比如快速幂取逆元、费马小定理、组合数取模公式里,模数是质数可以让我们更容易使用数学公式!

比如组合数 C(n,k)mod  p,模数必须是质数才能用逆元。

2. 它刚好小于 2^31

这点对 C++ 里的int类型非常友好!

int最大值是:

而1000000007 < 2147483647,能稳稳放进 int 里,不会爆炸

所以很多题目和 OJ 平台都喜欢用它当模数。

3. 写起来顺手!

1000000007 是10 后面 7 个 0 加一个 7,记起来非常顺,键盘上一敲就能打出来。

形象比喻时间:

想象一个大水杯装水,程序中数字越算越大,水就越多。

不给它一个模数限制,它迟早会溢出来把程序淹了!

而mod 1000000007就像是一个“限高杆”,让水始终控制在一个合理范围内。

🧪 举个例子:

1000000006 + 2 = 1000000008

取模后就是 1(因为刚好多出一个 1000000007)

总结下:

野牛程序员教少儿编程与信息学奥赛

宜宾市野牛网络科技有限公司专业微信小程序开发、网站建设、软件开发等

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OrektHRnj7ClBqcOwneurg1A0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

领券