【发布时间】:2020-07-20 05:33:34
【问题描述】:
long long int big_mod(long long int base, long long int power, long long int mod)
{
if(power==0) return 1;
else if(power%2==1)
{
int p1 = base % mod;
int p2 = (big_mod(base,power-1,mod))%mod;
return (p1*p2)%mod;
}
else if(power%2==0)
{
int p1 = (big_mod(base,power/2,mod))%mod;
return (p1*p1)%mod;
}
}
此函数为 (3 140068687 419634856) 输入返回负值。 为什么会这样?谁能解释一下。
【问题讨论】:
-
因为你的乘法溢出了。
-
我应该在我的代码中进行哪些更改以获得这些输入的正确值? @Barmar
-
你需要研究模算术的数学,看看是否有办法在不做乘法的情况下做到这一点。
-
您没有添加头文件,这可以帮助我们确定您的计算限制。基本上,您的限制受 CPU 架构和编译器能力的限制。您可以使用 lldb 或 gdb 在累加器中查看结果。那么你可以确定它是溢出还是别的什么