[PYTHON] Projekt Euler 2 Beschleunigung 2.21 Mikrosekunden speichern.

Die Terme der Fibonacci-Sequenz sind die Summe der beiden vorhergehenden Terme. Wenn die ersten beiden Terme 1, 2 sind, sind die ersten 10 Terme:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... Suchen Sie die Summe der geradzahligen Begriffe mit einem Zahlenspaltenwert von 4 Millionen oder weniger. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%202

Zuerst habe ich den Code geschrieben, als ich ihn mir ausgedacht habe.

def cof():
  (v1, v2) = (1, 2)
  max = 4 * (10**6)
  s = 0
  while v2<=max:
    if not v2 % 2: s += v2
    (v1, v2) = (v2, v1+v2)
  print s

Als ich mir das Problem ansah, ob es etwas gab, das beschleunigt werden konnte, bemerkte ich, dass alle drei Begriffe gerade Zahlen auftauchten. pe02.png

Wenn n1 der Term vor dem geraden Term ist und n2 der gerade Term ist, können die ihnen folgenden Terme n3, n4, n5 durch die folgenden Gleichungen ausgedrückt werden. pe02_2.png

n4 wird benötigt, um den nächsten Term abzuleiten, aber n3 kann wahrscheinlich weggelassen werden! Wenn Sie sich für gerade Begriffe entscheiden, sollten Sie außerdem die if-Anweisung weglassen können, die bestimmt, ob sie gerade ist oder nicht!

Also habe ich den folgenden Code geschrieben.

def cof2():
  (v1, v2) = (1, 2)
  max = 4 * (10**6)
  s = 0
  while v2 <= max:
    s += v2
    (v1, v2) = (v1+2*v2, 2*v1+3*v2)
  print s

Ich habe den Druck auskommentiert und die Zeit mit dem folgenden Code gemessen.

def get_time(func,name,num):
  import time
  print "%s start." % name
  total = 0
  for i in range(0,num):
    start = time.time()
    func()
    end = time.time()
    total += end - start 
  print "%s finished." % name
  print total

if __name__ == '__main__':
  num = 10 ** 6
  #num = 1
  get_time(cof,"cof",num)
  get_time(cof2,"cof2",num)

Infolgedessen sparten 1 Million Läufe 2,21 Sekunden (2,21 Mikrosekunden pro Lauf). pe02_3.png

Sparen Sie 221 Sekunden (ca. 3 Minuten und 40 Sekunden), indem Sie 100 Millionen Mal ausführen! Große Einsparungen!

Ich habe ungefähr 15 Minuten gebraucht, um neuen Code zu schreiben, da es sich um einen Code handelt, den ich nur einmal in meinem Leben ausgeführt habe.

Recommended Posts

Projekt Euler 2 Beschleunigung 2.21 Mikrosekunden speichern.
Was ist Project Euler 3-Beschleunigung?
Projekt Euler 7
Projekt Euler 47
Projekt Euler 31
Projekt Euler 38
Projekt Euler 17
Projekt Euler 26
Projekt Euler 8
Projekt Euler 23
Projekt Euler 22
Projekt Euler 19
Projekt Euler 50
Projekt Euler 42
Projekt Euler 33
Projekt Euler 32
Projekt Euler 43
Projekt Euler 35
Projekt Euler 36
Projekt Euler 24
Projekt Euler 46
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
[Project Euler] Problem1
Projekt Euler15 "Gitterpfad"
Projekt Euler Ursprüngliche Methodengruppe 1
[Hinweis] Project Euler in Python (Problem 1-22)
Funktionale Programmierung in Python Project Euler 3
Projekt Euler # 5 "Minimum Multiple" in Python
Project Euler 4 Versuch zu beschleunigen
Funktionsprogrammierung in Python Project Euler 2
Projekt Euler 11 "Maximales Produkt im Raster"
Projekt Euler # 15 "Gitterpfad" in Python
Projekt Euler # 4 "Maximale Kalligraphie" in Python
Projekt Euler 9 Aufbewahrung der Berechnungsergebnisse