• Aucun résultat trouvé

De tous les mots de 123456 lettres sur A, calculez combien ont, au moins, 789 'M' consécutifs

N/A
N/A
Protected

Academic year: 2022

Partager "De tous les mots de 123456 lettres sur A, calculez combien ont, au moins, 789 'M' consécutifs"

Copied!
4
0
0

Texte intégral

(1)

Problème TM/2010/03:

Soit l'alphabet A = { 'M', 'T' }

De tous les mots de 123456 lettres sur A, calculez combien ont, au moins, 789 'M'  consécutifs.

Ne gardez que les 101 premiers chiffres du résultat. On appelle alors ce nombre X.

Calculez alors R, le reste de la division de X par 

25764878764866580039735107869957592608723086193536043418616478184261744631 9103064982089217

Transformez enfin R en utilisant la fonction suivante : 01 ­> A

02 ­> B 03 ­> C  ... 

25 ­> Y  26 ­> Z  27 ­> espace  28 ­> * 

De qui est la citation obtenue ?

NB : nécessite le recours à un ordinateur et un peu de programmation

Thier ry MACHICOANE 1 / 4 2 0 1 0 / 0 3

(2)

Solution :

Soient n, p ∈ ℕ x ℕ, avec p ≤ n

Soit R( n, p ) le nombre de mots de n lettres sur A qui ont au moins p 'M' consécutifs. Soit ∏( n, p ) l'ensemble de ces mots. R( n, p ) est le cardinal de

∏( n, p ).

De façon évidente, R( n, n ) = 1. En effet, ∀ n ∈ ℕ, il n'existe qu'un seul mot de n lettres sur A ayant au moins n 'M' consécutifs. Par convention, on posera que R( n, p ) = 0, ∀ p > n

Nous allons alors établir la formule de récurrence de calcul de R( n + 1, p ).

R( n + 1, p ) est en fait le cardinal de l'ensemble ∏( n + 1, p ). Nous proposons donc de construire ∏( n + 1, p ) à partir de ∏( n, p ).

Pour commencer, considérons un mot donné ξ de ∏( n, p ), s'écrivant

ξ = 'x1x2x3 ... xn'. A partir de ξ, nous pouvons construire très facilement deux mots distincts de ∏( n + 1, p ) : 'Tx1x2x3 ... xn ' et 'Mx1x2x3 ... xn '. Cela est bien sûr vrai pour n'importe quel mot de ∏( n, p ). Il existe donc 2 . R( n, p ) mots de cette forme. Nous noterons ∑1 cet ensemble de mots.

Considérons maintenant les mots de ∏( n, p - 1 ) de la forme :

'MM ...MMTx1x2x3 ... xn – 1 - p' (exactement (p - 1) 'M' consécutifs en tête du mot). De façon triviale, il existe 2n-1-p tels mots. A partir de ces mots, nous pouvons donc construire aisément 2n-1-p mots de ∏( n + 1, p ) en ajoutant simplement un 'M' en tête de chacun de ces mots. Nous noterons ∑2 cet ensemble de mots.

∏( n + 1, p ) = ∑1 ⋃ ∑2 ∖ ∑1 ⋂ ∑2

En effet, il convient de noter que les deux façons ci-dessus de construire des mots de ∏( n + 1, p ) génèrent des doublons, dont il convient d'identifier le nombre exact, c'est à dire le cardinal de ∑1 ⋂ ∑2. Cela est en fait assez simple car il s'agit des mots de la forme 'MM ...MMTx1x2x3 ... xn – 1 – p' pour lesquels le suffixe 'x1x2x3 ... xn – 1 – p' contient au moins p 'M' consécutifs. Leur nombre est donc, par définition, R( n – 1 - p, p ).

Afin que cela semble moins « abstrait », on pourra par exemple détailler sur une feuille le mécanisme de construction de R(5,2) à partir de R(4,2).

En conclusion et d'après les cardinaux des ensembles construits :

