Projet Euler # 14 "Colonne de nombre de collats la plus longue" en Python

Problème 14 "Colonne de nombre de collats la plus longue"

Définissez une séquence de nombres qui est générée à plusieurs reprises par la formule suivante pour un entier positif.

n → n/2 (n est pair)\\
n → 3n + 1 (n est étrange)

À partir de 13, cette séquence de nombres ressemble à ceci:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

Il y a 10 termes de 13 à 1. On pense que cette séquence se termine à 1 quel que soit le nombre avec lequel vous commencez, mais cela n'a pas encore été prouvé (problème de Colats).

Maintenant, lequel des nombres inférieurs à 1 million devrait être lancé pour générer la plus longue séquence de nombres?

Remarque: peut-être plus d'un million au milieu d'une rangée

Python


n = 1000000
seq = range(1, n)

collatz_dict = {1: [1]}

def compute_collatz(i):
  if(i not in collatz_dict):
    if(i % 2 == 0):
      collatz = [i] + compute_collatz(i / 2)
    else:
      collatz = [i] + compute_collatz(3 * i + 1)
    collatz_dict[i] = collatz
  return collatz_dict[i]

collatz_lenghs = {}

for i in seq:
  collatz = compute_collatz(i)
  collatz_lenghs[i] = len(collatz)

max_length = max(collatz_lenghs.values())

max_index = collatz_lenghs.values().index(max_length)
max_length_collatz_key = collatz_lenghs.keys()[max_index]
max_length_collatz = collatz_dict[max_length_collatz_key]

result = max_length_collatz_key

print result
print result == 837799
print max_length
print max_length_collatz[:6]

résultat


837799
True
525
[837799, 2513398, 1256699, 3770098, 1885049, 5655148]

Il est un peu tard, mais je ne vois pas de bon moyen.

Recommended Posts

Projet Euler # 14 "Colonne de nombre de collats la plus longue" en Python
Programmation fonctionnelle dans Python Project Euler 1
[Note] Projet Euler en Python (problème 1-22)
Programmation fonctionnelle dans Python Project Euler 3
Projet Euler # 5 "Minimum Multiple" en Python
Projet Euler # 15 "Lattice Path" en Python
Projet Euler # 4 "Calligraphie maximum" en Python
Projet Euler # 3 "Maximum Prime Factors" en Python
Projet Euler # 11 "Produit maximum dans la grille" en Python
Projet Euler # 7 "1000 1er nombre premier" en Python
Projet Euler # 16 "Somme des pouvoirs" en Python
Projet Euler # 9 "Numéro spécial Pitagolas" en Python
Projet Euler # 2 "Even Fibonacci Number" en Python
Projet Euler # 17 "Nombre de caractères" en Python
Projet Euler # 1 "Multiple de 3 et 5" en Python
Projet Euler # 8 "Produit maximum en chaîne numérique" en Python
Projet Euler # 10 "somme des nombres premiers" en Python
Projet Euler n ° 12 "Triangles hautement ajustés" en Python
Projet Euler # 13 "Somme des grands nombres" en Python
Projet Euler # 6 "Différence de somme des carrés" en Python
Créer une documentation de projet Python dans Sphinx
Projet Euler 11 "Produit maximum dans la grille"
Projet Euler 37
Projet Euler 7
Projet Euler 47
Projet Euler 4
Projet Euler 38
Projet Euler 17
Projet Euler 26
Projet Euler 8
Projet Euler 23
Projet Euler 22
Projet Euler 19
Projet Euler 50
Projet Euler 42
Projet Euler 33
Projet Euler 43
Projet Euler 35
Projet Euler 36
Projet Euler 24
Projet Euler 46
Projet Euler 48
Projet Euler 45
Projet Euler 6
Projet Euler 44
Projet Euler 39
Projet Euler 40
Projet Euler 49
Projet Euler 29
Projet Euler 27
Projet Euler 41
Projet Euler 18
Projet Euler 13
Projet Euler 30
Projet Euler 16
Projet Euler 14
Projet Euler 34
Projet Euler 25
Faites une visite Euler non récursive en Python
J'ai écrit Project Euler 1 en une seule ligne.
Générer la séquence look-and-say présentée dans QuizKnock en Python