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
为正(例如,通过进行主调用).可能作者只是想获得正确性的额外保证,尽管不需要.power
power((a%mod+mod)%mod, b)
归档时间: |
|
查看次数: |
238 次 |
最近记录: |