Primzahlen / Threads
Verfasst: Dienstag 25. August 2020, 20:45
Hallo bin neu in Python und habe die Aufgabe erhalten ein Programm zu schreiben, dass überprüfen soll ob eine Zahl eine Primzahl ist oder nicht. Ich bin so weit, dass ich den Satz von Wilson berechnen kann und diesen dann durch Mod kleiner machen kann (wegen großen Zahlen wie BSP: 9000004879). Nun ist meine Aufgabe:
Mit freundlichen Grüßen
Wie die Intervalle gebildet werden hab ich auch schon und wie Threads funktionieren habe ich auch schon verstanden. Das einzige was ich nicht verstehe ist, wie man nun die Rechnung bzw das Intervall in die 4 Worker-Threads übergibt. Ich würde mich freuen wenn mir das einer erklären könnte.Beispiel: Es soll geprüft werden, ob 17 eine Primzahl ist, d.h. es wird 16! mod
17 berechnet. Es sollen 4 Threads benutzt werden, also wird das Intervall 1..16
in 4 Teilintervalle aufgeteilt: 1..4, 5..8, 9..12, 13..16. Diese werden den 4
Worker-Threads per Parameter übergeben.
Mit freundlichen Grüßen
Code: Alles auswählen
import threading
class PrimzahlThread(threading.Thread):
def __init__(self, zahl):
super().__init__()
self.Zahl = zahl
def run(self):
summe = 1
i = 1
for i in range(1,self.Zahl):
#summe = summe * i
summe=((summe%self.Zahl)*(i%self.Zahl))%self.Zahl
if summe%self.Zahl==self.Zahl-1:
print(self.Zahl, "is PZ!")
else:
print(self.Zahl, "ist KEINE PZ!")
t_threads=4
intervall=[]
for i in range(t_threads):
intervall.append([int(i*(self.Zahl-1)/t_threads+1), int((i+1)*(self.Zahl-1)/t_threads)])
print(intervall)
meine_threads = []
eingabe = input("> ")
while eingabe != "e":
try:
thread = PrimzahlThread(int(eingabe))
meine_threads.append(thread)
thread.start()
except ValueError:
print("Falsche Eingabe!")
eingabe = input("> ")
for t in meine_threads:
t.join()