Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无限循环。Java BigInteger_Java_Biginteger - Fatal编程技术网

无限循环。Java BigInteger

无限循环。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

我的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(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