R( n + 1, p ) = 2 . R( n, p ) + 2n-1-p - R( n – 1 - p, p )

Thier ry MACHICOANE 2 / 4 2 0 1 0 / 0 3

(3)

Cette formule est intéressante, mais pas très utile pour notre calcul. En effet, compte tenu de la grandeur des nombres proposés, elle est inapplicable en l'état. Il nous faut donc la transformer un peu.

Soit U( n, p ) = 2n - R( n, p ), alors U( n + 1, p ) = 2n + 1 - R( n + 1, p ) D'après la formule de récurrence obtenue précédemment :

U( n + 1, p ) = 2n + 1 - [ 2 . R( n, p ) + 2n-1-p - R( n – 1 - p, p ) ] U( n + 1, p ) = 2n + 1 - 2 . R( n, p ) - ( 2n-1-p - R( n – 1 - p, p ) ) U( n + 1, p ) = 2 . ( 2n - R( n, p ) ) - ( 2n-1-p - R( n – 1 - p, p ) ) et donc finalement :

U( n + 1, p ) = 2 . U( n, p ) - U( n – 1 - p, p )

Magique !

Construire par programmation la suite U( n, p ) ne présente pas de difficulté particulière. Toutefois, on n'aura pas recours à un calcul récursif, compte tenu de la grandeur des nombres en présences (débordement de pile). En effet, nous utiliserons l'astuce suivante : pour n – 1 – p < p, U( n – 1 – p < p ) = 0.

Donc pour n < 2 . (p + 1), U( n – 1 – p < p ) = 0 et donc tout simplement U( n + 1, p ) = 2 . U( n, p ).

Donc pour n < 2 . (p + 1) : U( n, p ) = 2n

Exemple : pour le calcul de U( 9, 4 ), on construit d'abord la liste [1, 2, 4, 8, 15]

que l'on complète ensuite de la façon suivante : 2 x 15 – 1 = 29

2 x 29 – 2 = 56 2 x 56 – 4 = 108 2 x 108 – 8 = 208 2 x 208 – 15 = 401

U( 9, 4 ) = 401 et R( 9, 4 ) = 29 – 401 = 111.

En ayant recours au langage Python et à sa magnifique fonction map, l'exercice est élémentaire :

def U(n, p):

L = map(lambda k: pow(2, k), range(0, p)) + [pow(2, p)­1]

for i in range(n­p): L.append(2 * L[­1] ­ L[­(p+1)]) return L[­1]

Thier ry MACHICOANE 3 / 4 2 0 1 0 / 0 3

(4)

Il nous reste à passer à l'application numérique :

On lance le calcul et obtient les 101 premiers chiffres suivants : 

17146794494242352463383419208214218577153779790629607190021371407767105353 220232697955323610524519251

On calcule le reste de la division par X = 

25764878764866580039735107869957592608723086193536043418616478184261744631 9103064982089217

Ce qui donne 

2828282715021905172109211327011309031519272205180920011927150409211327160118 092027282828

28 28 28 27 15 02 19 05 17 21 09 21 13 27 01 13 09 03 15 19 27 22 05 18 09 20 01 19 27  15 04 09 21 13 27 16 01 18 09 20 27 28 28 28

On convertit alors et apparaît *** OBSEQUIUM AMICOS VERITAS ODIUM PARIT *** dont  l'auteur est Térence.

Thier ry MACHICOANE 4 / 4 2 0 1 0 / 0 3

Références

Documents relatifs

[r]

[r]

ontre une

èbre. UNE

[r]

[r]

Ceci posé, pour démontrer le théorème ci-dessus, il suffit de remarquer qu'il ne saurait y avoir d'autres fac- teurs premiers que 2 et 3 communs à plusieurs des cinq

Le produit (a) contient le nombre premier 0, il n'est pas divisible par son carré : il ne peut donc être une puis- sance parfaite. Dans cette démonstration, on suppose n -hp + i^&gt;