对整数取模算子

Modulus operator over int

本文关键字:整数      更新时间:2023-10-16

是否可能在对一个数字执行10^9 + 7的模数(%)后,该数字仍可能超出范围?

我在CodeChef http://www.codechef.com/problems/FIRESC上做这个问题,得到了一个错误的答案,在看了作者的解决方案后,我把我的最终答案类型改为long long int到int,并得到了一个正确的答案。为什么会这样呢?

如果您执行像result = (result * x) % MOD这样的乘法,其中resultx都可以等于MOD - 1,则中间表达式result * x可以等于(MOD - 1)的平方。对于模109 + 7,这肯定不适合32位整数类型。因此,计算错误:基本上,你得到的不是result * x,而是相同的量模232

例如,从数学的角度来看,(100,001 * 100,001)模109 + 7是199,931,但当以32位整数计算时,100,001 * 100,001等于1,410,265,409,并且将其模109 + 7得到410,265,402。