Das zuvor erstellte "Programm zum Bestimmen, ob eine in Python eingegebene Zahl eine Primzahl ist" verfügt über eine Funktion, die eine Primfaktorzerlegung durchführt, wenn es sich um eine zusammengesetzte Zahl handelt. Ich habe es hinzugefügt.
Ich erinnerte mich an die Methode der Primfaktor-Zerlegung, die ich in der Grundschule gelernt hatte, und beschloss, mich weiterhin von der kleinsten Primzahl zu trennen. Erstellen Sie insbesondere eine Primzahlenliste mit SymPys Primerange und teilen Sie diese durch eine teilbare Zahl aus dieser Liste. Dann, als die Division bis zum Ende der Primzahlenliste durchgeführt wurde, war sie beendet.
from sympy import primerange
inn = n = int(input("Geben Sie die Nummer ein, die Sie überprüfen möchten, ob es sich um eine Primzahl handelt.>> "))
primlist = list(primerange(2,(inn+1) / 2)) #1
yaku = []
for i in primlist:
while n % i == 0: #2
n /= i
yaku.append(i) #3
if not yaku: #4
print(n, "Ist eine Primzahl.")
else:
print(inn, "Ist eine zusammengesetzte Zahl und wenn sie in Primfaktoren zerlegt wird",yaku, "ist.")
Beim ersten Programmieren war der Bereich der von primerange () erstellten Primzahlenliste derselbe wie beim vorherigen Mal "primerange (2, int (n ** (1/2)) + 1)". Wenn dann die Eingabe-Ganzzahl "2 x Primzahl" war, wurden nur 2 zu Yaku hinzugefügt, und es gab ein Problem, dass die Primfaktorisierung nicht genau durchgeführt werden konnte. Insbesondere wenn ich eine Zahl wie 14 (2 × 7) eingegeben habe, war das Ergebnis "14 ist eine zusammengesetzte Zahl, und wenn sie in Primfaktoren zerlegt wird, ist es [2]. ] Ist herausgekommen. Daher setze ich den Bereich der Primzahlenliste auf "Primbereich (2, (inn + 1) / 2)". Auf diese Weise habe ich beschlossen, das vorherige Problem zu lösen. Zu diesem Zeitpunkt kann durch Hinzufügen von +1 zu inn eine Liste von Primzahlen bis zu einer Primzahl erstellt werden, selbst mit einer Ganzzahl von "2 x Primzahl". Insbesondere wenn 14 eingegeben wird, wird es Primerange (2, 7.5), so dass der Inhalt der Primelist [2, 3, 5, 7] wird. Wenn Sie nicht +1 ausführen, erhalten Sie den Primerange (2, 7), sodass der Inhalt der Primelist [2, 3, 5] ist und 7 nicht im Ergebnis der Primfaktorisierung enthalten ist, also eine genaue Primfaktorisierung Wird nicht möglich sein.
Wenn der Erstellungsbereich der Primzahlenliste zu groß ist und die Eingabe-Ganzzahl groß wird (7 Stellen oder mehr), sinkt die Berechnungsgeschwindigkeit sofort. Daher möchte ich die Bereichseinstellung und die Methode der Primfaktor-Zerlegung ein wenig verbessern. Vielen Dank für das Lesen bis zum Ende.
Recommended Posts