Suite de Farey

Trouver les dénominateurs des fractions successives issue de l'ensemble ordonné de toutes les fractions réduites que l'on peut former avec les entiers de 1 à 99 comprise entre 0 et 1 dont les numérateurs sont 13 , 24 et 11.

Voici l'intitulé exacte du problème numéro 3 du chapitre 5 du livre "100 énigmes mathématiques résolues avec Python" appelé Suites de Farey.

Dans un article paru en 1816 dans la revue "Philosophical Magazine" et intitulé "On a curious Property of vulgar Fractions", le géologue John Farey (1766-1826) commente certaines suites de fractions qui plus tard, porteront son nom.

Pour tout entier n non nul, on définit la suite de Farey d'ordre n noté Fn, comme la suite ordonné des fractions irréductibles comprise entre 0 et 1 et et dont les dénominateurs sont inférieurs ou égaux à n. 
On a donc : 
F1={0/1 ; 1/1}
F2={0/1 ; 1/2 ; 1/1}
F3={0/1 ; 1/3 ; 1/2 ; 2/3 ; 1/1} 
F4={0/1 ; 1/4 ; 1/3 ; 1/2 ; 2/3 ; 3/4 ; 1/1 }

Dans son article, John Farey cite trois termes consécutifs de la suite F99. Mais, dans la veille revue, les trois dénominateurs ont été effacés par le temps. Les trois numérateurs sont eux, restés visibles. On sait que ces numérateurs sont respectivement 13 , 24 et 11.
Retrouver les trois dénominateurs effacés.

 

Compréhension du problème et pistes de réflexion
Ainsi il s'agit de constuire F99 et d'observer trois fractions successives dont les numérateurs sont 13 , 24 ,11
Comment va-t-on constuire cet ensemble? Peut-on se passer de la construction de cet ensemble (je pense que non)
Doit-on nécessairement construire cet ensemble de proche en proche ou peut-on le construire directement?
Et surtout comment ordonner cet ensemble? Comment peut-on comparer deux fractions?
Il faut que les fractions de cet ensemble soient irréductibles. Comment va-t-on gérer cet aspect?   
Une solution
Une première question aussi est de se demander comment est ce que l'on va représenter des fractions.
Dans un premier temps on va considérer un liste de deux entiers p et q.

Constuire un ensemble de fractions:
Pour un dénominateur choisi, il est assez facile de d'énumérer toutes les fractions plus petite que 1 en procédant de la sorte
fractions=[]

for i in range(n) : 

     fractions.append([i,n])

Et nous voulons les cumuler 
On aurait sans doute faire ceci avec avec une itération
Mais notamment pour manipuler les opérateurs de classe, on peut construire une classe donne toutes les fractions plus petite que 1 en fonction d'un entier et un opérateur qui permet de cumuler deux listes de fractions.

Ordonner cet ensemble:
C'est ici que ça ce complique et que considérer une fraction comme une liste de deux entiers ne suffit plus.
Ainsi on peut faire un objet "Fraction" sur lequel on définit un opérateur de comparaison (a/b<c/d<=>a.d<b.c)
On va reprendre l'idée que l'on decrit plus haut en construisant un liste de "Fraction".
Je m'apprêtais a faire un tri à bulle pour ordonner ces fractions mais en fait la methode "sort" de l'objet list comprend la relation de comparaison que l'on vient de définir pour "Fraction".

Repérer les numérateurs successifs de l'énoncé:
C'est sans doute ici que je n'ai pas été le plus rigoureux.
D'une part en ne considérant pas uniquement les fractions réduites et d'autre part en faisant un pause sur le dernier numérateur mentionné et en vérifiant visuellement si les numérateurs précédents correspondent à ceux de l'énoncé.

Solution:
...,13/45,26/90,24/83,11/38,...  
Donc les dénominateurs des fractions successives de la suite de Farey dont les numérateurs sont 13, 24 et 11  sont 45, 83 et 38 
 

https://github.com/linol/python/blob/master/farey.py

Articles Similaires

Tiers

Il existe un existe une infinité de fraction égales à un demi. Parmi celles-ci certaines s'écrivent avec les neuf chiffres de un à neuf. C'est le cas par exemple pour 672913458 ou 729314596.

Trouver toutes les fractions égales à un tiers, dans lesquelles tous les chiffres de un à neuf apparaissent une et une seule fois.

Lire la suite

Au temps des pharaons

Ecrire la fraction 17/19 comme somme de fraction ayant uniquement des 1 au numérateur.

Exemple avec 3/7:
3/7 = 1/3 + 1/11+ 1/231

Lire la suite