所有,
我已经实现了一个生成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();
}
}
}