17.01.2015 Views

Généralités sur les systèmes d'exploitation traitement Entrées Sorties

Généralités sur les systèmes d'exploitation traitement Entrées Sorties

Généralités sur les systèmes d'exploitation traitement Entrées Sorties

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

x := 0<br />

i := 0<br />

while x contains a 0 bit (other than leading bits) do<br />

if bit i of x is 0<br />

then x:= x + ( n x, F(n) qui ne peut être qu'un<br />

multiple de x sera au moins 24. Il faut donc résoudre d.17= 1 mod 24 et essayer de calculer M 17d et<br />

comparer à M. Si cela ne marche pas il faut essayer avec F(n)=36...<br />

Pourquoi F(n) ne peut être qu'un multiple de x car si 2 X = 1 mod 35 alors (2 X ) 2 = 2 2X = 1 2 mod 35 =1 mod 35.<br />

On voit que la factorisation est remplacée par la recherche d'un inverse modulo qui fonctionne à peu près<br />

comme l'algorithme d'Euclide. La factorisation de n nécessite l'essai des divisions par tous <strong>les</strong> nombres<br />

premiers inférieurs à n 1/2 (on fait mieux maintenant) tandis que l'algorithme d'Euclide qui lui est reliée à<br />

Fibonacci (voir bibliographie livre de J.P. Delahaye). Le problème de Payne était qu'il a sous-estimé le<br />

temps de calcul pour trouver x tel que 2 X =1 mod 35<br />

5°) Écrire un programme en C (avec entiers 32 bits seulement) qui calcule x selon ce principe.<br />

Réponse :<br />

Plutôt que de donner un programme tout fait nous allons proposer <strong>les</strong> deux étapes par <strong>les</strong>quel<strong>les</strong> je suis moi<br />

même passé. L'idée la plus intuitive à partir de l'énoncé est :<br />

#include <br />

#include <br />

int ln2mod (int p);<br />

main() {<br />

int prime;<br />

printf("On cherche a calculer x verifiant 2^x-1=0mod(p): entrez p :\n");<br />

scanf("%d",&prime);<br />

printf("2^x -1 = 0 mod %d donne : %d\n",prime,ln2mod(prime));<br />

return 0;<br />

}<br />

int ln2mod (int p) {<br />

int x;<br />

int i=1, masque=1,nbbit,masquefinal,OnContinue,nbbittot;<br />

nbbit= log(p)/log(2) +1;<br />

x=p;<br />

masquefinal= (1

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!