为什么要对1000000007取余
问题
在处理很多涉及到很大的数字的问题时,我们总是会被要求对1000000007
(即10^9+7
)取余,这是为什么?
解答
为了防止大数越界
C#的int
类型有最大值int.MaxValue
为2^31-1
,变量储存的值超过这个数会导致溢出,有的时候,只是为了验证答案正确而不在乎数值的话,就会通过大数取余规避这个问题。
比2^31-1
的一半还小
分别将两个绝对值小于1000000007
的数相加后再取余仍然能得到正确的取余结果,方便运算。
它的平方小于long
类型
C#的long
类型有最大值Int64.MaxValue
为2^63-1
,绝对值小于1000000007
的数的平方仍然小于这个上界,这方便了对数的幂的循环取余。
它是质数
对质数取余有种说不出来的安心感?除了这种主观因素,其实对质数取余还很常用于哈希算法中避免冲突。