Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 Re : Café mathématique » Approche positionnelle de Collatz » Aujourd'hui 14:08:44

Petit utilitaire très pratique : un script qui affiche une suite compressée en différenciant les termes impairs intermédiaires du reste. Je l'ai également ajouté à mon fichier de présentation.


# Suite compressée avec distinction des termes impairs intermédiaires
def suiteColoree(n):
    termes = [str(n)]

    while n > 1:
        n = (3*n + 1)//2 if n % 2 else n//2
        s = str(n)

        if n > 1 and n % 2:
            s = f"\033[1;31m{s}\033[0m"

        termes.append(s)

    print(", ".join(termes))

# Exemple
suiteColoree(37)
 

Résultat : 37, 56, 28, 14, 7, 11, 17, 26, 13, 20, 10, 5, 8, 4, 2, 1

#2 Re : Café mathématique » Approche positionnelle de Collatz » Hier 14:15:08

Après lui avoir posé la bonne question (très important), ChatGPT s'est décidé à simplifier la recherche de suites partiellement isomorphes ... sans passer par le calcul d'un entier potentiellement gigantesque. Voir cette nouvelle section.

#4 Café mathématique » Approche positionnelle de Collatz » 12-09-2026 18:55:42

syrac
Réponses : 3

[Même fil que le précédent, mais restructuré]

reBonjour,

Je travaille depuis plusieurs années sur une approche inverse de la conjecture de Collatz. Au lieu de calculer la suite d'un entier impair $n_0$ comme on en a l'habitude, on fixe la longueur $L$ et le nombre $t$ de termes impairs d'une suite dite anonyme (on ne connaît aucun de ses termes, seulement leur position relativement au premier) puis on cherche quels entiers impairs possèdent ces caractéristiques.

Le cœur de cette méthode repose sur la formule

$n_0=\dfrac{2^{p1}-A_t}{3^{t+1}}$

dans laquelle $A_t$ est calculé de manière itérative par la méthode de Horner

$A_0=1\;,\;A_{k+1}=3\,A_k+2^{S_k}$

avec

  • $S$ → la liste des positions des termes impairs, qui peut être aléatoire en nombre et en valeurs,

  • $p1=L-1$ → position du 1 final.

D'autre part, en calculant le nombre exhaustif de suites de longueur $L$ possédant $t$ termes impairs, j'ai observé qu'elles forment une courbe en cloche (gaussienne) qui devient de plus en plus régulière à mesure que $L$ augmente.

J'aurais aimé avoir vos avis sur deux questions restées ouvertes :

  1. Je sais calculer la valeur minimale de la courbe en cloche, mais existe-t-il une méthode algébrique pour calculer la valeur maximale de $t$ pour $L$ donné, c'est-à-dire la limite droite de cette courbe (qui n'est pas infinie) ?

  2. Cette distribution statistique a-t-elle déjà été modélisée dans la littérature ?

Explications complètes dans ce document (également restructuré).

Merci d'avance pour votre contribution à cette étude ! :-)

#5 Re : Café mathématique » A tous les amoureux des Maths ! » 06-09-2026 13:23:59

DSBmath a écrit :

dans l'Art de la guerre les maths sont omniprésentes

En réalité, Sun Tzu était féru de macramé, activité à laquelle il consacrait tout son temps libre. Son "Art de la guerre" est truffé de références cachées à cette technique de tissage. Extrait :

Si nous connaissons bien le temps, nous n'ignorerons point ces deux grands
principes Yin et Yang par lesquels toutes les choses naturelles sont formées et par
lesquels les éléments reçoivent leurs différentes modifications; nous saurons le
temps de leur union et de leur mutuel concours pour la production du froid, du chaud,
de la sérénité ou de l'intempérie de l'air.

#6 Re : Café mathématique » Les trois bidons revisités » 04-07-2026 16:18:07

Je viens de terminer une progression de 777 étapes sans doublon et sans permutation ... et sans zéro. Pour la charger dans l'appli, sélectionnez-la (Ctrl+A) puis copiez-la (Ctrl+C), cliquez sur le nouveau bouton "Importer" et collez-la (Ctrl+V).

Bien sûr, depuis n'importe lequel de ces 777 triplets on peut descendre rapidement vers un zéro. Ma stratégie pour rester "en altitude" en mode Exploration :

  1. Si toutes les distances sont égales je sélectionne le plus petit receveur et le plus grand donneur, de manière à équilibrer les volumes puisque le receveur double et que le donneur diminue d'autant.

  2. Sinon je sélectionne le couple receveur/donneur qui correspond à la plus grande distance.

