2014-04-02 76 views
0

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

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; 

我在哪里得到它错了吗?任何人都可以告诉循环为什么无限执行?

+0

当“的数字%3总和”是零,则数是因数3.因为6 + 3 + 3 + 6 = 18%3是0,那么数是因数3→条件将永远不会满足。 – Maroun

+0

或者您可以注意到每个数字都是3的倍数...:P 6336/3 = 2112 –

回答

9

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

无限循环是不可避免的。

+1

我正在计算它:_( – Maroun

+1

加上:(((d.multiply(e)).mod(phi1) ).equals(BigInteger.ONE))等于d.multiply(e).mod(phi1).equals(BigInteger.ONE),您可以重构它,以便阅读 –

+0

@MarounMaroun从哪里得到那些→? – devnull

0

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

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

这意味着其余为总是3的倍数,因此,决不可能1.