无限循环。Java BigInteger
我的Java代码中有以下“while”循环。我代码中的所有变量都是大整数无限循环。Java BigInteger,java,biginteger,Java,Biginteger,我的Java代码中有以下“while”循环。我代码中的所有变量都是大整数 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(BigIn
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;
我哪里弄错了?有人能说出循环无限执行的原因吗?
6336
是3
的倍数,因此您试图中断的条件永远不会为真
无限循环是不可避免的。您将3*d除以6336,并检查余数r。设k为除法结果:
3d = k*6336 + r
=> r = 3*(d - 2112*k)
这意味着余数总是3的倍数,因此它永远不可能是1 我在计算它:u(plus:((d.multiply(e)).mod(phi1)).equals(biginger.ONE))等于d.multiply(e).mod(phi1).equals(biginger.ONE),你可以重构它,这样更容易理解read@MarounMaroun你从哪里弄来的→ ?当“数字%3之和”为零时,则数字为3的因数。由于6+3+3+6=18%3为0,则数字为3的因数→ 这个条件永远不会满足。或者你可以注意到每个数字都是3的倍数…:p6336/3=2112