我试图生成一个随机的Big Integer并使用Rabin-Miller测试检查它是否为素数。我无法使用确定性或生成一个新的大整数素数。我不断得到不是素数的数字。
继承我的代码
public static BigInteger generateRandomPrime(int numBits, Random rand, boolean print) {
BigInteger result = new BigInteger(numBits, rand);
BigInteger result2 = new BigInteger(numBits/2, rand);
int counter=0;
int res=0;
if(result.mod(TWO).equals(ZERO))
result = result.add(ONE);
while(print==false)
{
while(counter<=30 || res!=0)
{
res=RabinMillerTest(result, result2, print);
counter++;
}
if(res!=PROBABLY_PRIME)
{
result.add(TWO);
}
else
print=true;
}
return result;
}
答案 0 :(得分:1)
变量counter
初始化为零,在内循环中递增,但从不复位。
假设初始猜测不是素数,counter
将在第一次while(counter<=30 || res!=0)
循环运行时增加到31。在外循环的第二次迭代中,counter
已经是31.内循环不进行迭代,res
保持其值不受前一次外循环迭代的影响。
将counter = 0
作为外部循环中的第一个语句,而不是初始化counter
。