Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#26 10-08-2024 13:18:09
- syrac
- Membre
- Inscription : 27-05-2014
- Messages : 83
Re : Découverte Constante Syracuse
Je reviens sur mes deux précédents messages dans lesquels je parlais du calcul des prédécesseurs impairs de 1 dans une suite de Collatz, c'est-à-dire du dernier terme impair avant d'atteindre 1 par une succession de divisions par 2. Ces prédécesseurs sont 1, 5, 21, 85, 341, etc.
On obtient facilement cette liste en constatant que ses termes correspondent à la somme $2^0+2^2+2^4+2^6,...$, que l'on peut noter
$\large p_k=\displaystyle \sum _{x=0}^k 2^{2 x} \quad \small k \in \mathbb{N}_0$
ou sous sa forme fermée
$\large p_k= \normalsize \dfrac{1}{3} \left(4^{k+1}-1\right) \quad \small (2)$
Le successeur d'un tel nombre est
$3 \left(\dfrac{1}{3} \left(4^{k+1}-1\right) \right) +1=4^{k+1}$
$=\large 2^{2 (k+1)}$
lequel descend ensuite directement vers 1.
Si on pouvait prouver que toute suite de Collatz passe par un terme impair de la forme (2), la conjecture serait démontrée.
Dernière modification par syrac (10-08-2024 13:20:26)
Hors ligne
#27 12-08-2024 19:52:51
- syrac
- Membre
- Inscription : 27-05-2014
- Messages : 83
Re : Découverte Constante Syracuse
[suite]
Il existe une infinité de termes impairs aboutissant à chacun des prédécesseurs de 1. L'algorithme suivant calcule les 9 premiers prédécesseurs de l'entier naturel impair n dans une suite de Collatz :
def collatz_preds(n, d=0):
m = 3 - (n % 3)
# Si m = 3 ça signifie que n est un multiple de 3, qui ne possède aucun prédécesseur. Dans ce cas on renvoie une liste vide
if m == 3:
return []
# Générer la liste des prédécesseurs de n
# On commence par le plus petit
x = (n * 2**m - 1) // 3
lst = [x]
# Calcul de 8 prédécesseurs supplémentaires (ou le nombre qu'on veut)
for _ in range(8):
x = 4 * x + 1
lst.append(x)
# Si d vaut 1, supprimer les multiples de 3 avant de renvoyer la liste de prédécesseurs
if d == 1:
lst = [x for x in lst if x % 3 != 0]
return lst
# Exemple d'utilisation
n = 1 # Entier naturel impair
result = collatz_preds(n) # d = 0 (par défaut)
print(result) # Affiche [1, 5, 21, 85, 341, 1365, 5461, 21845, 87381], où 21, 1365 et 87381 sont des multiples de 3
# Variante
result = collatz_preds(n, 1) # d = 1, ne pas tenir compte des multiples de 3
print(result) # Affiche [1, 5, 85, 341, 5461, 21845]
1 possède une infinité de prédécesseurs. Ceux qui ne sont pas des multiples de 3 possèdent eux-mêmes une infinité de prédécesseurs. On pourrait ainsi créer des suites de Collatz aussi longues qu'on veut et composées uniquement de termes impairs, en calculant à chaque étape une liste de prédécesseurs non multiples de 3 et en en sélectionnant un au hasard. On pourrait procéder de la même manière à partir de n'importe quel entier naturel impair (non multiple de 3) au lieu de 1, sauf que sa suite se poursuivra jusqu'à atteindre 1.
Ce raisonnement implique que s'il existait un entier impair dont la suite ne passe pas par 1, comme certains le soupçonnent, ça signifierait qu'en réalité il existe une infinité d'entiers impairs dont la suite ne passe pas par 1. Je parle de son infinité de chaines infinies de prédécesseurs. Prétendre qu'il "pourrait exister une suite divergente" est donc totalement inepte, car si tel était le cas alors il faudrait parler d'une infinité de suites divergentes. Or, après des décennies à faire tourner des ordinateurs de plus en plus puissants capables de gérer des entiers de plus en plus grands, on n'en a trouvé aucune.
Le problème, selon moi, est que parmi les milliers de personnes qui se sont intéressées à l'algorithme de Collatz, très peu savent comment calculer les prédécesseurs d'un terme impair, l'immense majorité d'entre elles ne s'étant jamais intéressée à la question ou n'ayant pas trouvé comment y parvenir. La littérature n'en parle d'ailleurs pas, du moins à ma connaissance, alors que c'est un concept central qui du coup est totalement ignoré.
Hors ligne