Acte 2 : l'inverse modulaire revisité

Arithméticiens, arithméticiennes
Je vous propose à nouveau de revisiter l'inverse modulaire.

On considère deux entiers $a$ et $b$ premiers entre eux tels que $1<a<b$.
On note $(i)_j$ le reste de la division euclidienne de $i$ par $j$.
On note $(a^{-1})_b$ l'inverse de $a$ modulo $b$.
On considère la suite $R_k$ où $k$ varie de $1$ à $m$ définie par $R_0=b$, $R_1=a$, $R_{k+1}=(R_{k-1})_{R_k}$ et $R_m=1$.
On a alors

Si $m$ est pair : $$
(a^{-1})_b=b\Big(1+\sum \limits_{k=0}^{\frac{m-2}{2}}\dfrac{R_{2k+2}-R_{2k}}{R_{2k}R_{2k+1}R_{2k+2}}\Big).

$$ Si $m$ est impair : $$
(a^{-1})_b=b\Big(\dfrac{1}{R_{m-1}}+\sum \limits_{k=0}^{\frac{m-3}{2}}\dfrac{R_{2k+2}-R_{2k}}{R_{2k}R_{2k+1}R_{2k+2}}\Big).


$$ Remarque. Même s'il est préférable d'attendre l'avis de spécialistes, je pense que cet algorithme doit être proche de celui d'Euclide étendu en terme de complexité.
Al-Kashi

