Zu Deinem 2. Punkt: Wieso Flop
Das verstehe ich nicht ganz. Bei Dir ist der Rechner doch auch schon bei etwa 10**18 (999999999999999999) mit Fehlermeldung ausgestiegen!
Der letzte Punkt ist klar, aber mit Rabin-Miller werden Primzahlen konstruiert, er eignet sich aber nicht zum Primzahltest, sonst wären alle Verschlüsselungsverfahren unsicher.
Ich kopiere mal mein Programm, um es zur Diskussion zu stellen,
(Danke Leonidas, für Deinen Hinweis) :
Code: Alles auswählen
def isprime(aNumber):
'''return True if the number is prime, false otherwise'''
if aNumber < 2 : return False
for k in (2,3,5,7) :
if ((aNumber%k) == 0) : return False
#
k = 11
list = (2,4,2,4,6,2,6,4,2,4,6)
i = 0
while i < len(list) :
if ((aNumber%k) == 0) : return False
k += list[i]
i += 1
#
# Im folgenden Programmstück werden für die Modulo-Operation
# nur Divisorenbenutzt, die keine Vielfachen von 2, 3, 5, 7 sind.
kmax = int(aNumber**0.5)
list = (6,2,6,4,2,6,4,6,8,4,2,4,2,4,8,6,4,6,2,4,6,2,6,6,
4,2,4,6,2,6,4,2,4,2,10,2,10,2,4,2,4,6,2,6,4,2,4,6)
lenlist = len(list)
while True :
i = 0
while i < lenlist :
if ((aNumber%k) == 0) : return False
k += list[i]
i += 1
#
if k > kmax : break
#
return True
#