(num+mod)%mod的语句需要啥?

Posted

技术标签:

【中文标题】(num+mod)%mod的语句需要啥?【英文标题】:What is the need of the statement of (num+mod)%mod?(num+mod)%mod的语句需要什么? 【发布时间】:2015-07-08 10:27:40 【问题描述】:

这个程序中ans = (ans + mod) % mod这个语句需要什么?

假设mod = 10^9+7。此函数在 O(log(n)) 复杂度的 mod 操作下计算 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;

【问题讨论】:

重新打开:这是一个明智的问题,问得很清楚。 【参考方案1】:

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

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

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

【讨论】:

这个函数调用的语句power((a%mod+mod)%mod, b))对于避免在递归的每一步计算它确实很好。谢谢..

以上是关于(num+mod)%mod的语句需要啥?的主要内容,如果未能解决你的问题,请参考以下文章

sql语句mod(ascii(substr(userid,-1,1)),6)=4怎么解释

解决WorkBench执行更新语句时1175 SQLSTATE: HY000 (ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE)

解决WorkBench执行更新语句时1175 SQLSTATE: HY000 (ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE)

解决WorkBench执行更新语句时1175 SQLSTATE: HY000 (ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE)

在matlab中mod是啥意思

matlab中mod是啥意思