Haben Sie versucht, nur solche Zahlen zu generieren und sie zu überprüfen? Ich würde erwarten, dass das akzeptabel schnell ist. Die Primzahldichte nimmt nur als Logarithmus der Zahl ab, also würde ich erwarten, dass Sie ein paar hundert Zahlen versuchen, bis Sie eine Primzahl treffen. ln(2^512) = 354
so wird etwa eine Nummer in 350 Prime sein.
Grob gesagt, das Primzahl-Theorem besagt, dass, wenn eine Zufallszahl in der Nähe einig große Zahl N ausgewählt ist, die Chance, es prime zu sein, ist etwa 1/ln (N), wobei ln (N) bezeichnet die natürlichen Logarithmus von N. Zum Beispiel, in der Nähe von N = 10.000, ist etwa eine von neun Zahlen Primzahl, während in der Nähe von N = 1.000.000.000 nur eine von 21 Zahlen Primzahl ist. Mit anderen Worten, ist der durchschnittliche Abstand zwischen Primzahlen in der Nähe von N ungefähr ln (N)
(von http://en.wikipedia.org/wiki/Prime_number_theorem)
Sie müssen nur darauf achten, dass eine Nummer für Ihre Endziffern existiert. Aber ich denke, das ist so einfach wie zu überprüfen, dass die letzte Ziffer nicht durch 2 oder 5 teilbar ist (d. H. Es ist 1, 3, 7 oder 9).
Nach this performance data können Sie etwa 2000 ModPow Operationen auf 512-Bit-Daten pro Sekunde tun, und da ein einfacher Prime-Test wird 2^(p-1) mod p=1
Überprüfung, die den Betrieb eine ModPow ist, sollten Sie in der Lage sein, pro Sekunde mehr Primzahlen mit Eigenschaften zu erzeugen, .
So könnte man tun (Pseudo-Code):
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;
}
Und tun umfangreichere prime Kontrollen auf das Ergebnis dieser Funktion.
Das klingt schwierig, wenn nicht unmöglich ohne Bruteforcing durch die 155-stelligen Primzahlen und die Überprüfung jeder einzelnen. Interessante Frage aber: P –
Auch diese Frage kann besser für http://math.stackexchange.com/ –
Bruteforce durch Primzahlen, Bruteforce durch Zahlen die Erfüllung des Kriteriums und überprüfen sie für Primzahlen. Das sollte nicht so langsam sein, da die Primzahldichte ziemlich hoch ist. – CodesInChaos