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

前端之家收集整理的这篇文章主要介绍了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)).可能作者只是想获得正确性的额外保证,尽管不需要.

猜你在找的C&C++相关文章