为什么要对1000000007取余

问题

在处理很多涉及到很大的数字的问题时,我们总是会被要求对1000000007(即10^9+7)取余,这是为什么?

解答

为了防止大数越界

C#的int类型有最大值int.MaxValue2^31-1,变量储存的值超过这个数会导致溢出,有的时候,只是为了验证答案正确而不在乎数值的话,就会通过大数取余规避这个问题。

2^31-1的一半还小

分别将两个绝对值小于1000000007的数相加后再取余仍然能得到正确的取余结果,方便运算。

它的平方小于long类型

C#的long类型有最大值Int64.MaxValue2^63-1,绝对值小于1000000007的数的平方仍然小于这个上界,这方便了对数的幂的循环取余

它是质数

对质数取余有种说不出来的安心感?除了这种主观因素,其实对质数取余还很常用于哈希算法中避免冲突