为什么很多题目都对1e9+7(即1000000007)取模?

剑指 Offer 10- II. 青蛙跳台阶问题

做该题时,发现有大数会进行取模运算,有点好奇原因。

因运算的不断累积,导致结果超过了 int32 甚至 int64 的取值范围。

当一个问题只对答案的正确性有要求,而不在乎答案的数值,可能会需要将取值很大的数通过求余变小(保证其数值在int类型范围内)。

求余运算规则:
设正整数x,y,p,求余符号为⊙。
对于加法运算:(x+y)⊙p = (x⊙p+y⊙p)⊙p
对于乘法运算:(x*y)⊙p = [(x⊙p)*(y⊙p)]⊙p

p不仅可以是1e9+7, 也可以是1e9+9和998244353

选择的原因:

  • 都是一个小于2的30次方的质数
  • 类型为int,所有取模后的数相加必然不会溢出int
  • 类型为long,所有取模后的数相乘必然不会溢出long

循环取余

每次操作时,就进行取余操作

快速幂取余

题目:剑指 Offer 16. 数值的整数次方

剑指 offer 16 数值的整数次方(快速幂法)_Y_M的博客-CSDN博客

参考

为什么很多题目都对1e9+7取模?_Tech in Pieces-CSDN博客

大数求余:即答案对1e9+7(1000000007)取模原因、方法总结

关于大数越界问题的三种取余方式

---------------- 本文结束 ----------------

本文标题:为什么很多题目都对1e9+7(即1000000007)取模?

文章作者:Pabebe

发布时间:2021年05月13日 - 17:08:42

最后更新:2021年05月17日 - 20:35:46

原始链接:https://pabebezz.github.io/article/78656074/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%