[PYTHON] Was ist Project Euler 3-Beschleunigung?

Die Hauptfaktoren von 13195 sind 5, 7, 13, 29.

Finden Sie den größten der Primfaktoren von 600851475143. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%203

Ich habe versucht, es zu lösen, als ich darauf kam.

target = 600851475143
i = 1
while target != 1:
  i += 2
  while not target % i:
    target /= i
print i

Dies ist eine Antwort unter der Annahme, dass 600851475143 eine zusammengesetzte Zahl ist. Die while-Anweisung wird nicht so oft wiederholt, da es sich um eine zusammengesetzte Zahl handelt. Daher gibt es kein Problem mit diesem Code. Wenn jedoch 600851475143 eine Primzahl ist, tritt bei diesem Code ein Problem auf. 600851475143/2 Der Überschuss wird ungefähr 3 Billionen Mal berechnet.

Mit anderen Worten, die folgenden Situationen treten auf. 001.png

Bei der Bereitstellung von Diensten ist dies in einem frühen Stadium kein Problem, und es ist in der Regel zu einem späten Zeitpunkt ein Problem. Unter diesem Gesichtspunkt kann, selbst wenn es sich um eine Primzahl handelt, der folgende Code vorzuziehen sein, der die Langsamkeit unter dem Gesichtspunkt der Risikoabsicherung vermeiden kann. Im folgenden Code wird mit dem Elatostines-Sieb eine Liste von Primzahlen bis zur Quadratwurzel des Ziels erstellt, und die Primfaktorisierung wird anhand der Liste versucht. Es scheint, dass eine stabile Verarbeitungsgeschwindigkeit erhalten werden kann, indem die Restberechnung nicht für alle Primzahlen durchgeführt wird und dass die Berechnung nur bis zur Quadratwurzel des Ziels durchgeführt wird. (Obwohl der obige Code nur bis zur Quadratwurzel des Ziels berechnen kann.)

import mymath
import math
target = 600851475143
pri = mymath.get_primes(int(math.sqrt(target)))
max_p = 1
for p in pri['list']:
    while not target % p:
        target /= p
        max_p = p
if target != 1:
    print target
else:
    print max_p

002.png

Klicken Sie hier für mymath. http://www.sato-pat.co.jp/

Recommended Posts

Was ist Project Euler 3-Beschleunigung?
Projekt Euler 2 Beschleunigung 2.21 Mikrosekunden speichern.
Projekt Euler 37
Projekt Euler 47
Projekt Euler 31
Projekt Euler 4
Projekt Euler 38
Projekt Euler 26
Projekt Euler 8
Projekt Euler 22
Projekt Euler 19
Projekt Euler 50
Projekt Euler 33
Projekt Euler 32
Projekt Euler 43
Projekt Euler 35
Projekt Euler 36
Projekt Euler 24
Projekt Euler 48
Projekt Euler 45
Projekt Euler 6
Projekt Euler 44
Projekt Euler 39
Projekt Euler 40
Projekt Euler 49
Projekt Euler 29
Projekt Euler 27
Projekt Euler 41
Projekt Euler 18
Projekt Euler 13
Projekt Euler 30
Projekt Euler 16
Projekt Euler 14
Projekt Euler 34
Projekt Euler 25
Was ist ein Namespace?
Was ist copy.copy ()
Was ist dotenv?
Was ist Linux?
Was ist klass?
Was ist SALOME?
Was ist Linux?
Was ist Linux?
Was ist Pyvenv?
Was ist __call__?
Was ist Linux?
Was ist Python?
Was ist eine Distribution?
Was ist Piotroskis F-Score?
Was ist Raspberry Pi?
[Python] Was ist Pipeline ...
Was ist das Calmar-Verhältnis?
Was ist ein Terminal?
[PyTorch Tutorial ①] Was ist PyTorch?
Was ist ein Hacker?
Was ist JSON? .. [Hinweis]
Wofür ist Linux?
Was ist ein Zeiger?
Was ist Ensemble-Lernen?
Was ist TCP / IP?
Was ist Pythons __init__.py?