无限循环。 Java BigInteger

时间:2014-04-02 10:40:27

标签: java biginteger

我的Java代码中有以下“while”循环。我的代码中的所有变量都是BigIntegers。

BigInteger d=new BigInteger("1");
BigInteger e=new BigInteger("3");
BigInteger phi1=new BigInteger("6336");
while(true)
{
    if(((d.multiply(e)).mod(phi1)).equals(BigInteger.ONE))
        break;
    d=d.add(BigInteger.ONE);
    //System.out.println(d);
}

在这种情况下,循环无限执行。但我想在以下条件下添加休息时间:

if((d*e)%phi1==1)
    break;

我已将其转换为BigInteger

if(((d.multiply(e)).mod(phi1)).equals(BigInteger.ONE))
    break;

我在哪里弄错了?谁能告诉为什么循环无限执行?

2 个答案:

答案 0 :(得分:9)

63363的倍数,因此您尝试break的条件永远不会成真。

无限循环是不可避免的。

答案 1 :(得分:0)

你将3 * d除以6336,并检查余数r。设k为除法结果:

3d = k*6336 + r
=> r = 3*(d - 2112*k)

这意味着余数总是3的倍数,因此它永远不会是1.