当前位置:首页算法 > 正文

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

作者:野牛程序员:2025-05-06 17:34:29算法阅读 2005
mod 1000000007 到底是个啥?-野牛程序员讲少儿编程

🌟「mod 1000000007」到底是个啥?

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

const int MOD = 1000000007;
result = (a + b) % MOD;

这时候很多小朋友都问:
👉 “为什么结果还要对个一十亿零七取模?这数字是干嘛的?”
👉 “为啥老是 1000000007,不能是 8888 吗?”

来,讲清楚 👇


🧠 mod 是什么?

mod 叫做“取模”或“取余数”。
意思就是:只保留除法的余数,不要整数部分

比如:

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

  • 10 % 4 = 2

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


💡 为什么要取模?

👶 原因一:防止“爆炸”!

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

2^1000、n!(阶乘)、数列累加几亿次

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

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


🎯 为什么是 1000000007?

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

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

质数就是只能被 1 和自己整除的数,比如 2、3、5、7、11……
1000000007 是一个特别大的质数。

为什么要用质数?

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

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


✅ 2. 它刚好小于 2312^{31}231

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

int 最大值是:

2^31 - 1 = 2147483647

1000000007 < 2147483647能稳稳放进 int 里,不会爆炸
所以很多题目和 OJ 平台都喜欢用它当模数。


✅ 3. 写起来顺手!

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


🎨 形象比喻时间:

想象一个大水杯装水,程序中数字越算越大,水就越多。
不给它一个模数限制,它迟早会溢出来把程序淹了!
mod 1000000007 就像是一个“限高杆”,让水始终控制在一个合理范围内。


🧪 举个例子:

int a = 1000000006;
int b = 2;
int result = (a + b) % 1000000007;
cout << result;  // 输出 1

1000000006 + 2 = 1000000008
取模后就是 1(因为刚好多出一个 1000000007)


🔚 总结下:

名称含义与作用
mod取余,防止整数过大
1000000007常用大质数,方便公式计算与程序安全
为什么选它?是质数、安全、int 不爆、好记好打
应用场景快速幂、组合数、动态规划、斐波那契、dp 计数问题……


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • mod 1000000007 到底是个啥?-野牛程序员讲少儿编程
  • 相关推荐

    最新推荐

    热门点击