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.
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.")
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.
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)
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.
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