微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

实施 (A ^ B) % C 即 pow(A, B) % C

如何解决实施 (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 作为输出

我发现当有负数时这种方法是不正确的,在这个例子中,当 A

解决方法

% 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 举报,一经查实,本站将立刻删除。