在对数字执行10 ^ 9 + 7的模数(%)后,数字可能仍然超出范围。
我在CodeChef http://www.codechef.com/problems/FIRESC上做了这个问题并得到了错误的答案,在查看作者解决方案后,我将我的最终答案类型更改为long long int to int并得到了正确的答案。为什么会这样?
答案 0 :(得分:1)
如果执行result = (result * x) % MOD
之类的乘法,其中result
和x
最多可以MOD - 1
,则中间表达式result * x
可以达到{{ 1}}平方。对于模10 9 + 7,这肯定不适合32位整数类型。因此计算错误:基本上,你不是(MOD - 1)
,而是相同的数量模2 32 。
例如,从数学的角度来看,(100,001 * 100,001)模10 9 + 7是199,931,但是当以32位整数计算时,100,001 * 100,001变为1,410,265,409,并且取其模数10 9 + 7得到410,265,402。