p.add( BigInteger.valueOf( 1 ).shiftLeft( pmin ).subtract( p ) );
p = p.add( BigInteger.valueOf( 1 ).shiftLeft( pmin ).subtract( p ) );
  public static BigInteger generateRandomPrime( int pmin, int pmax, BigInteger f )  {    BigInteger d;    //Step 1 - generate prime    BigInteger p = new BigInteger( (pmax + pmin)/2, new Random() );    if( p.compareTo( BigInteger.valueOf( 1 ).shiftLeft( pmin ) ) <= 0 )      {	p.add( BigInteger.valueOf( 1 ).shiftLeft( pmin ).subtract( p ) );      }	    //Step 2 - test for even    if( p.mod( BigInteger.valueOf(2) ).compareTo( BigInteger.valueOf( 0 )) == 0)      p.add( BigInteger.valueOf( 1 ) );    for(;;)      {	//Step 3	if( p.compareTo( BigInteger.valueOf( 1 ).shiftLeft( pmax)) > 0)	  {	    //Step 3.1	    p = p.subtract( BigInteger.valueOf( 1 ).shiftLeft( pmax) );	    p = p.add( BigInteger.valueOf( 1 ).shiftLeft( pmin) );	    p = p.subtract( BigInteger.valueOf( 1 ) );	    //Step 3.2	    // put step 2 code here so looping code is cleaner	    //Step 2 - test for even	    if( p.mod( BigInteger.valueOf(2) ).compareTo( BigInteger.valueOf( 0 )) == 0)	      p.add( BigInteger.valueOf( 1 ) );	    continue;	  }		//Step 4 - compute GCD	d = p.subtract( BigInteger.valueOf(1) );	d = d.gcd( f );	//Step 5 - test d	if( d.compareTo( BigInteger.valueOf( 1 ) ) == 0)	  {	    //Step 5.1 - test primality	    if( p.isProbablePrime( 1 ) == true )	      {				//Step 5.2;		return p;	      }	  }	//Step 6	p = p.add( BigInteger.valueOf( 2 ) );	//Step 7      }  }