强素数生成流程:
随机生成强素数算法流程如下:
(1)本文中以500 以内素数作为初始素数数组,在素数数组中随机选取一个素数h1。
(2)随机生成一个1~9 的整数x,结合第一步得到的素数h1,计算2ah1+1,a的取值从x开始逐渐加一,利用素数判断函数得到第一个出现的素数,记为h2。
(3)随机生成一个1~9 的整数y,计算2bh2+1,b 的取值从y开始逐渐加一,利用素数判断函数得到第一个出现的素数,记为h3。
(4)令P=2h3- 1,使用素数判断函数确定P 是否为素数,如果P并不是素数就执行(3),反之就执行(5)。
(5)输出P,P为生成的强素数值。
传入p为随机生成的1-512的素数,返回即为强素数,但就测试来看,p较小时确实实现了素数增强,大约扩大了8倍,但就测试来看直接生成较大位素数和素数增强的耗时几乎相同,甚至更快。当对256位素数或更大位数的素数进行增强的时候,耗时更久且有越界可能性,出现各种各样的错误,不太实用,有待改进。
public BigInteger gj(BigInteger p){
            //1
            Random r = new Random();
            int x = r.nextInt(9)+1;
            int y = r.nextInt(9)+1;
            BigInteger h2 = null;
            BigInteger h3 = null;
            BigInteger P = BigInteger.valueOf(500);
            h2 = p.multiply(BigInteger.valueOf(2*x)).add(BigInteger.valueOf(1));
            while (!h2.isProbablePrime(256)) {
                    x++;
                h2 = p.multiply(BigInteger.valueOf(2*x)).add(BigInteger.valueOf(1));
            }
            h3 = h2.multiply(BigInteger.valueOf(2*y)).add(BigInteger.valueOf(1));
            while (!P.isProbablePrime(256)){
                while (!h3.isProbablePrime(256)) {
                    y--;
                    h3 = p.multiply(BigInteger.valueOf(2*x)).add(BigInteger.valueOf(1));
                }
                P = h3.multiply(BigInteger.valueOf(2)).subtract(BigInteger.valueOf(1));
            }
//             while (!h3.isProbablePrime(256)) {
//                 y--;
//                 h3 = p.multiply(BigInteger.valueOf(2*x)).add(BigInteger.valueOf(1));
//             }
//             P = h3.multiply(BigInteger.valueOf(2)).subtract(BigInteger.valueOf(1));
            return P;
            //
        }









