【发布时间】:2010-12-05 19:17:06
【问题描述】:
全部,
我已经实现了一个生成 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 异常
谁能建议我如何解决这个问题?
【问题讨论】:
-
也许尽量不要使用递归...而是把它放到一个大的while循环中。您甚至可以放置一个计数器并让它在一定数量的迭代后停止/失败。
-
如果您确定
calcNum.isProbablePrime()工作正常,您应该按照 Paul 的建议。 -
好吧 isProbablePrime() 工作正常,但我从来没有从 2 个素数中得到一个素数 .. 我只得到复合素数