Divertissement (5)

Bonsoir,

Sur un autre fil, j'ai écrit tout à l'heure qu'il était plus sage que je cesse de proposer des "divertissements". Seulement, il m'en reste un, auquel j'ai consacré un certain temps. Alors je vous le soumets quand même. Il est consacré au problème du logarithme discret :

Soit $7$, une racine primitive modulo le nombre premier $2$.$147$.$483$.$647$.
Que vaut $x$, le plus petit entier strictement positif tel que $7^x$ soit congru non pas à $1$ mais bien à $2$ modulo $2$.$147$.$483$.$647$ ?

Le défi, c'est de résoudre ce problème en faisant la plus grande économie possible de calculs, qu'ils soient effectués à la main ou par une machine.

[Edit : Reformulation du problème trois messages à moi plus bas.]

Bon dernier divertissement,
Sneg.

Réponses

  • Cooucou Sneg. Ci-dessous, je triche sans casser pour autant ton jouet (je ne montre pas le $x$).
    [color=#000000]> p := 2147483647 ;               
    > IsPrime(p) ;
    true
    > Fp := GF(p) ;
    > x := Log(Fp!7, Fp!2) ;
    > Modexp(7,x, p) ; // 7^x modulo p
    2
    [/color]
    
    C'est nul de ma part, ok. Juste pour faire un petit bonjour.
  • Bonsoir, claude quitté, et grand merci d'intervenir.

    Je me doute que la programmation informatique peut venir facilement à bout de ce problème. Mais, comme je n'y connais rien du tout en programmation, pourrais-tu me dire au bout de combien d'opérations la machine te donne un résultat ?

    Bonne soirée !
  • Rebonjour Sneg,
    Je maintiens que mon intervention est vraiment bof. La programmation informatique peut venir à bout de ....etc... ? Non, pas exactement. Par contre, le logarithme discret dans les corps finis est l'objet d'études en Calcul Formel. Et, en exagérant un peu, il y a des gens qui travaillent à plein temps sur cette histoire.
    Ici, le logiciel utilisé intègre des algorithmes efficaces implémentés par des spécialistes. Et du coup, tout utilisateur (dont mézigue) en bénéficie. Voici une petite idée des temps de calculs. D'abord pour ton (petit) premier :
    [color=#000000]> p := 2147483647 ;            
    > Fp := GF(p) ;  
    > time x := Log(Fp!7, Fp!2) ;  
    Time: 0.010
    [/color]
    
    Maintenant avec un premier $p$ plus grand, $10^{20} < p < 10^{30}$. Tu vois que c'est un peu plus long.
    [color=#000000]> p := NextPrime(Random(10^20, 10^30)) ;
    > Fp := GF(p) ;
    > r := Fp!PrimitiveRoot(p) ;
    > r ;
    6
    > y := Random(1,p-1) ;
    > time x := Log(r,r^y) ;
    Time: 0.880
    > x eq y ;
    true
    [/color]
    
    Grâce à toi, je rajeunis : cela n'a pas été facile mais j'ai retrouvé une note ``Rencontres Nationales de Calcul Formel 11-13 Janvier 1993, Illustration du problème du logarithme discret à l'aide d'Axiom''. Question indiscrète : où étais tu en 1993 ?
  • @ claude quitté :

    Je sais que le gouffre qui me sépare des spécialistes en cette matière est sans fond.

    C'est ce qui doit expliquer mon enthousiasme, peut-être exagéré aux yeux des autres, quand je vois que j'arrive à résoudre le problème posé - et quelques autres exactement du même genre - en un nombre de calculs que l'on peut compter sur les doigts d'une main.

    En 1993 ? Je n'avais pas encore vu le jour.
    :-)
  • J'ai envie de reformuler ma question initiale. Comme ceci :

    Soit $7$, une racine primitive modulo le nombre premier $2$.$147$.$483$.$647$.
    Si l'on vient à se demander quelle est la valeur de $x$, le plus petit entier strictement positif tel que $7^x\equiv 2\pmod{2147483647}$, qu'est-ce qui rend ce problème particulier au point qu'il puisse être résolu de façon particulière, c'est-à-dire sans passer par la recherche exhaustive ni par baby-step giant-step, etc. ?
  • @Sneg
    Rebonjour. J'ai bien vu ta nouvelle formulation dont je trouve les règles du jeu bien plus claires. J'ai pris 10 minutes pour jouer et je pense avoir compris (?) : $31$, $p-1$ ..etc... les choses de la vie.

    Autre chose : j'ai vu que tu mentionnais ``baby-step, giant-step'', joli nom, n'est ce pas ? Dû à D. Shanks, si je me souviens bien.
  • On montre d'abord que $x$ est de la forme $ak$ où $a=\frac{2^{31}-2}{31}$ et $1\leqslant k\leqslant 30$.

    On calcule par ordinateur que $7^a\equiv 2^9 \pmod{p}$ où $p$ est le nombre premier de l'énoncé.

    Il existe $\ell$ tel que $9k=31\ell +1$. On calcule à la main que $k=7$.
  • Bravo, claude quitté d'avoir compris ce que j'avais en tête et bravo JLT de l'avoir traduit en calculs ! (calculs dont j'avais écrit qu'on pouvait les compter sur les doigts d'une main.)

    Juste une question :
    Si la théorie connaît cette méthode pour ce type de problème précis, où la trouver ? J'en cherche des traces sur la toile, mais sans succès. En même temps, je ne sais pas vraiment où chercher. Je cherche surtout du côté de "logarithme discret - nombres premiers de Mersenne".

    Encore bravo et merci d'avoir joué !
    Sneg.
  • Une remarque, avant de mettre un terme à ce fil :

    Dans la résolution de ce problème, JLT et moi avons "profité" du fait que $p-1$ était divisible par $31$.

    Cela intéressera peut-être l'un(e) ou l'autre d'entre vous de chercher à démontrer que, si $p$ est un nombre premier de la forme $2^k-1$, alors $k$ divise $p-1$.

    A moins que ce résultat ne soit trivial.

    Bon divertissement,
    Sneg.
  • Oui, c'est trivial, dans la mesure où a^(p-1) = 1 [p] si a premier avec p. Si k est plus petit que p-1, on a forcément a^2k, a^3k,..... a^nk = 1 avec nk = p-1.
  • Bonsoir, nodgim, et merci.
    Trivial, en effet.
    Un cas flagrant de cécité.
    ("52. Comme les nombres qui sont diviseurs de p-1 sont les seuls qui puissent servir d’exposant aux plus petites puissances congrues avec l'unité", etc.)
  • Je donne plus de détails sur mon message précédent. Soit $p=2^k-1$ un nombre premier de Mersenne (donc $k$ est premier). L'ordre de $2$ modulo $p$ est égal à $k$ et divise $p-1$, donc $k\mid p-1$. Soit $a=\dfrac{p-1}{k}$. Soit $b$ un entier premier avec $p$ tel que $b^a\not\equiv 1\pmod{p}$. Comme $b^{p-1}\equiv 1\pmod{p}$, l'ordre de $b^a$ modulo $p$ est égal à $k$.

    Comme $k$ est premier, l'ensemble $G$ des $y\in\Z/p\Z$ tels que $y^k=1$ est isomorphe à $(\Z/k\Z,+)$, donc tout élément différent du neutre est un générateur. Or, $\overline{2}$ est un générateur de $G$ donc $G=\{\bar{1},\bar{2},\bar{2}^2,\ldots,\bar{2}^{k-1}\}$. On sait donc qu'il existe $\ell\in \{1,2,\ldots,k-1\}$ tel que $b^a\equiv 2^\ell\pmod{p}$. Soit $j$ l'inverse de $\ell$ modulo $k$, on a alors $b^{aj}\equiv 2\pmod{p}$.
  • @Sneg
    Je me permets une petite remarque à propos de ton post : $k$ divise $p-1$ où $p = 2^k -1$. Il y a quelque chose que je ne trouve pas limpide dans la réponse de nodgim, c'est que nulle part n'est mentionné le fait que $k$ est l'ordre (multiplicatif) de $2$ modulo $p$. C'est explicitement dit dans le dernier post de JLT. Et, pour moi, c'est ce qui implique $k \mid p-1$.

    Tu remarqueras, en passant, que je n'utilise pas d'expressions comme ``trivial'' ou ``cécité''. Par ailleurs, on peut se demander d'où est tirée ta citation ``52. Comme les nombres qui sont diviseurs de $p-1$ ...etc...''. De Gauss ? Tiens, on dirait que je te le demande.

    Peut-être que cela serait une bonne chose de montrer le petit résultat suivant qui n'est ni une énigme ni une ``colle''. Il faut savoir ce qu'est l'indicateur d'Euler que je note $\varphi$ (un peu comme tout le monde). Soient $a$ un entier $\ge 2$ et $k$ un entier $\ge 1$ ; alors $k \mid \varphi(a^k - 1)$. Une indication : utiliser le modulus $n = a^k - 1$.
    Avec $a = 2$ et $2^k - 1 = p$ premier, on obtiendra $k \mid \varphi(p) = p-1$.
  • Merci, JLT, pour ces précieuses précisions. C'est très instructif et cela fait plaisir de voir que quelqu'un s'intéresse à mon "énigme".

    @ claude quitté :

    Voici comment j'interprète avec mes mots l'explication de nodgim :

    Pour $p$ premier de la forme $p=2^k-1$, c'est-à-dire premier avec $2$, on a :
    d'une part, $2^k\equiv 1 \pmod{p}$, vu la forme de $p$,
    et d'autre part, $2^{p-1}\equiv 1\pmod{p}$, d'après le petit théorème de Fermat.
    Donc, si $k\leq p-1$, alors $k$ est un diviseur de $p-1$, en vertu de la citation que j'ai notée entre guillemets dans mon message précédent et qui est tirée des Disquisitiones Arithmeticae de Gauss, en effet. Afin de respecter l'orthographe employée par Gauss, ou plus exactement celle de son traducteur, j'ai même écrit le mot "exposants" sans la lettre "t", mais AD a préféré corriger…

    En ce moment, je ne suis pas sur mon ordinateur, mais, dès que j'en aurai le temps, je posterai mes notes personnelles concernant ce problème. Ainsi, tu pourras, si tu le souhaites, faire dessus toutes les remarques que tu jugeras nécessaires.

    A+
  • Sneg,
    Peut-être suis je le seul à trouver ... et donc probablement, j'aurais dû me taire ? En prévision d'une pause de ma part, quelques dernières (si, si) remarques. Tu vas voir comme je suis pinailleur.

    1) Dans ton dernier post, quand tu dis ``si $k \le p-1$'', je suppose qu'il faut le comprendre comme ``Puisque $k \le p-1$'' ?

    2) Dans un groupe $G$, on pourrait avoir $x^k = 1$ et $x^n = 1$ avec $1 \le k \le n$ sans avoir $k \mid n$, n'est ce pas ?

    3) Toujours dans ton dernier post, il n'est pas question de l'ordre (multiplicatif) de $2$ modulo $p$. C'est probablement voulu ?

    4) De nos jours, entre nous, est ce que nous communiquons en disant ``d'après le point 52. de Disquisitiones Arithmeticae de Gauss'' ? Oui, non ? Mézalors qu'invoquons nous ?

    5) Est ce la notion d'ordre d'un élément $x$ (dans un groupe $G$) n'est pas en ce moment sur la sellette ? Certes, cet ordre peut-être vu comme le plus entier $k \ge 1$ tel que $x^k = 1$. Mais cette manière de dire les choses est-elle pertinente ? Est ce qu'il ne faut pas l'accompagner de quelque chose du genre ``ce $k$ a la propriété : si $x^d = 1$, alors $k \mid d$'' ?

    6) Est ce que je suis un pinailleur de première ? Là, je peux répondre : oui.
  • @ claude quitté :

    En règle générale, les mathématiciens professionnels sont plutôt critiques envers mes petits travaux, qu'ils qualifient, au mieux, de "bricolage". Tu n'es donc pas le seul à pinailler. C'est la raison pour laquelle je garde maintenant mes démonstrations pour moi. Mais pour toi, je vais quand même faire une exception, sachant à l'avance que ça finira quand même mal pour moi. Voici donc ci-dessous, extraite de mes notes personnelles, ma solution à cette énigme.

    D'après l'énoncé du problème, on a $7^x\equiv 2\pmod{p}$, pour $p$, premier, valant $2$.$147$.$483$.$647$.
    D'autre part, d'après le petit théorème de Fermat, on a $7^{p-1}\equiv 1\pmod{p}$.
    Enfin, d'une façon générale, $1\equiv p+1\pmod{p}$. Et, ici, $p+1=$ $2$.$147$.$483$.$648=2^{31}$. (Cette décomposition en facteurs premiers s'effectue facilement au moyen d'une simple calculette capable d'afficher dix chiffres.)

    Ainsi, ce qu’il y a de particulier dans ce problème c’est que $p$ soit un nombre premier de Mersenne, conjugué au fait que la racine primitive modulo p élevée à la puissance $x$ soit congrue à une puissance de $2$. Et c’est ce qui rend la résolution de ce problème particulière, c’est-a-dire particulièrement simple :

    On a : $1\equiv p+1\equiv 2^{31}\equiv (7^{x})^{31}\equiv 7^{31x}\pmod{p}$.
    Et si $7^{31x}\equiv 1\pmod{p}$, alors $31x\equiv 0\pmod{p-1}$. (Voir ce que Gauss écrit au n°48 de ses Disquisitiones Arithmeticae.)

    (Pardonne-moi, claude quitté, de citer encore une fois Gauss, mais - en guise de réponse au point 4 de ton dernier message - si je le fais, c'est pour m'éviter de devoir démontrer une chose qui a déjà été démontrée ailleurs et bien mieux que je ne pourrais le faire.)

    Ce qui entraîne :
    $31x=(p-1)y$ $(y\in \mathbb{Z})$
    $x=\frac{(p-1)y}{31}$
    $x=69$.$273$.$666$ $y$ (facilement calculable avec la calculette).

    Dans l'intervalle des entiers compris entre $1$ et $p-1$ où $x$ est recherché, ce dernier peut donc prendre 31 valeurs différentes. Mais pour $a=69$.$273$.$666$, on a, ou bien $x=a$, ou $x=2a$, ou $x=3a$, … , ou $x=31a$, le "ou" étant exclusif car un seul de ces exposants est tel que $7^x\equiv 2\pmod{p}$. En effet, ces 31 exposants $a, 2a, ... , 31a$ sont tous inférieurs ou égaux à $p-1=31a$, et toutes les puissances entières strictement positives de $7$ inférieures ou égales à $7^{(p-1)}$ sont incongrues modulo p, vu que $7$ est une racine primitive modulo p.

    Heureusement, quelque chose évite de devoir passer en revue chacune de ces 31 valeurs de $x$ jusqu'à tomber sur la bonne, et rend à nouveau simples les calculs. C'est l'affirmation suivante :
    Puisque l'une des 30 puissances de $7$ parmi $7^{a}, 7^{2a}, … , 7^{30a}$ est congrue modulo p à $2$
    (à noter que $7^{31a}$ est exclue du lot puisque $7^{31a}\equiv 7^{p-1}\equiv 1\pmod{p}$),
    il s'ensuit que les 31 puissances que sont $7^{a}, 7^{2a}, ... , 7^{31a}$ sont toutes congrues modulo p à une puissance de $2$ dont aucune n’est congrue à une autre.
    (à noter que $7^{31a}\equiv 1\equiv 2^{0}\pmod{p}$).

    [La - longue - démonstration de cette affirmation figure dans mes notes manuscrites, mais je ne l'ai pas encore retranscrite sur mon ordinateur, pardonne-moi. C'était amusant à faire, mais j'ai dû consacrer un certain temps rien qu'à ce point important de mon petit travail, j'avoue. Peut-être les mathématiciens professionnels trouveront-ils cela facile.]

    Ceci permet de terminer rapidement les calculs, de cette façon :

    On choisit une puissance de $7$ parmi $7^{a}$, $7^{2a}$, … , $7^{30a}$ au hasard, sachant que, quelle qu'elle soit, elle sera de toute façon congrue à une puissance de $2$ modulo p. Ici, comme je suis une fille simple, je choisis la puissance $7^{a}$ et introduis dans un logiciel de calcul la commande suivante :

    $$mod(7^{a}, p)$$
    Réponse : $512$, soit, en factorisant, $2^9$.

    Ce résultat permet de dresser le tableau suivant, où la solution apparaît clairement :

    $$\begin {array}{|c|c|c|c|c|c|c|c|c|}
    \hline
    \wedge & a & 2a & 3a & 4a & 5a & 6a & 7a & \phantom{1} \\
    \hline
    7 & 2^9 & 2^{18} & 2^{27} & 2^5 (*) & 2^{14} & 2^{23} & 2 (**) & \pmod{p} \\
    \hline
    \end{array}$$

    $(*)$ $7^{4a}\equiv 7^{3a}\times 7^{a}\equiv 2^{27}\times 2^{9}\equiv 2^{36}\equiv 2^{31}\times 2^5\equiv 1\times 2^5\equiv 2^5\pmod{p}$
    $(**)$ $7^{7a}\equiv 7^{6a}\times 7^{a}\equiv 2^{23}\times 2^{9}\equiv 2^{32}\equiv 2^{31}\times 2^1\equiv 1\times 2^1\equiv 2\pmod{p}$

    [A noter qu'on peut s'éviter ce dernier travail en introduisant simplement dans un logiciel de calcul, par exemple WolframAlpha, la commande suivante :
    solve $9x-31y=1$ for $x$ and $y$ integers
    Réponse : $x=31n+7$ and $y=9n+2$ and $n\in \mathbb{Z}$.
    La solution souhaitée est la plus petite valeur strictement positive de $x$, c'est-à-dire $7$.]

    L'$x$ recherché vaut $7a=7\times 69$.$273$.$666=$ $484$.$915$.$662$.

    Remarque, en réponse au point 3 de ton dernier message, claude quitté :
    Quand le module $p$ est un nombre premier de la forme $2^k-1$, toute puissance de $2$ inférieure à $2^k$ - à savoir $2^1$, $2^2$, … , $2^{k-1}$ - est inférieure à $p$. Donc, la valeur de son résidu modulo $p$ est égale à sa valeur propre, qui n'est jamais égale à $1$. Et cela, contrairement à $2^k$ qui est congru à $1$ modulo $p$ puisque $2^k-1\equiv 0 \pmod{p}$ (tout nombre non nul est divisible par lui-même). Par conséquent, quand le module $p$ est un nombre premier de la forme $2^k-1$, $k$ est l'ordre modulo $p$ de $2$. Je ne l'ai pas mentionné parce que cela me semblait évident. En toute rigueur, j'aurais dû. Dans ce problème, le fait que $31$ soit l'ordre de $2$ modulo $p$ justifie le tableau, les explications introduites par les astérisques $(*)(**)$ ainsi que la commande saisie sur WoframAlpha.
  • Bonjour,

    C'est avec une apparente facilité que JLT a résolu le problème initial de ce fil que je considérais comme difficile.

    Alors, la curiosité me pousse à me poser la question suivante :
    Sera-ce avec difficulté que sera résolu un problème que je considère comme facile ?
    Voici ce problème :

    Soit $7$, une racine primitive modulo $p$, le nombre premier $2.147.483.647$.
    Sans utiliser les grands moyens de calcul, comment trouver $x$, le plus petit entier strictement positif tel que $7^x\equiv 170.156.904\pmod{p}$ ?

    Sneg.
  • Soit $a=170156904$. On regarde les premières valeurs de $7^x$ mod $p$. On s'aperçoit que $7^{11}\equiv -a\pmod{p}$. De plus, comme $7$ est un générateur, on a $7^{(p-1)/2}\equiv -1\pmod{p}$ donc on prend $x=11+\frac{p-1}{2}=1073741834$.
  • C'est exactement ce que j'avais en tête, JLT.
    Ma curiosité est satisfaite.
    Merci d'être encore une fois intervenu !
  • Pourquoi escalader une montagne si un hélicoptère peut nous déposer facilement au sommet ?
    Pour l'exploit.

    Dans ce fil, "l'exploit" consiste à résoudre des problèmes liés au logarithme discret sans recourir à de grands moyens de calcul.

    Ainsi, le problème initial de ce fil consistait à trouver $x$, le plus petit entier strictement positif tel que $\alpha^x\equiv 2 \pmod{p}$, où $\alpha$ était une certaine racine primitive modulo $p=2^{31}-1=$ un nombre premier de Mersenne.
    Et cela, en ne saisissant dans un logiciel de calcul pas plus d'une commande.

    Dans ce message, il s'agit de trouver $x$, le plus petit entier strictement positif tel que $\alpha^x\equiv 2 \pmod{p}$, où $\alpha=46073$ est une racine primitive modulo $p=65537=$ un nombre de Fermat premier. (Comment parler des nombres premiers de Mersenne sans parler des nombres premiers de Fermat ?)
    Et cela, en ne saisissant dans un logiciel de calcul pas plus de deux commandes.

    Je souhaite un peu de fraîcheur à celles et ceux qui habitent dans des régions particulièrement chaudes de France.
    Sneg.
    (Mon pseudo veut dire "neige". Si ça peut rafraîchir un peu l'atmosphère...)
  • Sachant que $\alpha$ est un générateur, il est d'ordre $2^{16}$. D'autre part, $2$ est d'ordre $2^5$ donc $x$ est de la forme $2^{11}m$ avec $m$ impair. On calcule avec un logiciel de calcul formel $\alpha^{2^{11}}\equiv -2\pmod{p}$. Or, $2^{16}\equiv -1\pmod{p}$, donc $(-2)^{17}\equiv 2\pmod{p}$, et donc on peut prendre $x=17\times 2^{11}=34816$.
  • Bravo, JLT, et merci d'avoir une dernière fois bien voulu jouer avec moi sur ce fil.
Connectez-vous ou Inscrivez-vous pour répondre.