所有,

我已经实现了一个生成2个随机素数的代码,并且这2个数的乘法应通过Miller Rabin素数测试。但是,我的代码一直在不断循环查找试图找到通过Miller rabin测试并最终出现Stackoverflow异常的数字。这是代码:

private void populateRandomPrimes()
{
    onePrimeValue = RandomPrime.getValue();

    do
    {
        secondPrimeValue= RandomPrime.getValue();
    }while(onePrimeValue == secondPrimeValue);

    BigInteger calcNum = new BigInteger(Integer.toString(onePrimeValue*secondPrimeValue));

    try
    {
        **if (calcNum.isProbablePrime(20))**
            populateMultiplicativeForPlayer();
        else
            populateRandomPrimes();
    }
    catch (Exception io)
    {
        io.printStackTrace();
    }
}


在上面的代码中:
1> RandomPrime类返回一个随机素数
2> onePrimeValue和secondPrimeValue都应该不同
3>由于代码行:if (calcNum.isProbablePrime(20))从不返回true,因此我最终调用相同的代码,直到得到Stackoverflow异常

谁能建议我如何解决这个问题?

最佳答案

请在您的问题下方查看我的评论...

private void populateRandomPrimes()
{
    while (true){
      onePrimeValue = RandomPrime.getValue();

      do
      {
          secondPrimeValue= RandomPrime.getValue();
      }while(onePrimeValue == secondPrimeValue);

      BigInteger calcNum = new BigInteger(Integer.toString(onePrimeValue*secondPrimeValue));

      try
      {
          if (calcNum.isProbablePrime(20)){
              populateMultiplicativeForPlayer();
              return;
          }
      }
      catch (Exception io)
      {
          io.printStackTrace();
      }
    }
}

07-28 13:47