gpt4 book ai didi

java - 大整数的底除法和欧几里得除法

转载 作者:行者123 更新时间:2023-12-01 22:31:50 25 4
gpt4 key购买 nike

Java 的 BigInteger 类提供截断除法(商和余数)。以此为起点,实现底数和欧几里得除法(商和余数)的最简单和最有效的方法是什么?

最佳答案

基于Soronbe的回答,这里是正确的 Java 语法的实现(不包括 floored divison 的第二个变体):

public BigInteger euclidianDivision(BigInteger a, BigInteger b) {
return
a.subtract(
a.compareTo(BigInteger.ZERO) < 0 ?
b.subtract(BigInteger.ONE) :
BigInteger.ZERO
).divide(b)
}

public BigInteger flooredDivision(BigInteger a, BigInteger b) {
return
a.add(
(a.compareTo(BigInteger.ZERO) < 0) != (b.compareTo(BigInteger.ZERO) < 0) ?
b.subtract(BigInteger.ONE) :
BigInteger.ZERO
).divide(b);
}

更新:根据三种除法算法计算余数,其中两种已经在BigInteger中实现(mod用于欧氏除法,remainder用于欧氏除法)截断除法)。要获取地板划分的余数,您可以使用以下实现:

public BigInteger flooredRemainder(BigInteger a, BigInteger b) {
return
a.mod(b).subtract(
b.compareTo(BigInteger.ZERO) < 0 ? BigInteger.ONE : BigInteger.ZERO
);
}

关于java - 大整数的底除法和欧几里得除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com