San*_*mar 6 c c++ algorithm math
ans = (ans + mod) % mod该计划中声明的必要性是什么?
假设mod = 10^9+7.该功能计算a到的功率b下模操作为O(log(n))的复杂性:
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;
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*etr 16
这种结构的最常见用法是确保结果是非负的.标准operator%对于正面和负面参数的行为有所不同:例如4%3==1,但是(-2)%3==-2,虽然您可能期望(-2)%3==1并且(-2)/3==-1在数学上更正确.
当使用模运算时,这种行为通常会引起问题,并且这种添加技巧mod通常用于获得数学上更正确的非负结果.一个人写道a%b,而不是简单地写,如果a可能是否定的(a%b+b)%b.
但是,它在您的问题中的代码中的使用是奇怪的.在这种情况下,在从主代码调用函数之前更容易假设a为正(例如,通过进行主调用).可能作者只是想获得正确性的额外保证,尽管不需要.powerpower((a%mod+mod)%mod, b)
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |