A537 – Cibles inaccessibles [**** à la main et avec ordinateur]
Les entiers naturels 1,2,3,... sont pris pour des cibles. Chacune d’elles c est accessible, s’il existe au moins un entier naturel f appelé flèche tel que la somme de f et de la somme des chiffres de f est égale à 10 ,soit la relation f + sdc(f) = c 10 . Par exemple c = 1 est accessible c avec f = 5 qui donne 5 + 5 = 10 ainsi que c = 2 avec f = 86 qui donne 86 + 8 + 6 = 100 = 10 . 2 A contrario, on dit que c est inaccessible.
Peut-on trouver dix cibles inaccessibles qui se terminent respectivement par 0,1,2,3,...,9 ? Solution de Jean-Louis Margot
Proposition 1 : f(c) commence par au moins (c - entier (ln10(9*c -2)) – 1) chiffres 9 consécutifs
La flèche de c est nécessairement inférieure ou égale au nombre de c chiffres ne comportant que des 9 :
c k … 1
9 9 * 10^(k-1) … 9
Ce nombre est égal à 10^c -1.
C’est le plus grand nombre possible. On doit pouvoir obtenir fleche(c) en décrémentant des chiffres de ce nombre. Cependant, quand on décrémente de a unités un chiffre de ce nombre, par exemple le kième, la flèche devient
fleche (9….9 – 10^(k-1)) = 9…9 + 9*c – a10^(k-1) – a = 10^c – 1 + 9*c – a10^(k-1) -a = 10^c -a10^(k-1) +9*c – 1-a
Si l’on tombe en dessous de 10^c, le nombre ne peut faire l’affaire. On a nécessairement
soit
ln10 est le log à base 10.
1 pour a =1 (diminution minimale)
soit :
Proposition 2 : Trouver une flèche pour c revient à résoudre l’équation suivante :
avec k = On a :
c a en tête une série de 9 consécutifs avant la position k d’après la proposition 1.
Exemples:
n=2, k=2, u + d + 10d + u = 100
n=12, k= 3, (12-3)*9 + u + d + c + u + 10d +100c = 1000 Posons:
(forme 1) Chaque 10^(i-1) = 10^(i-1) -1 + 1 avec (10^(i-1) -1) divisible par 9.
(forme 2) soit :
Modulo 9 :
2S = 1 (modulo 9)
soit 2S = 1 (modulo 9) avec a pair et 0<= 1 + 9a <= 2*9k donc 0<= <= 2*k On revient à l’équation sous forme 1 :
Modulo 10 :
(modulo 10) soit :
Modulo 100 :
(modulo 100)
soit :
et de proche en proche : Modulo 10^i:
soit:
/
En implantant ces formules dans un tableur, on trouve rapidement des nombres sans flèche.
Par exemple : 6 pour k = 3 57 pour k=3 658 pour k=4 6659 pour k=5
Il est tentant de considérer la suite
…
on obtient une suite dont les premiers termes sont 57, 658, 6659 D’où :
6 57 658 6659 66660 666661 6666662 66666663 666666664 6666666665
>>> nombres = [6,57, 658,6659,66660,666661,6666662,66666663,666666664,6666666665 ,66666666666, 666666666667]
>>> for i in nombres:
... #for i in range(1,10):
... k = 1 + long(math.log10(9*i-1)) ... ok = 0
... for kk in range(1,k+1):
... x = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0]
... S = long((1 + (2*kk-1)*9)/2) ... Cte = 9*k -9*i - S
... x[1] = Sverif = fleche = Cte%10 ... dix = long(1)
... for j in range(2, k+1):
... if (j>1):
... dix = long(10*dix)
... x[j] = long((Cte - fleche)%(10*dix))/long(dix) ... Sverif = Sverif + x[j]
... fleche = fleche + x[j]*dix ... if (S == Sverif):
... if ((S+9*(i-k)+fleche) == (10*dix)):
... print i, " OK, k = ", k, "fleche = ", fleche ... ok = ok+1
... if (ok == 0): print i, k,' NOK' ...
6 2 NOK 57 3 NOK 658 4 NOK 6659 5 NOK 66660 6 NOK 666661 7 NOK 6666662 8 NOK 66666663 9 NOK 666666664 10 NOK
6666666665 11 NOK 66666666666 12 NOK 666666666667 13 NOK
>>>
En conclusion, je soumets le problème suivant :
Etant donné la suite (u(n)) ci-dessus, montrer qu’aucun de ces nombres n’a de flèche, (c'est-à- dire les nombres de la forme
) J’ignore la solution
Note: Le programme ci-dessus, exécuté pour les nombres de 1 à 10:
>>> import math
>>> nombres = [6,57, 658,6659,66660,666661,6666662,66666663,666666664,6666666665 ,66666666666, 666666666667]
>>> #for i in nombres:
... for i in range(1,11):
... k = 1 + long(math.log10(9*i-1)) ... ok = 0
... for kk in range(1,k+1):
... x = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0]
... S = long((1 + (2*kk-1)*9)/2) ... Cte = 9*k -9*i - S
... x[1] = Sverif = fleche = Cte%10 ... dix = long(1)
... for j in range(2, k+1):
... if (j>1):
... dix = long(10*dix)
... x[j] = long((Cte - fleche)%(10*dix))/long(dix) ... Sverif = Sverif + x[j]
... fleche = fleche + x[j]*dix ... if (S == Sverif):
... if ((S+9*(i-k)+fleche) == (10*dix)):
... print i, " OK, k = ", k, "fleche = ", fleche ... ok = ok+1
... if (ok == 0): print i, k,' NOK' ...
1 OK, k = 1 fleche = 5 2 OK, k = 2 fleche = 86 3 OK, k = 2 fleche = 77 4 OK, k = 2 fleche = 68 5 OK, k = 2 fleche = 59 6 2 NOK
7 OK, k = 2 fleche = 50 8 OK, k = 2 fleche = 41
9 OK, k = 2 fleche = 32 10 OK, k = 2 fleche = 23
>>>