gpt4 book ai didi

java - 将长方法转换为 BigInteger 方法

转载 作者:行者123 更新时间:2023-12-01 13:07:28 25 4
gpt4 key购买 nike

我有这两种使用 long 的方法,我想改用 BigInteger:

public static long findfirstnocommon(long n) {
long j;
for(j = 2; j < n; j++)
if(euclid(n,j) == 1) return j;
return 0;
}

public static long euclid(long m, long n) {
while(m > 0) {
long t = m;
m = n % m;
n = t;
}
return n;
}

这两种方法在我的程序中运行得非常好。然而,当我将它们转换为 BigIntegers 时,我得到了:

  public static BigInteger findfirstnocommon(BigInteger n) {
BigInteger j;
for(j = BigInteger.valueOf(2); j.compareTo(n) == -1; j.add(BigInteger.valueOf(1))){
if(euclid(n,j).compareTo(BigInteger.valueOf(1)) == 0){
return j;
}
}
return BigInteger.valueOf(0);
}

public static BigInteger euclid(BigInteger m, BigInteger n) {
BigInteger zero = BigInteger.valueOf(0);
while(m.compareTo(zero) == 1) {
BigInteger t = m;
m = n.mod(m);
n = t;
}
return n;
}

当我使用它们的方法并在我的程序中运行它们时,它似乎被卡住并且无法工作。我一直试图找出问题所在,但无法弄清楚。有什么建议么?谢谢。

最佳答案

j.add(BigInteger.valueOf(1))不变j 。它返回一个 BigInteger其值比 j 大 1 ,但你正在丢弃它。试试j = j.add(BigInteger.ONE) [此常量是为您提供的,因此您不必输入 valueOf(1) ].

事实上,BigInteger (如 String )是不可变类型,这意味着没有方法可以更改 BigInteger 的内容对象,仅返回 new BigInteger 的方法对象。

关于java - 将长方法转换为 BigInteger 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23163175/

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