Il est probable qu'en revenant suffisamment en arrière j'aurais trouvé un chemin qui m'aurait permis d'aller au-delà de 777 étapes, mais j'ai estimé que pour un test effectué manuellement c'était suffisant. Pour la suite j'envisage d'automatiser la procédure afin de voir si des chemins de plusieurs milliers d'étapes sans tomber sur un zéro sont possibles.

L'algorithme de parcours en largeur permettrait également de tracer le graphe du chemin à partir d'un triplet donné jusqu'au plus proche zéro (ou plus proches zéros).

Tout ceci est toujours sur le Problème des trois bidons

#7 Re : Café mathématique » Les trois bidons revisités » 02-07-2026 14:32:12

Nouvelle fonctionnalité : voir EDIT 2 dans mon premier message.

#8 Re : Café mathématique » Les trois bidons revisités » 30-06-2026 11:36:34

L'application réunit maintenant le meilleur des deux mondes : 1) un explorateur interactif, 2) un assistant au choix.

Je ne vais pas réitérer les explications que j'ai fournies dans mon premier message après l'avoir édité, alors merci à vous de remonter jusqu'à lui.

EDIT : je viens de modifier un comportement, illustré par cette phrase : "Il peut arriver que deux bidons représentent un bon choix, aussi bien comme receveur que comme donneur. L'appli n'en suggère cependant qu'un seul, aléatoirement, ce qui fait que la progression peut changer."

#9 Re : Café mathématique » Les trois bidons revisités » 29-06-2026 12:18:23

Disons que mon appli est un explorateur interactif (ou BFS manuel guidé par la réflexion), la tienne un BFS automatisé. Mais contrairement à ce qu'on pourrait en déduire, je ne suis pas contre le fait de déléguer nos fonctions cognitives à des machines !

#10 Re : Café mathématique » Les trois bidons revisités » 29-06-2026 09:47:54

Hi Ernst,

Merci, bien que le triplet dont j'ai parlé ne soit pas (3, 5, 8) mais (3, 8, 13). Peux-tu refaire tes calculs et surtout expliquer la démarche plutôt que les résultats bruts ?

EDIT : ne te casse pas la tête, ton exemple est trop simple, surtout que mon appli donne la solution sans avoir besoin de cliquer (tu places simplement ta souris sur le 3 ou sur le 5). Ce qui serait formidable c'est que tu partes de (3, 8, 13) pour aboutir à un triplet contenant un zéro mais inconnu jusqu'à présent, quel que soit le nombre d'étapes (parce que je soupçonne qu'il en faudra plus pour atteindre certains zéros).

#11 Re : Café mathématique » Les trois bidons revisités » 28-06-2026 17:24:51

Premier résultat encourageant : aussi bien l'algo de Yoshi que celui de Ernst donnent ce résultat (au format de mon appli)

0. (3, 8, 13) [1 ← 2]
1. (6, 5, 13) [1 ← 3]
2. (12, 5, 7) [2 ← 1]
3. (7, 10, 7) [1 ← 3]
4. (14, 10, 0)

Mon appli a permis de trouver un autre chemin :

0. (3, 8, 13) [1 ← 3]
1. (6, 8, 10) [1 ← 3]
2. (12, 8, 4) [3 ← 1]
3. (8, 8, 8) [1 ← 2]
4. (16, 0, 8)

Quoi qu'il en soit, il existe 13 triplets dont la somme est 24 et qui contiennent un seul zéro. Dans Mathematica, faire

