微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – (num mod)%mod语句的需要是什么?

这个程序中声明ans =(ans mod)%mod的需要是什么?

假设mod = 10 ^ 9 7.该函数在O(log(n))复杂度的mod操作下计算a到b的幂:

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;
}

解决方法

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

当使用模运算时,这种行为通常会引起问题,并且这种添加mod的技巧通常用于获得数学上更正确的非负结果.不是简单地写一个%b,如果a可以是负数,则写入(a%b b)%b.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