G267. Affranchissements en Diophantie
Fabien PETITJEAN 5 aoˆut 2013
R´esum´e
La Poste de Diophantie vient de lancer 8 collections de timbres sur diff´erents th`emes : art, animaux, litt´erature, math´ematiques,etc... Dans la collection i il y a deux timbres de valeurs faciales enti`eresai etbiexprim´ees en centimes d’euro . Les valeurs faciales des 16 timbres ainsi
´emis sont toutes distinctes entre elles. Je constate qu’avec les deux timbres de la collection i, je peux effectuer n’importe quel affranchissement dont la valeur enti`ere en centimes d’euro est sup´erieure `a un certain entierNi mais il m’est impossible de r´ealiser exactement l’affranchisse- ment deNicentimes d’euro. Sachant que lesNi(i= 1 `a 8) forment une suite croissante d’entiers impairs cons´ecutifs≤99, d´eterminer les valeurs faciales des 16 timbres selon les 8 collections.
1 D´ eterminer N en fonction de a et b
Soit un entier naturel nque l’on souhaite d´ecomposer sous la formen=p0a+q0b avec (p0, q0)∈ N2. L’identit´e de B´ezout nous indique qu’il existe toujours des entiers relatifs p et q tels que : PGCD(a, b) = pa +qb. Et donc, si PGCD(a, b) = 1 alors on s’approche de la d´ecomposition souhait´ee :n=npa+nqb. Pour pouvoir identifierp0 avec npetq0 avecnq, il faut quep etq soient positifs.
Supposons que a et b soient premiers entre eux et que a < b. On voit tout de suite que n doit ˆetre au moins ´egal `a n pour esp´erer pouvoir ˆetre d´ecompos´e. En proc´edant `a la division euclidienne de n para, on obtient n= pa+r. Puisque a et b sont premiers, l’identit´e de B´ezout nous donne :r=p0a+qb. On peut alors s’arranger pour choisirp0 etq de sorte queq≥0. En effet, r=p0a+qb⇔r=p0a−ab+qb+ab⇔(p0−b)a+ (q+a)b. Finalement, on obtient ceci :
n= (p+p0)a+qb avecp, q∈Netp0 ∈Z
La condition de d´ecomposition de nest p≥p0 . Cela nous donne un algorithme pour trouver N en fonction de aetb.
Voici un exemple avec a= 3 etb= 7 : n≡1 (moda)⇒n= 3(p−2) + 7
n≡2 (moda)⇒n= 3(p−4) + 2×7 n≡0 (moda)⇒n= 3p
Pour que la d´ecomposition soit faisable, il faut quep≥4⇒n >11⇒N = 11.
Et voici un autre exemple avec a= 5 etb= 9 : n≡1 (moda)⇒n= 5(p−7) + 4×9
n≡2 (moda)⇒n= 5(p−5) + 3×9 n≡3 (moda)⇒n= 5(p−3) + 2×9
1
n≡4 (moda)⇒n= 5(p−1) + 9 n≡0 (moda)⇒n= 5p
Ici encore, si p≥7, alors n≥35 est d´ecomposable. Mais 34, 33 et 32 le sont aussi puisque en prenant p = 6, les ´egalit´es pr´ec´edentes nous donnent toujours un coefficient positif poura. Ainsi, N = 31.
Ces calculs peuvent ˆetre faits `a la main, mais pour ´eviter les erreurs et pour aller un peu plus vite, nous utilisons l’algorithme suivant (Python 3) :
1 d e f N( a , b ) : 2 i f b < a :
3 a , b = b , a
4 A = [ 0 ] ∗ a
5 idxMax = 0
6 f o r k i n r a n g e ( 1 , a ) :
7 i = ( b ∗ k ) % a
8 A[ i ] = math . f l o o r ( ( b ∗ k ) / a ) 9 i f A[ i ] > A[ idxMax ] :
10 idxMax = i
11 n = A[ idxMax ]
12 r e t u r n n ∗ a − ( a − 1 ) + idxMax − 1
2 Examiner quelques valeurs
Pour se donner une id´ee, nous avons calcul´e quelques valeurs possibles de N (les valeurs poss´edant plus de 2 chiffres sont repr´esent´ees par ”xx”).
2 3 4 5 6 7 8 9 10 11 12
3 1
4 – 5
5 3 7 11 6 – – – 19 7 5 11 17 23 29 8 – 13 – 27 – 41 9 7 – 23 31 – 47 55 10 – 17 – – – 53 – 71 11 9 19 29 39 49 59 69 79 89
12 – – – 43 – 67 – – – xx
13 11 23 35 47 59 71 83 95 xx xx xx 14 – 27 – 51 – – – xx – xx – 15 13 – 41 – – 83 97 – – xx –
Les premi`eres valeurs donnent l’impression qu’il y a une limite `a droite et on d´ecide alors de tenter notre chance en ne calculant que les valeurs de N pour a∈ {3, . . . ,10}etb∈ {3, . . . ,25}et les valeurs de N pour a= 2 etb∈ {3, . . . ,101}. On recense ainsi des triplets (ai, bi, Ni).
2
3 Recherche des triplets r´ epondant au probl` eme
La recherche de huit triplets r´epondant au probl`eme est alors r´ealis´ee par l’algorithme suivant : 1 d e f r e c u r s ( c a n d i d a t e s , idx , path ) :
2 ”””
3 A e s t une l i s t e e c o l o n n e s .
4 Chaque c o l o n n e p o s s e d e l e t r u p l e ( a , b , N − 1 ) .
5 ”””
6 i f l e n ( path ) > 7 :
7 # V e r i f i o n s s i c e t t e c h a i n e e s t v a l i d e . 8 o r d e r e d P a t h = path [ : ]
9 o r d e r e d P a t h . s o r t ( key=lambda x : x [ 2 ] ) 10 p r i n t ( o r d e r e d P a t h )
11 r e t u r n
12 f o r k i n r a n g e ( idx , l e n ( c a n d i d a t e s ) ) : 13 c a n d i d a t = c a n d i d a t e s [ k ]
14 goodCandidat = True
15 i f l e n ( path ) > 0 :
16 # V e r i f i o n s que c e c a n d i d a t e s t c r e d i b l e . 17 a , b , N = c a n d i d a t
18 f o r s e l e c t e d C a n d i d a t i n path : 19 aa , bb , NN = s e l e c t e d C a n d i d a t
20 d i f f = abs (N − NN)
21 i f d i f f == 0 o r d i f f > 1 4 :
22 goodCandidat = F a l s e
23 b r e a k
24 i f aa == a o r aa == b o r bb == b o r bb == a :
25 goodCandidat = F a l s e
26 b r e a k
27 i f goodCandidat :
28 path . append ( c a n d i d a t )
29 r e c u r s ( c a n d i d a t e s , k + 1 , path )
30 path . pop ( )
Le r´esultat final est : [7, 12, 65], [5, 18, 67], [8, 11, 69], [9, 10, 71], [3, 38, 73], [2, 77, 75], [4, 27, 77], [6, 17, 79].
3