Petite intrigue chez des petits entiers

Bonjour,

Je ne sais pas si ce problème a déjà été soumis sur ce forum (auquel cas, désolé d'avance).

Sur les entiers entre 0 et 9999 on considère l'application $f$ qui à $n$ associe la différence entre le nombre formé par ses chiffres classés par ordre décroissant et par ordre croissant.
Par exemple $f(4132)=4321-1234=3087$. Montrer que pour tout $n$ initial choisi, la suite des itérées de $f$ vaut constamment $0$ ou constamment $6174$ à partir d'un certain rang.

J'ai réussi à le montrer en me ramenant à une trentaine de cas à étudier. Quelqu'un aurait-il une solution plus "élégante" ?

Réponses

  • $f(495)=954-459=495$ ?
  • $$f(495)=9540-459=9081\;.$$
    In:
    def f(n) :
        L=(ZZ(n).digits()+3*[0])[:4]
        L.sort() ; M=ZZ(L,base=10)
        L.reverse() ; m=ZZ(L,base=10)
        return M-m
    
    def iterf(n) :
        L=[n] 
        while f(L[-1]) != L[-1] :
            L+=[f(L[-1])]
        return L
    
    iterf(495)
    
    Out:
    [495, 9081, 9621, 8352, 6174]
    
  • Le nombre maximal d'itérations est $7$ :
    In:
    maxiter=0
    for i in range(10^4) :
        maxiter=max(maxiter,len(iterf(i))-1)
    maxiter
    
    Out:
    7
    
  • Donc le nombre $495$ doit être considéré comme $0495$.

    Pour $5$ chiffres on a les cycles $(83952,74943,62964,71973)$, $(82962,75933,63954,61974)$, $(53955,59994)$ et $(0)$.
  • Rebonjour à tous,

    Oui JLT, je n'ai pas précisé, désolé. On complète éventuellement l'écriture à quatre chiffres avec des 0 commençants.

    On peut se ramener à ne tester qu'une trentaine de cas (ce qui sous entend qu'une résolution par tests exhaustifs n'est pas ce que j'appellerais "élégante").

    Ce que je cherche c'est une solution à ce problème qui minimiserait encore davantage le nombre d'images à calculer par $f$.

    PS 1
    Je sais bien qu'"élégante" ne veut rien dire, je sais bien que les petits programmes qu'on écrit pour faire les tests exhaustifs peuvent être vus comme des preuves (quitte à faire imprimer l'ensemble des calculs), je fais donc confiance à votre sens de l'esthétisme mathématique pour comprendre ce que je cherche :)

    PS 2
    Merci Citrodin pour la référence (même si la page ne fournit pas ce que j'attends).
  • Bonjour,

    GaBuZoMeu, qu'est ce que ZZ ?

    Cordialement,

    Rescassol
  • Ne sachant pas ce qu'est ZZ, j'ai remplacé la fonction f par ceci, ce n'est pas bien joli joli. 8-)
    def f(n):
        L=[]
        for k in str(n):
            L+=[int(k)]
        M=L[:]+[0]*3
        del M[4:]
        M.sort(); 
        max=10*(10*(10*M[3]+M[2])+M[1])+M[0]
        min=10*(10*(10*M[0]+M[1])+M[2])+M[3]
        return max-min
    
  • "ZZ", c'est la classe de Sage qui incarne les entiers relatifs. Elle est distincte du type "int", qui sont les entiers de Python. On peut transformer un entier n de Python en entier relatif de Sage grâce à ZZ(n), ce qui permet d'utiliser des méthode spécifiques comme la décomposition dans une base donnée (digits).
  • Ceci est plus élégant :
    abs(n-int(str(n)[::-1]))
    
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • @nicolas.patrois : c'est plus élégant, mais ça ne fait pas ce qu'on veut.
  • Dans ce cas, tu complètes par un .rjust(4,"0") bien placé.
    Et je ne sais pas si c’est plus rapide.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • @Nicolas : Ta formule, même modifiée, ne soustrait pas le plus petit entier qu'on peut former au plus grand entier.

    Pour $6$, on obtient les cycles $(860832, 862632, 642654, 420876, 851742, 750843, 840852)$, $(631764)$, $(549945)$ et $(0)$.
    Pour $7$... ça mouline encore. :-D
  • Eh bien figurez-vous que pour $7$, il n'y a que deux cycles : $(8439552, 7509843, 9529641, 8719722, 8649432, 7519743, 8429652, 7619733)$ et $(0)$ !
  • Ha oui, j’ai oublié qu’il faut trier les chiffres. C’est mieux comme ça ?
    m="".join(sorted(str(n))).rjust(4,"0")
    return int(m[::-1])-int(m)
    
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Impeccable, j'essaierai de me rappeler la méthode .rjust.
  • Attention, rjust pousse la chaîne à droite et complète à gauche.
    rstrip enlève à gauche.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • @troisqua

    Au sujet de la question initiale, j'ai parcouru pas mal de forum et je n'ai pas grand chose qui ne nécessite pas quelques calculs à la fin.

    J'imagine que tu as vu ce diagramme (page 4, 5, 6) : http://www.osaka-ue.ac.jp/zemi/nishiyama/math2010/6174.pdf
  • Quel est le plus petit entier pour lequel on a besoin de 7 itérations, par curiosité ?
  • En utilisant le code de GaBuZoMeu, il semble que $14$ soit le candidat avec les itérations suivantes.
    [14, 4086, 8172, 7443, 3996, 6264, 4176, 6174]
    
    Il y a 2184 entiers qui ont besoin de 7 itérations.
  • @Gilles

    Merci pour le lien. C'est plutôt ça que je cherchais.
  • Comme je ne paie pas l'électricité, les cycles pour $8$ sont : $(75308643, 84308652, 86308632, 86326632, 64326654, 43208766, 85317642)$, $(86526432, 64308654, 83208762)$, $(63317664)$, $(97508421)$ et $(0)$.

    Au passage, un article où il est montré que seul 495 et 6174 sont des constantes de Kaprekar : http://www.fq.math.ca/Scanned/19-1/prichett.pdf
  • @Gilles
    Encore merci pour l'article.
  • Question subsidiaire: peut-on caractériser les entiers dont la suite des itérées de $f$ donne $0$ à partir d'un certain rang ?
  • Ce sont les nombres composés du même chiffre, ça paraît assez clair, non ?
    L=[]
    for k in range(1000,10000):
        L+=[iterf(k,4)]
    K=[k for k in L if k[-1]==0]
    
    >>> K
    [[1111, 0], [2222, 0], [3333, 0], [4444, 0], [5555, 0], [6666, 0], [7777, 0], [8888, 0], [9999, 0]]
    
  • Ben, je ne vois pas ça si clairement, vois-tu. Il est clair que si on obtient $0$, c'est qu'à l'étape d'avant , on avait un nombre du type $eeee$. Par contre qui nous dit qu'à l'étape encore d'avant c'est encore le cas?

    Autrement dit, il faudrait s'assurer que si $a\leq b\geq c\leq d$ et $dcba-abcd=eeee$ pour un certain chiffre $e$, alors $a=b=c=d$ (et donc $e=0$). Je pense que c'est vrai, mais que c'est casse pieds à écrire.
    Je n'ai aucune envie de m'y atteler maintenant, mais si le coeur t'en dit, n'hésite pas.

    Mel.
  • Autant pour moi, cela nécessite un raisonnement. Voilà ce que je propose, dis-moi si tu es d'accord.

    Soit $a,b,c,d$ quatre entiers compris entre 0 et 9 avec $a\leq b \leq c \leq d$.
    Le plus grand nombre qu'on puisse former moins le plus petit vaut $9\left[111(d-a)+11(c-b)\right]$ avec $0 \leq 111(d-a)+11(c-b) \leq 1098$.
    Un entier formé de quatre chiffres identiques est de la forme $1111e$ avec $0\leq e \leq 9$
    Comme $9$ et $1111$ sont premiers entre eux, le théorème de Gauss montre que l'égalité $9(111(d-a)+11(c-b))=1111e$ implique que $1111$ divise $111(d-a)+11(c-b)$. Il en résulte la nullité de ce nombre car il il est strictement inférieur à $1111$, d'où $c-b=0$ et $d-a=0$ puis $a=d$ et finalement $a=b=c=d$.
  • Peut-être que j'ai mal suivi ce que vous dites mais si je note $\left[a;b;c;d\right]=10^{3}a+10^{2}b+10c+d$, alors $\left[a;b;c;d\right]-\left[d;c;b;a\right]=999\left(a-d\right)+90\left(b-c\right)$. Lorsque $a\geqslant b\geqslant c\geqslant d$, cette différence est nulle si et seulement $a=d$ et $b=c$. Mais l'ordre implique alors que $a=b=c=d$.
  • Tu voulais écrire 99 au lieu de 90 ?

    La question de melpomène est de savoir si pour tomber sur un nombre de la forme $\overline{aaaa}$, il fallait nécessairement déjà être un nombre de ce type.
  • 100 - 10 = 90 :)
  • Sinon pour la question de melpomène, en conservant mes précédentes notations, $[a,b,c,d]-[d,c,b,a]=999(a-d)+90(b-c)=[e,e,e,e]=1111e$ implique $e$ multiple de $9$ car 1111 est premier avec 9. Donc $e=9$ ou $e=0$. $e=9$ est impossible donc $e=0$ et donc $v=a-d=0$ et $u=b-c=0$, et vu le classement des chiffres, $a=b=c=d$.

    L'avantage du raisonnement précédent c'est qu'il montre qu'en fait, on peut se ramener à une application de $C$ dans lui même où $C$ désigne les couples d'entiers naturels $(u,v)$ avec $0\leqslant u\leqslant v\leqslant 9$ ce qui réduit considérablement le nombre de calculs à faire (et permet de rendre les tests informatiques précédents quasi instantanés même pour des nombres de plus de 4 chiffres).
  • Bonsoir,

    Si $a\leq b...\leq y\leq z$ et $\neg { (a=b=...=y=z)}$, alors $D:=zy...ba - ab...yz\neq \alpha \alpha... \alpha \alpha$:

    Par l'absurde:

    Les hypothèses impliquent $a<z$ et $b\leq y$.
    De $a<z$ on déduit que le chiffre des unités de $D$ est
    $\alpha =10+a-z$ (1).
    De $b\leq y$ on déduit que l'avant dernière soustraction, à savoir $y-b$ ou $y+1-b$ n'entraîne pas de retenue et que donc ET
    $\alpha =z-a$ (2) (dernière soustraction) ET
    $\alpha =y-b$ ou $y+1-b$ (3).

    (1) et (2) impliquent $\alpha =5$ (4)
    (3) et (4) impliquent $b+1-y=-4$ ou $-3$

    Le chiffre des dizaines de $D$ est donc $10-4$ ou $10-3$, bref ce n'est pas $5$!

    Cordialement
    Paul
  • Merci troisqua pour la correction, heureusement 90 est un multiple de 9 et ma démonstration reste correcte (et plus rapide que la tienne je trouve).

    Pourrais-tu développer ce que tu entends au sujet de la réduction du nombre de test ?
  • Bonjour,

    Je n'ai pas compris là où ton raisonnement raccourcit ce que j'ai dit mais ça n'est pas important.

    Soient $a,b,c,d$ quatre entiers initiaux entre 0 et 9 classés par ordre décroissant. On pose $A=a-d\in\{0,\dots,9\}$ et $B=b-c\in\{0,\dots,9\}$. On a $A\geqslant B$. Tout entier $n$ qui s'écrit à l'aide de ces 4 chiffres initiaux (non nécessairement dans cet ordre), a une image qui est combinaison entière de $A$ et $B$. Le nombre de couples $(A;B)$ décrits précédemment est d'au plus $10+\dots+1=55$. Donc il y a au plus 55 images après un tour du processus décrit.
    L'application à étudier n'est donc pas de $\{(0;0;0;0),\dots,(9;9;9;9)\}$ dans lui même mais d'un ensemble à 55 éléments dans lui même, ce qui, informatiquement parlant, n'a plus rien à voir. En raisonnant un peu (je te laisse voir pourquoi, on peut se ramener à 31 couples).

    Par exemple, les entiers $5437;9587;4010$ (liste largement non exhaustive) ont tous la même image puisqu'ils correspondent à $A=4$ et $B=1$ et ont donc pour image entière $999A+90B=4086$ ce qui redonnera comme nouveau couple image $(A';B')=(8-0;6-4)=(8;2)$.
    u = lambda n : sorted([int(c) for c in (4-len(str(n)))*'0'+str(n)])[::-1]
    c = lambda t : sorted([t[0]-t[-1],t[1]-t[2]])[::-1]
    f = lambda t : c(u(999*t[0]+90*t[1]))
    [[([u,v],f([u,v])) for v in range (u+1)] for u in range (10)]
    

    Cela permet d'afficher chaque couple $(A,B)$ et son image et qui montre qu'au plus 55 images sont à calculer pour s'en sortir.
  • Finalement, on est revenu à ta question initiale ?

    Je supprime le cas $a-d=0$ car dans ce cas l'entier est $0$, j'élimine aussi $a-d=b-c$ (entier $\overline{eeee}$), on obtient donc $8+7+\dots+1=36$ cas ; je ne vois pas comment réduire à 31 (si j'en crois le PDF dont j'avais donné le lien, on arrive même à 30 cas).
Connectez-vous ou Inscrivez-vous pour répondre.