如何解决实施 (A ^ B) % C 即 pow(A, B) % C
我得到了三个整数 A、B 和 C。我需要实现一个程序来执行运算 A^B 模数 C。 我没有多想,写了以下代码:-
public int Mod(int A,int B,int C)
{
return (int)Math.pow(A,B) % C;
}
测试用例:A = -1,B = 1,C = 20,预期的 o/p 为 19,而我的代码给出了 -1 作为输出。
解决方法
% Java 中的运算符
在java中,计算时
A % B
根据以下条件生成答案:
当股息为负时,产生的答案也会为负,当股息为正时, >产生的答案也会是肯定的。
请注意,此行为是特定于语言的。在python中,上述程序将产生19作为输出。
代码缺陷
如果只希望 A % B
产生正面结果,那么简单地使用 A % B
将产生错误输出由于上述原因。
此外,计算 A^B % C
其中 B
可以直接取大值不是正确的方法。我建议您使用 fast exponentiation
来执行此操作。这是一个著名的算法,你可以很容易地在网上找到。
解决方案
如果您只想要积极的结果,请使用:
r = a % b > 0 ? a % b : Math.abs(b) + a % b;
这里 r
是余数,a
是被除数,b
是除数。
希望对你有所帮助。如果您想了解为什么会发生这种情况,请发表评论,我很乐意编辑我的答案以帮助您。
,Java 中没有“模数”运算符;有一个 remainder operator。
负一的次幂为负一。
负一除以 20 余数为负一。
JLS(上面的链接)特别说明结果的符号与左侧的符号相同。因此 -1 而不是 +19。
% 的定义是
二进制后为整数的操作数的余数运算 数字提升(第 5.6.2 节)产生的结果值使得 (a/b)*b+(a%b) 等于 a。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。