Java:使用Rabin Miller测试生成BigInteger随机素数

时间:2015-02-27 02:20:55

标签: java rsa primes

我试图生成一个随机的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;
}

1 个答案:

答案 0 :(得分:1)

变量counter初始化为零,在内循环中递增,但从不复位。

假设初始猜测不是素数,counter将在第一次while(counter<=30 || res!=0)循环运行时增加到31。在外循环的第二次迭代中,counter已经是31.内循环不进行迭代,res保持其值不受前一次外循环迭代的影响。

counter = 0作为外部循环中的第一个语句,而不是初始化counter