Réponses

  • Si un modérateur pouvait corriger le titre: "revisité" .Merci.

    Al-Kashi
  • Merci Poirot.
  • Dans le fil Une trouvaille: l'inverse modulaire revisité claude quitté a écrit:
    Contexte : $a,b\in \N^*$ premiers entre eux. Je note $b^{-1}$ un inverse de $b$ modulo $a$, $a^{-1}$ un inverse de $a$ modulo $b$, $n_a$ le reste de $n$ dans la division par $a$. Idem pour $n_b$ et enfin $\{x\}=x-\lfloor x\rfloor$ la partie fractionnaire de $x$. On a l'identité:
    $\displaystyle\left\{ {b^{-1} (n - n_a - n_b) \over a} \right\} = \left\{ {a^{-1} n \over b} \right\} - {n_b \over ab}$

    Il doit y avoir un problème car je trouve que c'est vrai seulement si $a$ divise $n_b$.

    En revanche en cherchant à réécrire cette égalité sous une forme symétrique en $a$ et $b$ j'ai obtenu pour $0\leq n<ab$ :
    $\displaystyle\left\{ {a^{-1} n \over b} \right\}+\left\{ {b^{-1} n \over a} \right\} - {n \over ab}=0$ si $n\in a\N+b\N$, $\quad1$ sinon.

    C'est presque immédiat dans le premier cas.
    Dans le second cas je le démontre en utilisant le fait que $ab-a-b-n\in a\N+b\N$.
  • @Jandri Vu. Je t'avoue que j'ai du mal à me concentrer ce jour.

    Pour moi, une bonne chose est de restituer mon égalité (je veux bien croire qu'elle soit pourrie) dans le cadre de l'invariance à la Al-Kashi d'une part et de la formule de Popoviciu d'autre part. Cette dernière dit
    $$
    \#\{(x,y) \in \N \times \N \mid ax + by = n\} =
    {n \over ab} - \left \{ {b^{-1} n \over a} \right\} - \left \{ {a^{-1} n \over b} \right\} +1
    $$
    Est ce que tu connais ? As tu suivi le fil de l'invariance à la Al-Kashi ? Est ce que cela colle avec tes dernières lignes de ton post (sorry de te demander cela).

    A suivre (mais cela demande de la concentration).
  • @claude quitté
    Tu as raison, la formule que j'ai obtenue (en partant de celle que tu avais proposée) découle immédiatement de la formule de Popoviciu (qui figure par exemple page 39 du livre d'Olivier Bordellès: Thèmes d'arithmétique).

    J'ai suivi le fil (intéressant) de l'invariance trouvée par Al-Kashi.
  • @Jandri
    Du coup, il faut bien que la formule de Popoviciu soit invariante par $n \mapsto n - n_a - n_b$. Quand tu écris cette invariance, tu es amené à une certaine égalité (c'est un peu pénible). Qui découle (ce que je prétends) en deux égalités dont une est celle que j'ai fournie. Je n'ai pas envie de me fatiguer à rapporter tous les détails ici (déjà essayer de gérer mes fils me demande du boulot).

    Suite à ton post, j'ai écrit un programme de vérification ``à grande échelle'' qui confirme (numériquement) que ce que je raconte semble juste. Mais on ne peut pas avoir tous les deux raison. Est ce que je peux te montrer ce programme car je ne vois pas où j'ai pu me tromper ? C'est très court (8 lignes) et pas trop mal écrit. Merci.

    Note : en fait, ``mon'' égalité, je m'en fiche, je n'y tiens pas plus que cela. Cela ne va pas changer grand chose par ailleurs.
  • @claude quitté
    J'ai essayé d'injecter l'invariance dans la formule de Popoviciu mais il y a un problème.
    En effet l'égalité des nombres de solutions des équations n'est valable que si $n-n_a-n_b\geq0$.

    En fait on peut vérifier que:
    $\displaystyle\left\{ {b^{-1} (n - n_a - n_b) \over a} \right\} - \left\{ {a^{-1} n \over b} \right\} + {n_b \over ab} = \displaystyle\left\{ {a^{-1} (n - n_a - n_b) \over b} \right\} - \left\{ {b^{-1} n \over a} \right\} + {n_a \over ab}$.

    Les deux membres de l'égalité sont égaux mais ils ne sont pas toujours nuls!

    Ils le sont si $n-n_a-n_b\geq0$.
  • Voici un petit exemple numérique:

    On cherche l'inverse de $27$ modulo $50$.
    La suite des restes est $50-27-23-4-3-1$.

    $(27^{-1})_{50}=50\Big(\dfrac{1}{3}+\dfrac{23-50}{27*23*50}+\dfrac{3-23}{3*4*23}\Big)$
    $(27^{-1})_{50}=13$


    Je vous laisse comparer à l'algorithme d'Euclide étendu.
    J'ai l'impression qu'il y a moins de calculs.

    Al-Kashi
  • @Al-Kashi
    Dans un environnement informatique adapté, il y a possibilité de faire $N$ tests en quelques minutes, avec $N \approx 10^3$ et même plus. A voir.
    Mais pour l'instant, j'ai des ennuis et je suis désolé d'encombrer ton fil. Je ne peux pas pour autant ouvrir un autre fil.

    @Jandri
    Comme déjà dit, ma prétendue égalité, j'en ai rien à cirer. Par contre, il y a quelque chose qui me tient à coeur, ce sont certains outils de vérification numérique. Je ne rigole pas avec cela. Et ci-dessous, un désaccord avec ce que tu dis. J'aimerai en avoir le coeur net (tiens deux fois le mot coeur).
    [color=#000000]
    > a := 3 ; b := 4 ;
    > printf "a=%o b=%o\n", a, b ;
    a=3 b=4
    > a1 := Modinv(a,b) ; b1 := Modinv(b,a) ;
    > ab := a*b ;
    > f := func < n | FractionalPart(a1*(n-na-nb)/b) where na is n mod a where nb is n mod b > ;
    > g := func < n | FractionalPart(b1*n/a) - na/ab where na is n mod a > ;
    > [f(n) eq g(n) : n in [0..ab]] ;
    [ true, true, true, true, true, true, true, true, true, true, true, true, true ]
    > [f(n) : n in [0..ab]] ;
    [ 0, 1/4, 1/2, 0, 1/4, 1/2, 0, 1/4, 1/2, 0, 1/4, 1/2, 0 ]
    [/color]
    
    Je soupçonne une anomalie de FractionalPart.

    Qu'en dis tu ?

    Autre chose (rien à voir). Il me semble que tu as dû parler de la symétrie du semi groupe $S = a\N + b\N$, $a \wedge b = 1$, sans pour autant prononcer le mot. Je note $g = (a-1)(b-1)/2$ le genre de $S$ i.e. le nombre de gaps (trous) de $S$ : $g(S) = \#(\N \setminus S)$.
    Alors d'une part, $2g-1$ est le plus grand gap, et donc $[2g, \infty[ \subset S$. Et d'autre part, dans l'intervalle $[0..2g-1] = [0.. ab-a-b]$ de cardinal $2g$, il y a autant de gaps que de non gaps, avec l'involution
    $$
    [0..2g-1] \ni i \longmapsto 2g-1 - i \in [0..2g-1] \qquad \hbox {qui échange gap et non gap}
    $$
  • Al Kashi,

    Tu es très attaché à la rentabilité possible de tes formules, alors qu'une égalité en soi présente de l'intérêt.

    Je ne crois pas que cette curieuse égalité que tu as exhibée soit plus efficace que la méthode " presque " classique.

    Inverse de 27 modulo 50 :

    1 * 27 = 27 [50]
    1 * 27 = -23 [50]
    2 * 27 = 4 [50]
    11*27 = -3 [50].....( 11 = 5 * 2 + 1 )
    13 * 27 = 1 [50]

    tu remarqueras que 27, -23, 4, -3, 1 sont les même termes ( au signe près) que ta suite. Le travail est donc le même. La seule différence par rapport à ta formule synthétique, est que j'enregistre les quotients et pas seulement les restes. Je suis seulement tenu à conserver les signes des restes pour être sûr de tomber sur 1 et non -1.

    ça ne retire rien à l'originalité de ta formule.
  • Salut Nodgim,


    En effet j'ai souvent l'habitude de comparer tout de suite un résultat à ce qu'il y a de "meilleur" pour comparer l'efficacité, mais en effet une relation en soi peut avoir d'autres utilités.

    C'est justement cette histoire de stockage, nombre de variables à utiliser, temps de calcul... que je ne maîtrise pas et c'est pour cela que j'attends l'avis de spécialistes.

    J'ai pour l'instant l'impression, que l'algorithme d'Euclide étendu (Euclide-étendu ) utilise $6$ variables de stockage alors qu'ici $4$ me semblent suffisantes. Le nombre de calculs sur une boucle me semble être le même.

    Al-Kashi
  • Je me lance dans un comparatif brut à prendre avec des pincettes car je ne maîtrise pas le domaine.

    Premier point commun entre les deux algorithmes: la suite des restes. Nous laissons donc de côté cette partie car elle sera traitée de la même manière par une machine. Celle-ci correspond dans le tableau ci-dessous à la première colonne.

    Nombre de variables de stockage : $6$ pour Euclide-étendu contre $4$ pour le mien.

    Nombre d'opérations par boucle: pour Euclide-étendu sans compter la première colonne on obtient $6$ opérations élémentaires. Pour le mien ceci correspond au terme sous la somme on obtient $4$ opérations élémentaires.

    Bilan:
    Algorithme d'Euclide-étendu: En sus des calculs des restes, il faut donc $6m$ opérations.
    Algorithme d'Al-Kashi: En sus des calculs des restes, il faut donc au maximum $4(\dfrac{m-2}{2}+1)+2$ soit $2m+2$ opérations.

    Une variante pour Euclide-étendu consiste à rajouter une variable pour stocker le calcul du quotient à chaque étape et ramène le nombre d'opérations en sus des calculs de restes à $4m$.

    Al-Kashi82610
  • Bien cachée sous le tapis, l'arnaque.
  • @Claude et Melpomene

    Sur vos conseils, j'ai envoyé un mail à Quadrature.
    Comme je vous l'ai dit étant amateur, et ne sachant pas quels sont les critères attendus (type de fichier, logiciel, police,rédaction,...) et craignant de faire un travail d'écriture inutile j'ai transmis les liens des discussions.

    En cas de retour positif, je me plierai ensuite aux différentes contraintes pour construire les documents attendus.

    Al-Kashi
  • Voici une variante des formules proposées.
    On ajoute la suite notée $Q_k$ définie par le quotient de $R_k$ par $R_{k+1}$. On a alors :
    si $m$ est pair : $$
    (a^{-1})_b=b\Big(1-\sum \limits_{k=0}^{\frac{m-2}{2}}\dfrac{Q_{2k+1}}{R_{2k}R_{2k+2}}\Big),

    $$ si $m$ est impair : $$
    (a^{-1})_b=b\Big(\dfrac{1}{R_{m-1}}-\sum \limits_{k=0}^{\frac{m-3}{2}}\dfrac{Q_{2k+1}}{R_{2k}R_{2k+2}}\Big).

    $$ Al-Kashi
  • Joaopa écrivait:
    > Bien cachée sous le tapis, l'arnaque.

    De quelle arnaque parles-tu?
    Si c'est des formules que je propose alors pourquoi pas appeler tous les nouveaux résultats "arnaques".
    Si c'est de la partie algorithmique, j'ai bien précisé " à prendre avec des pincettes" et si tu as constaté une bourde il serait plus constructif de la préciser.

    J'ai lu quelques-unes de tes interventions, notamment lorsque j'avais revisité les identités à la Popoviciu ou encore autour des dénumérants et je te trouve très désagréable.


    Al-Kashi
  • calculs de la compléxité, si on appelait ce que tu as fait un calcul de complexité.
    >je te trouve très désagréable.
    et ?
  • Voici la preuve des résultats annoncés:

    Dans tout ce qui suit, on considère deux entiers $a$ et $b$ premiers entre eux tels que $1<a<b$.
    On note $(i)_j$ le reste de la division euclidienne de $i$ par $j$.
    On note $(a^{-1})_b$ l'inverse de $a$ modulo $b$.
    On considère la suite $R_k$ où $k$ varie de $1$ à $m+1$ définie par $R_0=b$, $R_1=a$, $R_{k+1}=(R_{k-1})_{R_k}$ et $R_m=1$ soit donc $R_{m+1}=0$.

    Lemme 1.
    Soit $n\in\N$ .Le nombre de solutions dans $\N^2$ de l'équation $ax+by=n$ est:
    $$\dfrac{n-b(nb^{-1})_a-a(na^{-1})_b}{ab}+1$$.
    Preuve:
    Voir mes travaux antérieurs ici Popoviciu revisité.

    Corollaire 1.
    L'unique solution dans $\N^2$ de l'équation $ax+by=ab+1$ est $\Big((a^{-1})_b;(b^{-1})_a\Big)$.
    Preuve:
    Tout d'abord $\dfrac{a(a^{-1})_b+b(b^{-1})_a-1}{ab}$ est un entier. De plus $0<a(a^{-1})_b+b(b^{-1})_a-1<2ab$. En conclusion $a(a^{-1})_b+b(b^{-1})_a-1=ab$ et $\Big((a^{-1})_b;(b^{-1})_a\Big)$ est une solution de l'équation $ax+by=ab+1$.
    On en déduit alors en utilisant le Lemme 1 que c'est la seule solution.

    Avec ce qui précède, nous pouvons introduire la suite $(x_k;y_k)$ où $0\leq k \leq m-2$ définie par l'unique couple solution de $$R_{k+1}x+R_{k}y=R_{k+1}R_{k}+1.$$
    Nous définissons aussi $(x_{m-1};y_{m-1})=(1;1)$ et $(x_{m};y_{m})=(1;1)$.

    Lemme 2.

    Pour tout $0 \leq k \leq m-2 $ on a : $x_{k}=\dfrac{R_{k+2}-R_{k}}{R_{k+2}R_{k+1}}+\dfrac{R_{k}}{R_{k+2}}x_{k+2}$.
    Preuve:
    Par définition: $R_{k+1}x_k+R_{k}y_k=R_{k+1}R_{k}+1$ et $R_{k+2}x_{k+1}+R_{k+1}y_{k+1}=R_{k+2}R_{k+1}+1$.
    Par définition, sachant que $R_{k+2}\equiv R_{k}$ modulo $R_{k+1}$, on en déduit alors que l'inverse modulaire de $R_{k+2}$ est aussi l'inverse modulaire de $R_{k}$ modulo $R_{k+1}$ .
    On a donc $x_{k+1}=y_k$ (*).
    En injectant ce résultat dans les deux expressions ci dessus on obtient alors $x_{k}=\dfrac{R_{k+2}-R_{k}}{R_{k+2}R_{k+1}}+\dfrac{R_{k}}{R_{k+2}}y_{k+1}$. En utilisant alors (*) on obtient le résultat annoncé.

    Corollaire 2.
    Soit $2\leq s\leq m$ un nombre pair. on a : $x_{0}=R_0\Big(\dfrac{x_{s}}{R_{s}}+\sum \limits_{k=0}^{\frac{s-2}{2}}\dfrac{R_{2k+2}-R_{2k}}{R_{2k}R_{2k+1}R_{2k+2}}\Big)$.
    Preuve:
    Immédiat en utilisant une récurrence et le Lemme 2..

    Corollaire 3.
    Si $m$ est pair alors $(a^{-1})_b=b\Big(1+\sum \limits_{k=0}^{\frac{m-2}{2}}\dfrac{R_{2k+2}-R_{2k}}{R_{2k}R_{2k+1}R_{2k+2}}\Big)$.
    Preuve:
    Immédiat en utilisant le Corollaire 2.

    Corollaire 4.
    Si $m$ est impair alors $(a^{-1})_b=b\Big(\dfrac{1}{R_{m-1}}+\sum \limits_{k=0}^{\frac{m-3}{2}}\dfrac{R_{2k+2}-R_{2k}}{R_{2k}R_{2k+1}R_{2k+2}}\Big).$
    Preuve:
    Immédiat en utilisant le Corollaire 2 avec le nombre pair $m-1$.

    Al-Kashi
  • A présent que la preuve est établie, il me reste toujours deux questions auxquelles je n'ai toujours pas de réponse : Ces nouvelles formules ont-elles un intérêt ? L'algorithme proposé est-il meilleur que celui d'Euclide étendu ?



    Al-Kashi
  • Voilà qui me semble plus synthétique et élégant, on peut finalement simplifier les formules en :

    Si $m$ est pair : $\quad\displaystyle
    (a^{-1})_b=b\Big(1+\sum \limits_{k=0}^{m-1}\dfrac{(-1)^k}{R_{k}R_{k+1}}\Big).
    $
    Si $m$ est impair : $\quad\displaystyle
    (a^{-1})_b=b\Big(\sum \limits_{k=0}^{m-1}\dfrac{(-1)^k}{R_{k}R_{k+1}}\Big).
    $

    Al-Kashi
  • En reprenant le même exemple numérique, cela donne :

    On cherche l'inverse de $27$ modulo $50$.
    La suite des restes est $50-27-23-4-3-1$.

    $(27^{-1})_{50}=50\Big(\dfrac{1}{50*27}-\dfrac{1}{27*23}+\dfrac{1}{23*4}-\dfrac{1}{4*3}+\dfrac{1}{3*1}\Big)$
    $(27^{-1})_{50}=13$

    Il me semble que ces formules ont l'intérêt de montrer que les derniers restes ont "plus d'influence" sur le résultat recherché.

    Al-Kashi
  • Bonjour,

    Toujours dans l'attente de réponses à mes questions, j'aimerais savoir si quelqu'un ici serait spécialiste dans le domaine des fractions continues. Je pose cette question car un de mes anciens professeurs, M.Joseph Oesterlé, m'a dit à ce sujet:

    " Je pense qu’il doit déjà figurer sous une forme ou une autre dans certains livres sur les fractions continues, même si je ne suis pas capable de vous donner une référence. Vous pouvez le soumettre, par exemple à une revue de professeurs de classes préparatoires, charge au rapporteur s’il pense comme moi de vous trouver un endroit où ce résultat apparaît déjà."

    En vous remerciant,

    Al-Kashi
  • Bonjour,

    Voici un argument qui permet de conclure que cet algorithme apporte un meilleur résultat que l'algorithme d'Euclide étendu.

    Reprenons l'exemple ci-dessus:
    $(27^{-1})_{50}=50\Big(\dfrac{1}{50*27}-\dfrac{1}{27*23}+\dfrac{1}{23*4}-\dfrac{1}{4*3}+\dfrac{1}{3*1}\Big)$
    $(27^{-1})_{50}=13$

    Reprenons la somme dans l'autre sens, terme par terme:
    $50\dfrac{1}{3*1} \simeq 16,3$
    $50\Big(-\dfrac{1}{4*3}+\dfrac{1}{3*1}\Big)\simeq12,5$
    $50\Big(+\dfrac{1}{23*4}-\dfrac{1}{4*3}+\dfrac{1}{3*1}\Big)\simeq13$
    On l'aura compris, les sommes successives donnent des encadrements de la valeur cherchée et ceci se prouve aisément on remarquant que la suite des restes dans le sens inverse est croissante.
    De manière générale, cela signifie que les termes tels que $\dfrac{R_0}{R_kR_{k+1}}<1$ n'ont plus d'influence sur la partie entière du résultat. Ainsi, dans la pratique, on ne commencera à effectuer les calculs qu'à partir des restes vérifiant $ R_kR_{k+1}<R_0$

    A titre d'exemple:$R_0=10000$ et $R_1=6171$.
    La suite des restes donne:$10000-6171-3829-2342-1487-855-632-223-186-37-1$
    Ainsi pour déterminer $(6171^{-1})_{10000}$ on calcule simplement $10000\Big(1+\dfrac{1}{37*186}-\dfrac{1}{37*1} )\simeq 9731$

    Al-Kashi
Connectez-vous ou Inscrivez-vous pour répondre.