[PYTHON] Projekt Euler 44

Problem

Die Fünfeckzahl wird durch "Pn = n (3n-1) / 2" erzeugt. Die ersten 10 Terme sind

1, 5, 12, 22, 35, 51, 70, 92, 117, 145, ...

Ist.

"P4 + P7 = 22 + 70 = 92 = P8". Aber der Unterschied "70 - 22 = 48" ist kein Fünfeck.

Über fünfeckige Paare Pj und Pk,Überlegen Sie, was der Unterschied und die Summe fünfeckig sind.Einen Unterschied machenD = |Pk - Pj|Schreiben.Finden Sie den Mindestwert der Differenz D.. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2044

Antworten

Bestimmen Sie nach dem Erstellen einer Folge von Pentagonen bis zum 2n-Term, ob die Summe und Differenz der Pentagone des n-Terms und der Pentagone des 1. bis n-Terms beide Pentagone sind. tat. Da es einige Zeit dauerte, auf das Append-Attribut usw. zu verweisen, wurden das Append-Attribut und das Add-Attribut im Voraus in die Variablen eingefügt. Darüber hinaus wollten wir die Geschwindigkeit verbessern, indem wir uns auf das Set-Objekt beziehen, um festzustellen, ob die Elemente in einem vorgegebenen Set enthalten sind.

Als Ergebnis fanden wir zuerst eine Zahl, deren Summe und Differenz fünfeckig waren, aber wir konnten nicht bestätigen, dass es die kleinste war.

def pe44():
  start, stop = 1, 10**8
  pen = ((n * ( 3*n - 1))//2 for n in xrange(start, stop))
  p_list, p_set = [], set([])
  ans = 10**10
  i = 0
  append = p_list.append
  add = p_set.add
  while 1:
    append(pen.next())
    append(pen.next())
    add(p_list[2*i])
    add(p_list[2*i+1])
    
    d = search(p_list[i],p_list[:i+1],p_set)
    if d:
      min_d = min(d)
      if min_d < ans:
        found_answer(min_d)
        ans = min_d
    if ans < p_list[i+1] - p_list[i]:
      break
    i+=1
  return ans

def found_answer(n):
  print n

#@debug
def search(p1,p_list,p_set):
  d = []
  for p2 in p_list:
    if (p1+p2 in p_set) and (p1-p2 in p_set):
    #if (p1+p2 in p_list) and (p1-p2 in p_list):
      d.append(p1-p2)
  return d

pe44()

Recommended Posts

Projekt Euler 37
Projekt Euler 7
Projekt Euler 47
Projekt Euler 31
Projekt Euler 4
Projekt Euler 38
Projekt Euler 17
Projekt Euler 26
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 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 2 Beschleunigung 2.21 Mikrosekunden speichern.
Projekt Euler Ursprüngliche Methodengruppe 1
Was ist Project Euler 3-Beschleunigung?
Funktionsprogrammierung in Python Project Euler 1
Projekt Euler 10 "Summe der Primzahlen"
[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
Projekt Euler # 3 "Maximale Primfaktoren" in Python
Projekt Euler # 7 "1000 1. Primzahl" in Python
Projekt Euler # 16 "Summe der Kräfte" in Python
Projekt Euler # 9 "Spezielle Pitagolas-Nummer" in Python
Projekt Euler # 14 "Längste Spalte mit Kollatennummern" in Python
Ich habe Project Euler 1 in einem Liner geschrieben.
Projekt Euler # 2 "Gerade Fibonacci-Zahl" in Python
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python