DeleteDuplicates[
  Sort /@ Select[
    Tuples[Range[0, 24], 3],
    Total[#] == 24 && MemberQ[#, 0] &
  ]
]

ce qui donne

{{0, 0, 24}, {0, 1, 23}, {0, 2, 22}, {0, 3, 21}, {0, 4, 20}, {0, 5, 19}, {0, 6, 18}, {0, 7, 17}, {0, 8, 16}, {0, 9, 15}, {0, 10, 14}, {0, 11, 13}, {0, 12, 12}}

J'ai mis les deux déjà trouvés en gras. Il en reste 11, mais reste à savoir si le triplet (3, 8, 13) de départ permet ou non de les produire.

#12 Café mathématique » Les trois bidons revisités » 27-06-2026 19:00:04

syrac
Réponses : 9

Bonjour,

Ce qui suit est une simplification du problème des 3 bidons posé par Yoshi dans ce sujet, et dont je rappelle l'énoncé :

Vous disposez de trois bidons contenant chacun une quantité entière d'eau. À chaque étape vous pouvez choisir deux bidons dont les contenus sont $n_1$ et $n_2$ avec $n_1 \le n_2$. Vous versez $n_1$ litres du bidon le plus rempli vers le moins rempli. Ainsi, le contenu du bidon le moins rempli double, passant de $n_1$ à $2n_1$ litres, tandis que celui du bidon  le plus rempli diminue d'autant, passant de $n_2$ à $n_2 - n_1$ litres. Le troisième bidon n'est pas modifié. On suppose que les bidons sont suffisamment grands pour contenir toute l'eau après chaque opération.

Trouver un algorithme permettant de vider l'un des bidons ($n_x=0$) au bout d'un nombre fini d'opérations.

Ce que je nomme simplification consistait au départ en une interprétation géométrique du problème :

Considérons le segment $[0,b]$. Choisissons un point $a$ de ce segment vérifiant $0 > a \le b/2$.
On effectue l'opération suivante : le point $a$ est déplacé vers $b$ d'une distance égale à sa distance à l'origine. Il passe ainsi de la position $a$ à la position $2a$.
Le point $b$ demeure fixe.

Concrètement, j'ai créé une petite appli (adresse plus bas) qui exploite cette vision des choses. Quelques explications :

  • Les triplets ne sont pas triés, les bidons ayant une position fixe.

  • Ces derniers sont numérotés 1, 2, 3 de gauche à droite, numéro utilisé par l'historique (ou progression).

  • L'historique reflète ce qu'on a fait pour parvenir à tel ou tel résultat. Exemple :
    0. (3, 8, 10)   [2 ← 3]
    1. (3, 16, 2)
    Signification : le triplet (3, 16, 2) a été obtenu à partir de (3, 8, 10) en doublant le bidon 2 et en désignant le bidon 3 comme "donneur" (celui qui fournit la quantité d'eau nécessaire). Sous Windows, on obtient la flèche-gauche en tapant Alt+27.

  • Lorsqu'un résultat a déjà été obtenu (on tourne en rond) il est en rouge.

  • Le bouton "Annuler" annule le dernier résultat, ce qui permet de corriger le tir ou d'explorer une autre piste.

EDIT : 30/06/2026. Nouvelles fonctionnalités :

Pour rendre ce qui suit plus clair je vais nommer Receveur le bidon dont on double le volume, et Donneur celui utilisé pour fournir ce complément d'eau.

L'application dispose maintenant d'un "assistant" qui intervient à deux moments :

  • avant le choix du receveur l'un des bidons se voit attribuer un fond vert : il désigne celui que l'assistant considère comme le meilleur choix.

  • lorsque le receveur a été sélectionné, le bouton "Donneur" devient disponible. Cliquer dessus accentue brièvement d'un fond mauve le bidon que l'assistant considère comme le meilleur donneur.

Bien entendu, rien n'oblige à suivre ces recommandations ; elles n'ont d'autre utilité que d'éviter le blocage face à un choix difficile.

NB :

  • La progression des étapes recommandées par l'assistant n'est pas nécessairement la même que celle fournie par un script Python ou autre, mais elle s'effectue dans le même nombre d'étapes.

  • Il peut arriver que deux bidons représentent un bon choix, aussi bien comme receveur que comme donneur. L'appli n'en suggère cependant qu'un seul, aléatoirement, ce qui fait que la progression peut changer.

Autre amélioration : sélectionnez un triplet quelque part (éventuellement entre parenthèses ou crochets), cliquez sur le champ "Volume du bidon 1", et enfin pressez Ctrl+V (copier-coller) pour renseigner les trois champs simultanément.

EDIT 2 : 01/07/2026. Nouveau : deux modes de fonctionnement sont désormais disponibles :

  • En mode Assistance, l'application suggère le meilleur receveur et peut, à la demande, indiquer le meilleur donneur afin de vous guider vers une solution (un bidon vide). C'est ce que j'ai annoncé il y a peu (premier EDIT).

  • En mode Exploration, toute assistance visuelle disparaît. Un panneau latéral présente les différentes possibilités offertes à chaque étape, en indiquant pour chaque couple receveur/donneur le nombre minimal d'étapes restant avant la solution. Vous pouvez ainsi choisir librement votre stratégie, suivre le chemin le plus court ou au contraire explorer des itinéraires plus longs et découvrir d'autres comportements du système.

    Dans l'exemple suivant le triplet de départ (étape 0) est (550, 179, 1152). Voici ce qu'affiche l'explorateur :
    bfs-1.png
    Nous voyons qu'à cette étape il existe trois manières de poursuivre notre chemin vers une solution :

    1. Sélectionner le receveur 550, qui nous laisse une seule possibilité de donneur : 1152 → 9. Le chiffre après la flèche représente la distance minimale, en nombre d'étapes, jusqu'à une solution.

    2. Sélectionner le receveur 179, qui nous laissera le choix du donneur 550 grâce auquel nous pourrons aboutir à une solution en 5 étapes,

    3. ou celui du donneur 1152 dont le chemin vers une solution sera plus long (8 étapes).

    Si nous souhaitons trouver le chemin le plus court nous choisirons clairement le receveur 179 puis le donneur 550. Mais ce qui est plus amusant c'est de tester différents chemins, et à ce propos j'ai ajouté un bouton "Répéter", qui permet de repartir du même triplet. Une piste de recherche intéressante est de choisir systématiquement le couple receveur/donneur qui affiche la distance la plus longue. Je suis ainsi arrivé à 64 étapes à partir du triplet (786, 231, 471). Je précise qu'à chacune d'elles l'appli vérifie si le nouveau triplet existe déjà dans l'historique ou en est une permutation. Si c'est le cas elle l'affiche en rouge (doublon) ou orange (permutation).

    Ce qu'on observe est que la progression devient de plus en plus difficile à cause des doublons et/ou permutations qui obligent à revenir en arrière (bouton Annuler) pour faire un autre choix. Mais une question se pose : existe-t-il des chemins vraiment très longs ?

L'application en question se trouve à cette adresse.

#13 Re : Café mathématique » Encore une histoire de bidons » 25-06-2026 18:26:52

Utiliser une IA devient un réflexe. Dès que quelque chose paraît un peu ardu, beaucoup de gens — dont j'ai tendance à faire partie — se tournent vers l'IA. C'est beaucoup plus pratique et rapide que de faire un effort pour comprendre. Je sais, c'est une solution de facilité qui à long terme peut se révéler une nuisance. Mais il faut distinguer deux choses : ce qu'on apprend et dont on est sûr que ça nous sera utile à l'avenir, et ce dont on prend connaissance à titre d'information et qu'on ne ressent pas le besoin de tranformer en savoir. Dans le cas de ta démonstration, j'ai demandé à ChatGPT de me l'expliquer parce que j'avais envie de comprendre, mais sans aller jusqu'à reprendre des études de maths.

En réalité, ce que je sais des maths c'est ce que j'ai appris moi-même au cours de ma recherche de longue haleine sur la conjecture de Collatz, ajouté à un attrait prononcé pour l'algèbre.

#14 Re : Café mathématique » Encore une histoire de bidons » 25-06-2026 17:08:14

[suite]

D'ailleurs c'est un excellent test sur les capacités de ChatGPT en maths. Comme je lui avais passé une capture de ta démo (sinon il m'aurait fallu une heure pour la convertir en LaTeX), il m'a répondu sous la même forme (?). Une critique envers ses explications ?

EDIT :

Yoshi a écrit :

Croyez-moi, sur un écran 24 pouces configuré en résolution 1920 x 1200 pixels, c'est très peu lisible...

Tu n'as qu'à t'acheter un BenQ RD240Q (24 pouces, 2560x1600) avec la mise à l'échelle de 125 % recommandée par Windows 11 (et appliquée par défaut). Augmenter la densité de pixels augmente la lisibilité du texte, surtout lorsqu'il est petit, sans modifier la perception de l'échelle. On le constate quotidiennement en utilisant un smartphone.

#15 Re : Café mathématique » Encore une histoire de bidons » 25-06-2026 16:52:15

@Michel Coste,

Etant plus porté vers le développement web que vers les maths, j'ai dû demander à ChatGPT de m'expliquer cette démonstration, laquelle me réjouit grandement : personne ne deviendra fou à cause de ce problème ! ☑

#16 Re : Café mathématique » Encore une histoire de bidons » 25-06-2026 13:20:45

@Ernst, je dois dire que je suis impressionné par la fonction 'solve(a,b,c)', qui t'a permis de passer d'une usine à gaz à une solution concise.

J'ai demandé à ChatGPT de lancer une recherche exhaustive sur des petites sommes $a+b+c$ en utiisant les règles définies dans l'énoncé. Il a cherché jusqu'à 500 sans tomber sur une impossibilité (un triplet de départ qui ne tombe jamais sur un autre contenant 0). Tout comme avec le problème de Collatz, ce genre de test ne constitue pas une preuve : on sait que le triplet cible existe, mais on ne sait pas si on pourra l'atteindre à partir de celui de départ. Dans les deux cas il reste à trouver une démonstration, et je trouve que de ce point de vue il existe une similitude entre les deux problèmes.

EDIT :

L'approche "à la Collatz" consisterait à noter que le triplet $(a,3a,c)$ atteint 0 en 2 étapes, et il en existe une infinité. Ensuite on se demanderait quel triplet a pour successeur $(a,3a,c)$, puis ... Et là on deviendrait fou, comme avec Collatz. ❌⛔

#17 Re : Café mathématique » Encore une histoire de bidons » 25-06-2026 00:34:33

Pas mal, mais beaucoup trop compliqué (je suis persuadé qu'on peut trouver une solution simple) et fait en 8 étapes ce que Qwen fait en 4. Quelle IA as-tu utilisée ? Quel était le prompt ?

Étape  0 : (  8,  10,  11)
Étape  1 : ( 16,  10,   3)
Étape  2 : (  6,  20,   3)
Étape  3 : (  6,  17,   6)
Étape  4 : ( 12,  17,   0)

#18 Re : Café mathématique » Encore une histoire de bidons » 24-06-2026 13:04:30

J'ai demandé à Qwen de faire en sorte que le contenu des triplets soit affiché dans l'ordre naturel (a, b, c), parce qu'avec le tri il faut se faire des noeuds au cerveau pour suivre. Il a trouvé une solution élégante : utiliser le tri dans le calcul, pour les performances, mais afficher les étapes dans l'ordre original. Nouvelle version :


from collections import deque

def vider_bidon(a, b, c):
    start = (a, b, c)
   
    # Si c'est déjà vide
    if 0 in start:
        return [start]

    queue = deque([start])
    came_from = {start: None}
   
    # On utilise un set de tuples TRIÉS pour éviter les doublons
    # mais on garde l'ordre original dans la queue
    visited = {tuple(sorted(start))}

    while queue:
        x, y, z = queue.popleft()

        # Générer tous les mouvements possibles (6 au max)
        moves = []
        state = [x, y, z]
        for i in range(3):
            for j in range(3):
                if i != j and state[i] <= state[j] and state[i] > 0:
                    new_state = state[:]
                    new_state[i] = 2 * state[i]
                    new_state[j] = state[j] - state[i]
                    moves.append(tuple(new_state))

        for nxt in moves:
            nxt_sorted = tuple(sorted(nxt))
           
            if nxt_sorted not in visited:
                visited.add(nxt_sorted)
                came_from[nxt] = (x, y, z)
               
                # Condition d'arrêt
                if 0 in nxt:
                    # Reconstruction du chemin
                    path = [nxt]
                    curr = nxt
                    while came_from[curr] is not None:
                        curr = came_from[curr]
                        path.append(curr)
                    return path[::-1]
               
                queue.append(nxt)
               
    return None

# --- Affichage lisible ---
if __name__ == "__main__":
    chemin = vider_bidon(54, 78, 37)
    print(f"Solution trouvée en {len(chemin) - 1} étapes :\n")
    for i, etape in enumerate(chemin):
        a, b, c = etape
        print(f"Étape {i:2d} : ({a:3d}, {b:3d}, {c:3d})")
 

Triplet initial : (54,  78,  37)

Ancien affichage (avec tri) :

Étape 0 : (37, 54, 78)
Étape 1 : (17, 74, 78)
Étape 2 : (34, 57, 78)
Étape 3 : (44, 57, 68)
Étape 4 : (11, 44, 114)
Étape 5 : (22, 44, 103)
Étape 6 : (44, 44, 81)
Étape 7 : (0, 81, 88)

Nouvel affichage (sans tri) :

Étape  0 : ( 54,  78,  37)
Étape  1 : (108,  24,  37)
Étape  2 : ( 71,  24,  74)
Étape  3 : (142,  24,   3)
Étape  4 : (139,  24,   6)
Étape  5 : (133,  24,  12)
Étape  6 : (121,  24,  24)
Étape  7 : (121,  48,   0)

EDIT:

Étape  0 : ( 54,  78,  37)
Étape  1 : (108,  24,  37)    ← ( 2a, b-a, c )
Étape  2 : ( 71,  24,  74)    ← ( a-c, b, 2c )
Étape  3 : (142,  24,   3)    ← ( 2a, b, c-a )
Étape  4 : (139,  24,   6)    ← ( a-c, b, 2c )
Étape  5 : (133,  24,  12)    ← ( a-c, b, 2c )
Étape  6 : (121,  24,  24)    ← ( a-c, b, 2c )
Étape  7 : (121,  48,   0)    ← ( a, 2b, c-b )

Avec ma simplification :

Étape  0 : ( 54,  78, 999)
Étape  1 : (108,  24, 999)    ← ( 2a, b-a, c )
Étape  2 : (216,  24, 891)    ← ( 2a, b, c-a )
Étape  3 : (192,  48, 891)    ← ( a-b, 2b, c )
Étape  4 : (192,  96, 843)    ← ( a, 2b, c-b )
Étape  5 : (192, 192, 747)    ← ( a, 2b, c-b )
Étape  6 : (384,   0, 747)    ← ( 2a, b-a, c )

La simplification requiert moins d'étapes, et $c$ n'augmente jamais.

#19 Re : Café mathématique » Encore une histoire de bidons » 23-06-2026 23:08:27

... mais sans doute qu'en généralisant on peut améliorer ça. Voici la relation entre $a$ et $b$ qui conduit à l'apparition d'un 0 :

$a=\dfrac{b}{x+1}$

Prenons $b$=35 et $x$=4 :

$a=\dfrac{35}{4+1}=7 \longrightarrow 4\,a = 35-a$

Étape 0 : (7, 35, 999)
Étape 1 : (14, 28, 999)
Étape 2 : (28, 28, 985)
Étape 3 : (0, 56, 985)

Ça fonctionne pour tout $b$ multiple de $x+1$. Je ne parle pas d'une démonstration mais du fait qu'il existe une infinité de possibilités de provoquer une descente rapide vers 0, en choisissant soigneusement $b$ et $x$. Des valeurs de $a$ et $b$ non correlées demanderont plus d'étapes pour parvenir à l'apparition d'un 0, mais à l'une des étapes on trouvera la même relation entre $a$ et $b$. Exemple (on change simplement la valeur de $a$ par rapport à l'exemple précédent) :

Étape 0 : (8, 35, 999)
Étape 1 : (16, 27, 999)
Étape 2 : (11, 32, 999)
Étape 3 : (21, 22, 999)
Étape 4 : (22, 42, 978)
Étape 5 : (20, 44, 978)
Étape 6 : (24, 40, 978)
Étape 7 : (16, 48, 978)   ← $b=48, x=2 \qquad \dfrac{48}{x+1}=16 \qquad 2 \times 16=48-16 \longrightarrow 0$ atteint
Étape 8 : (32, 32, 978)
Étape 9 : (0, 64, 978)

On voit que la transformation initiale $2\,a=b-a$ n'est qu'un cas particulier.

#20 Re : Café mathématique » Encore une histoire de bidons » 23-06-2026 22:16:35

Je comprends que ce soit obscur pour beaucoup de gens...

#21 Re : Café mathématique » Encore une histoire de bidons » 23-06-2026 16:46:41

J'ai trouvé une simplification, qui consiste à partir systématiquement de (a, b, 999). L'entier c devient en quelque sorte le "déversoir" du système pour le cas où a ne peut pas être soustrait de b. C'est son unique fonction. Et ce qu'on observe est que c ne croît jamais, au contraire il stagne ou décroît. Donc tout se passe entre a et b. Je reprends l'exemple de Joshi plus haut, toujours avec l'algo de Qwen (je rappelle qu'il effectue un tri ascendant après chaque étape) :

Étape 0 : (54, 78, 999)
Étape 1 : (24, 108, 999)
Étape 2 : (24, 216, 891)
Étape 3 : (48, 192, 891)
Étape 4 : (96, 192, 843)
Étape 5 : (192, 192, 747)
Étape 6 : (0, 384, 747)

Sauf erreur de ma part, le problème trouve une solution très rapidement, car

$2\,a=b-a$ est la condition de l'apparition d'un 0 à l'étape suivante. Or, dans ce cas on a

$a=\dfrac{b}{3}$

Exemple avec $a=3, b=9$ :

Étape 0 : (3, 9, 999)
Étape 1 : (6, 6, 999)
Étape 2 : (0, 12, 999)

Prenons $a=17, b=51$ :

Étape 0 : (17, 51, 999)
Étape 1 : (34, 34, 999)
Étape 2 : (0, 68, 999)

Il existe un entier sur 3 divisible par 3, ce qui fait d'eux la catégorie d'entiers la plus répandue : 3, 6, 9, 12, ... Je suppose que cette caractéristique augmente la probabilité de tomber sur un 0 assez rapidement.

#23 Re : Café mathématique » Encore une histoire de bidons » 22-06-2026 01:15:15

Comme attendu. Les IA qui tentent une démonstration mathématique finissent toujours descendues en flamme. Alternative : ChatGPT Pro à 200 €/mois, sans garantie de résultat. Bref, il faut toujours garder à l'esprit qu'une IA n'est pas consciente et ne sait même pas de quoi elle parle. Mais ça tient à peu de chose : il suffirait qu'elle sorte de l'oubli une démonstration similaire faite il y a quelques décennies par un Terence Tao inconnu pour qu'aussitôt on s'extasie sur "une intelligence en train de dépasser celle de l'Homme".

#24 Re : Café mathématique » Encore une histoire de bidons » 21-06-2026 21:18:06

Question de la démonstration posée par Michel Coste. Réponse de Qwen. La mise en page n'est pas terrible puisqu'il s'agit d'une exportation de ladite réponse au format texte. Heureusement, le code LaTeX est préservé :

QWEN

Voici une démonstration claire, rigoureuse mais accessible, basée sur des idées classiques de théorie des nombres et d’invariants.

---

Théorème

> Étant donné trois entiers positifs \( a, b, c \in \mathbb{N}^* \), il existe toujours une suite finie d’opérations autorisées (doubler le plus petit en prélevant sur un plus grand) qui conduit à un état où l’un des bidons est vide.

---

Idée centrale : on peut simuler l’algorithme d’Euclide

L’opération autorisée :
- Si \( x \le y \), alors \( (x, y) \mapsto (2x, y - x) \)

peut sembler étrange, mais elle permet en fait de réduire progressivement les différences entre les quantités, tout comme l’algorithme d’Euclide réduit deux nombres via des soustractions successives.

Mais ici, on a trois nombres → ce qui donne assez de flexibilité pour éviter les blocages.

---

Invariant fondamental : le PGCD

Soit \( d = \gcd(a, b, c) \). Alors :

- Toute opération conserve \( d \). En effet, si \( d \mid x \) et \( d \mid y \), alors \( d \mid 2x \) et \( d \mid (y - x) \).
- Donc, tous les états accessibles sont des multiples de \( d \).
- On peut donc diviser tous les nombres par \( d \) dès le départ, sans perte de généralité. Autrement dit, on suppose désormais que \( \gcd(a, b, c) = 1 \).

> ? Objectif équivalent : atteindre un état contenant un 0 et deux entiers dont le PGCD est 1.

---

Stratégie : faire décroître la somme des carrés

Considérons la fonction potentiel suivante :
\[
P(x, y, z) = x^2 + y^2 + z^2
\]

Montrons que chaque opération non triviale diminue strictement cette somme, sauf dans des cas particuliers qu’on peut contourner grâce au troisième bidon.

Calcul :
Supposons \( x \le y \), et on applique \( (x, y) \mapsto (2x, y - x) \). La variation de \( P \) est :
\[
\Delta P = (2x)^2 + (y - x)^2 - (x^2 + y^2)
= 4x^2 + y^2 - 2xy + x^2 - x^2 - y^2
= 4x^2 - 2xy
= 2x(2x - y)
\]

Donc :
- Si \( 2x < y \), alors \( \Delta P < 0 \) → la somme des carrés diminue.
- Si \( 2x = y \), alors \( \Delta P = 0 \), et on obtient \( (2x, y - x) = (y, x) \) → on a juste échangé les valeurs.
- Si \( 2x > y \), alors \( \Delta P > 0 \) → la somme augmente, ce qui semble mauvais.

Mais attention : on n’est pas obligé de choisir cette paire-là !

Grâce au troisième bidon, on peut toujours éviter les coups qui augmentent \( P \), ou les utiliser temporairement pour créer une configuration où un coup utile devient possible.

---

Argument de terminaison par descente infinie

Comme la somme totale \( S = a + b + c \) est constante, l’espace des états possibles est fini : il y a au plus \( (S+1)^2 \) triplets d’entiers non négatifs de somme \( S \).

De plus, tant qu’aucun bidon n’est vide, il existe toujours une opération qui diminue strictement \( P \) ou rapproche deux valeurs, ce qui permet in fine de générer un zéro.

Mais voici une preuve plus élégante, due à une observation combinatoire :

---

Preuve constructive via la représentation binaire

On utilise un résultat connu (appelé parfois lemme des trois verres) :

> Si \( \gcd(a, b, c) = 1 \), alors il existe une suite d’opérations qui produit un bidon contenant 1 litre.

Une fois qu’on a un bidon avec 1, il devient trivial de vider un autre :
- Supposons qu’on ait \( (1, u, v) \) avec \( u, v \ge 1 \).
- Tant que \( u > 1 \), on applique \( (1, u) \mapsto (2, u-1) \), puis on réordonne.
- En répétant cela, on finit par avoir \( (1, 1, w) \), puis \( (2, 0, w) \) → un zéro apparaît.

Donc tout revient à montrer qu’on peut atteindre 1.

Or, l’opération \( (x, y) \mapsto (2x, y - x) \) permet de réaliser des combinaisons linéaires entières du type \( mx + ny \), modulo des puissances de 2. Comme le PGCD est 1, Bézout garantit qu’il existe des entiers \( m, n, p \) tels que \( ma + nb + pc = 1 \). Grâce aux trois bidons, on peut simuler ces combinaisons via une suite d’opérations inversibles (modulo conservation de la somme).

Une version plus formelle montre que l’ensemble des valeurs atteignables dans un bidon est exactement l’ensemble des multiples de \( d = \gcd(a,b,c) \) inférieurs ou égaux à \( S \). Donc si \( d = 1 \), 1 est atteignable.

Et une fois que 1 est atteint, comme vu plus haut, 0 l’est aussi.

---

Conclusion

- L’espace d’états est fini → l’algorithme BFS termine.
- Le PGCD est conservé → on peut supposer \( \gcd = 1 \).
- Sous cette hypothèse, **1 est atteignable**, donc **0 aussi**.
- Donc **quelle que soit la configuration initiale**, **un bidon peut être vidé en un nombre fini d’étapes**.

C’est pourquoi ton algorithme **fonctionne toujours** ! ?

---

Ce problème est une variante du "water jug problem" ou du "three jug problem", et la preuve ci-dessus s’appuie sur des idées classiques en théorie algorithmique des nombres.

#25 Re : Café mathématique » Encore une histoire de bidons » 21-06-2026 16:31:28

[suite du précédent]

Je reprends l'exemple de Yoshi plus haut : (a, b, c) = (54, 78, 37). Résultat avec l'algo de Qwen :

Étape 0 : (37, 54, 78)
Étape 1 : (17, 74, 78)
Étape 2 : (34, 57, 78)
Étape 3 : (44, 57, 68)
Étape 4 : (11, 44, 114)
Étape 5 : (22, 44, 103)
Étape 6 : (44, 44, 81)
Étape 7 : (0, 81, 88)

On comprend mieux pourquoi la quasi-totalité des développeurs utilisent les capacités incomparables des IA en matière de codage. Pourquoi se creuser la tête puisqu'elles font mieux que nous, et surtout beaucoup plus rapidement ? Par contre, il ne faut pas compter sur elles pour développer un projet de A à Z, et la raison en est qu'elles n'ont aucune initiative, ou rarement. Il faudra toujours un humain pour donner son orientation au projet, pour décider de ce qu'on fait à la prochaine étape ou de ce que à quoi on renonce.

Avant novembre 2022, développer une application consistait à passer la majeure partie du temps à chercher une solution sur Internet, et notamment Stack Overflow, que ce soit du code fonctionnel ou une solution à un problème qu'on ne parvenait pas à résoudre. Aujourd'hui, dès qu'on a besoin de coder quelque chose ou résoudre un problème difficile on ne fait ni une ni deux, on demande à l'IA de s'en charger. ChatGPT appelle ça "déléguer le boulot à l'IA", et il trouve que c'est très malin. Encore une compétence humaine en voie de disparition...

Pied de page des forums