Primfaktor-Zerlegung Version 2 der in Python eingegebenen Ganzzahlen

Einführung

Das Problem, dass die Ausführungszeit lang ist, wenn die Eingabe-Ganzzahl eine Primzahl in der zuvor erstellten [Primfaktor-Zerlegung Version 1 der Ganzzahl-Eingabe in Python] ist (https://qiita.com/totusuna/items/87a10755a25dc310c17a) Lösen.

Aktuelles Programm

from sympy import primerange
 inn = n = int (Eingabe ("Bitte geben Sie die Nummer ein, die Sie überprüfen möchten, ob es sich um eine Primzahl handelt. >>"))
num = int(n**(1/2)) + 1
primlist = list(primerange(2,num)) 
yaku = []

for i in primlist:
    if inn % i == 0: #1
 print (inn, "ist eine zusammengesetzte Zahl.")
        for i in list(primerange(i, (n +1)/i)):  #2
            if n == 1: #3
                break
            while n % i == 0:
                n /= i
                yaku.append(i)

 print ("Zerlegung des Primfaktors ist", yaku, ".")
        break
    elif i == primlist[-1] :
 print (inn, "ist eine Primzahl.")

Wechselpunkt

Um das Problem zu lösen, dass die Beurteilung, wenn es sich um eine Primzahl handelt, zu langsam ist, wird beurteilt, ob die vor der Durchführung der Primfaktorzerlegung in # 1 eingegebene Ganzzahl eine Primzahl ist. Wenn es sich um eine zusammengesetzte Zahl handelt, wird die Verarbeitung ab # 2 durchgeführt. Die if-Syntax in # 3 wurde hinzugefügt, um das Ergebnis sofort anzuzeigen, wenn die Primfaktorisierung von n abgeschlossen ist, bevor das Ende der Primliste erreicht wird.

Geschwindigkeitsvergleich

Die Zeit wurde mit %% timeit in jupyter Notebook gemessen. Wir haben 2281607 als 7-stellige Primzahl und 5241234 (2 x 3 x 873539) als 7-stellige zusammengesetzte Zahl verwendet. Primzahl ver.1:1.98 s ± 30.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) ver.2:1.17 ms ± 25.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Zusammengesetzte Zahl ver.1:4.63 s ± 40.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) ver.2:4.56 s ± 75.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Erwägung

Die Ausführungsgeschwindigkeit bei Eingabe einer Primzahl beträgt 1,98 ** s ** → 1,17 ** ms **, was eine signifikante Geschwindigkeitsverbesserung darstellt. Bei Eingabe der Anzahl der Verbundwerkstoffe änderte sich jedoch nicht die tatsächliche Verarbeitungsmethode selbst, sodass keine Verbesserung von 4,63 s → 4,56 s beobachtet wurde.

Reflexionen

Ich bin vorerst zufrieden, weil ich die Ausführungsgeschwindigkeit verbessern konnte, als es sich um eine Primzahl handelte, die diesmal das Ziel war. Wenn wir jedoch die Methode der Primfaktorisierung nicht verbessern, können wir die wesentliche Geschwindigkeit nicht verbessern, daher möchte ich auf diesen Punkt eingehen. Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

Primfaktor-Zerlegung Version 2 der in Python eingegebenen Ganzzahlen
Primfaktor-Zerlegung ver.1 der in Python eingegebenen Ganzzahlen
[Python 3] Primfaktor-Zerlegung in 14 Zeilen
Reversibles Verwürfeln von Ganzzahlen in Python
Tastenanschlag in Python
Projekt Euler # 10 "Summe der Primzahlen" in Python
Tastenanschlag in Python
Primzahl in Python
Primzahl 2 in Python
Python-Eingabehinweis in AtCoder
Objektäquivalenzbeurteilung in Python
Implementierung der schnellen Sortierung in Python
[Für Anfänger] Zusammenfassung der Standardeingabe in Python (mit Erklärung)
Bildpixel-Manipulation in Python
Zeitdelta in Python 2.7-Serie teilen
Unendlicher Primgenerator in Python3
Umgang mit JSON-Dateien in Python
Implementierung eines Lebensspiels in Python
Audio-Wellenform-Anzeige in Python
Mal sehen, wie man Eingaben in Python verwendet
Das Gesetz der Zahlen in Python
Implementierung der ursprünglichen Sortierung in Python
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
Projekt Euler # 3 "Maximale Primfaktoren" in Python
Dateneingabe / -ausgabe in Python (CSV, JSON)
Überprüfen Sie das Verhalten des Zerstörers in Python
Übung, dies in Python zu verwenden (schlecht)
Allgemeine Relativitätstheorie in Python: Einführung
Ausgabebaumstruktur von Dateien in Python
Zeigen Sie eine Liste der Alphabete in Python 3 an
Vergleich japanischer Konvertierungsmodule in Python3
Projekt Euler # 7 "1000 1. Primzahl" in Python
Das Ergebnis der Installation von Python auf Anaconda
Gang of Four (GoF) -Muster in Python
Grundlagen zum Ausführen von NoxPlayer in Python
Massenersatz von Zeichenfolgen in Python-Arrays
Projekt Euler # 16 "Summe der Kräfte" in Python
Zusammenfassung der integrierten Methoden usw. der Python-Liste
Ich habe mit Python nach einer Primzahl gesucht
Nicht logische Operatorverwendung von oder in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Praktisches Beispiel für hexagonale Architektur in Python
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Doppelte Pendelbewegungsgleichung in Python
Entfernen Sie DICOM-Bilder in Python
[Python] Kapitel 02-03 Grundlagen von Python-Programmen (Eingabe / Ausgabe)
Status jedes Python-Verarbeitungssystems im Jahr 2020
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Geben Sie Python ein, um die algebraische Erweiterung zu implementieren (1) ~ Monoide, Gruppen, Ringe, ganzzahlige Ringe ~
Geben Sie die Anzahl der CPU-Kerne in Python aus
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Erhalten Sie einen Websocket der kabu station ® API in Python
Unbeaufsichtigter Betrieb von Google Spreadsheets (usw.) in Python
Holen Sie sich den Aufrufer einer Funktion in Python
Passen Sie die Verteilung jeder Gruppe in Python an
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
Primzahlaufzählung und Primzahlbeurteilung in Python
Kopieren Sie die Liste in Python