¿Intentó simplemente generar esos números y verificarlos? Yo esperaría que sea aceptablemente rápido. La densidad principal disminuye solo como el logaritmo del número, por lo que esperaría que probaras unos pocos cientos de números hasta llegar a la primogenitura. ln(2^512) = 354
así que aproximadamente un número en 350 será primo.
En términos generales, el teorema del número primo establece que si cercano se selecciona algún número grande N un número aleatorio, la posibilidad de que sea primo es aproximadamente 1/ln (N), donde ln (N) denota lo natural logaritmo de N. Por ejemplo, cerca de N = 10,000, aproximadamente uno de cada nueve números es primordial, mientras que cerca de N = 1,000,000,000, solo uno de cada 21 números es primo. En otras palabras, la diferencia media entre los números primos cerca de N es más o menos ln (N)
(desde http://en.wikipedia.org/wiki/Prime_number_theorem)
Sólo tiene que tener cuidado de que existe un número para sus dígitos finales. Pero creo que es tan fácil como verificar que el último dígito no sea divisible entre 2 o 5 (es decir, es 1, 3, 7 o 9).
Según this performance data se puede hacer sobre 2.000 operaciones ModPow en datos de 512 bits por segundo, y desde una simple prueba de acondicionamiento está comprobando 2^(p-1) mod p=1
que es una operación ModPow, usted debe ser capaz de generar varios números primos con sus propiedades por segundo .
Por lo que podría hacer (pseudocódigo):
BigInteger FindPrimeCandidate(int lastDigits)
{
BigInteger i=Random512BitInt;
int remainder = i % 100000;
int increment = lastDigits-remainder;
i += increment;
BigInteger test = BigInteger.ModPow(2, i - 1, i);
if(test == 1)
return i;
else
return null;
}
Y hacer un control más minucioso privilegiada en el resultado de esa función.
Esto suena difícil, si no imposible sin fuerza bruta a través de los números primos 155 dígitos y la comprobación de cada uno. Interesante pregunta sin embargo: P –
Además, esta pregunta puede ser más adecuado para http://math.stackexchange.com/ –
No ataque de fuerza bruta a través de los números primos, ataque de fuerza bruta a través de números que cumplen el criterio y comprobar si los números primos. Eso no debería ser tan lento ya que la densidad principal es bastante alta. – CodesInChaos