EthanielLe 28/11/2003 à 23:01
En effet, c'est simpliste, très lent et pas top.
Intuitivement, comme on connais au départ le numérateur et le dénominateur, je dirais que le plus rapide (algorithmiquement) est de déterminer le motif périodique de l'inverse du dénominateur.
Par exemple, 11/42 = 0.2 619047 619047 ... (irrégularité : 0.2 ; motif : 619047)
On prend 1/42 = 0.0 238095 238095 ... l'irrégularité s'étend jusqu'au même rang, et le motif a la même taille.
Je n'ai pas de démonstration mathématique de cette équivalence, ce n'est qu'intuitif : ce qui est sûr, c'est qu'entre 1/D et N/D, le motif fait la même taille, et que l'irrégularité de N/D ne peut pas aller plus loin que celle de 1/D (1 chiffre après la virgule dans l'exemple), mais peut-être la valeur de N peut-elle faire en sorte que le dernier chiffre de l'irrégularité colle avec le dernier chiffre du motif, ce qui déplace le motif d'un cran vers la gauche, je n'en sais rien du tout.
Je dirais que tant que N<D, l'irrégularité ne bouge pas, que pour D<N<10D, l'irrégularité s'arrête plus à gauche d'un chiffre, que pour 10D<N<100D, l'irrégularité s'arrête plus à gauche de deux chiffres, etc, mais ceci n'est qu'intuitif, je le répète.
Mais surtout, avant de faire ceci, il faut bien simplifier la fraction au maximum (9/42 = 3/14, donc on étudie 1/14).
Pour déterminer la taille du motif : d'abord, il faut diviser D le plus de fois possible par 2 et par 5 (en base 10=2*5), soit 42 => 21 dans notre exemple.
Puis on regarde si 99 est divisible par 21 (pas le peine de regarder pour 9), et si ça ne marche pas, on teste avec 999, puis 9999, jusqu'à 999999 qui est divisible par 21 (pour passer de n 9 à n+1 9, il suffit d'incrémenter, de multiplier par 10, et de décrémenter).
Or 999999 = 10^6 - 1 (il y a 6 fois le chiffre 9), donc le motif a une taille de 6.
Enfin, pour passer de D=42 à 21, on a divisé 1 fois par 2, et 0 fois 5, donc l'irrégularité va jusqu'à 1 chiffre après la virgule (attention, purement intuitif).
Si, pour passer de D à D' en divisant le plus possible par 2 et 5, on a divisé X fois par 2 et Y fois par 5, je dirais que l'irrégularité va jusqu'à sup(X;Y) chiffres après la virgule.
Si mon intuition mathématique se révèle exacte, la seule boucle algorithmique serait alors de déterminer combien il faut de 9 pour que 9...9 soit divisible par D' ...
@++