(num+mod)%mod语句的需求是什么?
What is the need of the statement of (num+mod)%mod?
程序中ans = (ans + mod) % mod
语句的需求是什么?
假设mod = 10^9+7
。该函数是在0 (log(n))复杂度下计算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;
}
这种结构最常见的用法是确保结果非负。标准的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)
一样进行主调用)。可能作者只是想获得额外的正确性保证,尽管这不是必需的。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- 抽象类的需求是什么?为什么要通过其基类访问派生类方法?在C++
- C++-缓冲区和流的需求是什么
- 当我们可以使用普通函数修改静态数据成员时,静态成员函数的需求是什么?
- (num+mod)%mod语句的需求是什么?
- MSYS在Windows中使用MinGW的需求是什么
- STL分配器复制构造函数需求的目的是什么?
- 在cpp中枚举的内存需求是什么?