(num+mod)%mod语句的需求是什么?

What is the need of the statement of (num+mod)%mod?

本文关键字:需求 是什么 语句 num+mod %mod      更新时间:2023-10-16

程序中ans = (ans + mod) % mod语句的需求是什么?

假设mod = 10^9+7。该函数是在0 (log(n))复杂度下计算ab次幂:

long long power(long long a, long long b)
{
    if (b == 0) 
        return 1ll;
    long long ans = power(a, b/2);
    ans = (ans * ans) % mod;
    ans = (ans + mod) % mod;
    if(b % 2 == 1)
        ans = (ans * a) % mod;
    ans = (ans + mod) % mod;
    return ans;
}

这种结构最常见的用法是确保结果非负。标准的operator%对于正参数和负参数的行为不同:例如,4%3==1,但(-2)%3==-2,而您可能期望(-2)%3==1(-2)/3==-1,这在数学上更正确。

当使用模运算时,这种行为经常会导致问题,并且通常使用添加mod的技巧来获得数学上更正确的非负结果。如果a可以是负的,就写(a%b+b)%b,而不是简单地写a%b

然而,它在你问题中的代码中的用法很奇怪。在这种情况下,更容易假设a在从主代码调用power函数之前是正的(例如,通过像power((a%mod+mod)%mod, b)一样进行主调用)。可能作者只是想获得额外的正确性保证,尽管这不是必需的。