[PYTHON] Projekt Euler 35

Problem

197 wird als zyklische Primzahl bezeichnet, da die durch Drehen der Ziffern erhaltenen Zahlen 197, 971, 719 alle Primzahlen sind.

Weniger als 100 hat 13 zyklische Primzahlen: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79 und 97.

Wie viele reisende Primzahlen sind weniger als 1 Million? http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2035

Antworten

0,2,4,5,6,8 sind nicht in den Ziffern von zyklischen Primzahlen mit zwei oder mehr Ziffern enthalten. Dies liegt daran, dass diese Zahlen in der ersten Ziffer immer durch 2 oder 5 teilbar sind. Daher sollten wir außer 2,5 Zahlen berücksichtigen, die nur 1,3,7,9 enthalten. Um diese Anzahl von Sätzen zu erstellen, habe ich eine Funktion namens mapall erstellt. mapall ist eine Funktion, die jedes Element e1 und e2 einer bestimmten Menge iter1 für die Häufigkeit kombiniert, mit der num durch eine geeignete Kopplungsregel f angegeben wird, und das Ergebnis als Mengenart zurückgibt. Zuerst habe ich mit ['', 1,3,7,9] als iter1 eine 6-stellige Zahl erstellt, die als die größte angesehen wird. '' Ist enthalten, damit die Elemente der ursprünglichen Liste in der kombinierten Liste verbleiben, wenn sie kombiniert werden. Zum Beispiel wird '' + '3' zu '3' und die Elemente der ursprünglichen Liste bleiben in der kombinierten Liste.

import mymath
def circle(num):
  s = str(num)
  for c in range(len(s)):
    s = s[1:]+s[0]
    yield int(s)

def mapall(f, iter1, num=1):
  ret = iter1
  for i in range(num):
    ret = set([f(e1,e2) for e1 in ret for e2 in iter1])
  return ret
  
def connect_num(e1,e2):
  return str(e1)+str(e2)

def main():
  pri = mymath.get_primes(10**6)
  n_list = ['',1,3,7,9]
  pn5 = mapall(connect_num, n_list,5)
  pn5.remove('')
  ans = {}
  for pn in pn5:
    if pn in ans:
      continue
    flag = True
    for n in circle(pn):
      if not pri['bool'][n]:
        flag = False
        break
    if flag:
      for n in circle(pn):
        ans[n] = True
  print len(ans)+2
main()

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 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 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