我的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;
我在哪里弄错了?谁能告诉为什么循环无限执行?
答案 0 :(得分:9)
6336
是3
的倍数,因此您尝试break
的条件永远不会成真。
无限循环是不可避免的。
答案 1 :(得分:0)
你将3 * d除以6336,并检查余数r。设k为除法结果:
3d = k*6336 + r
=> r = 3*(d - 2112*k)
这意味着余数总是3的倍数,因此它永远不会是1.