• Aucun résultat trouvé

La suite de Fibonacci

N/A
N/A
Protected

Academic year: 2022

Partager "La suite de Fibonacci"

Copied!
3
0
0

Texte intégral

(1)

La suite de Fibonacci

πλ

23 Novembre 2017

R´esum´e

L’objectif de cette s´eance de travaux-pratiques est de mettre en ´evidence quelques observations faites en cours sur le calcul des nombres de la suite de Fibonacci. Une occasion de pr´esenter les outilsbc,gcc,gdb,objdump etgprof.

1 Arithm´ etique modulaire sur 64 bits

Soitnun module. L’ordre multiplicatif modulaire d’un entierxpremier avec nd´esigne le plus petit entier f tel quexf ≡1 (modn). Un tel entier est bien d´efini `a condition quexsoit inversible modulon. En effet, l’entierkvariant, la suitexk (modn) prenant ses valeurs dans un ensemble fini, il existe j > i tel que :

xj=xi (mod n) =⇒xj−i= 1 (modn),

on peut alors montrer que f divise j−i, et c’est bien le plus petit entier qui v´erifiexk = 1 (modn). Apr´es compilation de la sourcearithmos.c, on obtient : mesure> g c c −Wall a r i t h m o s . c −o a r i t h m o s . e x e

mesure> x =2147483648

mesure> n =658812288653553079 mesure> . / a r i t h m o s . e x e $x $n

o r d r e de 2 1 4 7 4 8 3 6 4 8 modx 6 5 8 8 1 2 2 8 8 6 5 3 5 5 3 0 7 9 > 255 mesure> bc <<< ” ( $x ˆ 3 ) % $n ”

1

1. Il y a un soucis, pourquoi ?

1

(2)

1 #include<stdio.h>

2 #include<stdlib.h>

3 /∗

4 ∗ test l ’ ordre multiplicatif d’un entier modulo un autre

5 ∗ status : bug

6 ∗/

7

8 typedef unsigned long longnombre;

9

10 intordre(nombre x, nombre m)

11 {

12 int res = 1;

13 nombre y = x;

14 while (y != 1 && res<255){

15 y = (x∗ y) % m;

16 res ++;

17 }

18 returnres;

19 }

20

21 intmain(intargc,char∗argv[])

22 {

23 nombre x = atoll(argv[1]);

24 nombre m = atoll(argv[2]);

25 int f = ordre( x, m );

26 if ( f <255 )

27 printf (”ordre de %Ld modx %Ld = %d\n”, x, m, f);

28 else

29 printf (”ordre de %Ld modx %Ld>255\n”, x, m);

30 return0;

31 }

arithmos.c

2

(3)

2. Faire un diagnostic !

3. D´ecrire sommairement une solution pour sortir de ce mauvais pas.

Indication : utiliserbc -lpour calculer le logarithme `a base 2 dexetn.

2 Fibonacci

On rappelle que la suite de Fibonacci est d´efinie par les r`egles suivantes : F0= 0, F1= 1, ∀n >1, Fn=Fn−1+Fn−2.

Il s’agit mettre en oeuvre le calcul des nombres de Fibonacci dans des pro- grammes en langage C. Les implantations doivent contenir une fonctionullong fib(int n)o`uullongest un type entier de 64 bits. Les commandes associ´ees prendront un entier n en argument pour ´ecrire la valeur de Fn sur la sortie standard.

2.1 m´ ethode it´ erative

1. Modifier la commande pour mettre en ´evidence la limite de FFn+1

n . 2. Proposer un ´equivalent deFn en fonction denet du nombre d’or.

3. D´eterminer empiriquement le domaine de validit´e de la commande en affichant les premiers termes des suitesFn etFn+1/Fn.

4. Utiliser l’option −S compilateur pour mettre en ´evidence le nombre d’op´erations machines g´en´er´ees par le compilateur pour la partie instruc- tion de la boucle de fib.

5. Retrouver les r´esultats avec les commandesgdbetobjdump.

6. Ecrire un script bas´e sur la commandebcpour calculer len-i`eme nombre de Fibonacci.

7. Quel est le nombre de chiffre d´ecinaux deF1000? 8. Retrouver ce r´esultat `a partir de l’´equivalent (4).

2.2 m´ ethode r´ ecursive

On noteT(n) le temps de calcul de la version r´ecursive.

1. Pour quelle valeur denpeut-on calculerFn en moins d’une minute.

2. Utiliser la commande gnuplotpour tracer le graphe de logT(n).

3. Proposer un ´equivalent deT(n) en fonction deFn.

4. Utiliser le profileur gprof pour d´eterminer le nombre d’appels r´esursif pour calculer F20.

3

Références

Documents relatifs

Le rˆ ole d’un compilateur Sp´ ecifier un compilateur Structure logicielle.. Le rˆole

Nous verrons plus tard les étapes de la compilation d’un exemple dont nous pouvons déjà donner le texte source en respectant la grammaire définie ci-dessus, « La somme de i pour

Le code source de ces programmes se trouve dans mcc18\src\startup .Pour reconstruire le code de démarrage et copier les fichiers objet dans le répertoire \lib lancer build.bat.. Le

Il s'agit d'un fichier d'inclusion particulièrement important lorsqu’on travaille en C sur un micro-contrôleur : le fichier de définition des registres internes du

Associé au compilateur MCC18 il permet de compiler et/ou d’assembler ensemble des fichiers sources d’origines différentes puis de lier les fichiers objet obtenus entre eux et avec

Information sémantique En plus de l’AST, le frontend doit aussi extraire des informations dites sémantique, comme le typage (pour les langage au typage statique), mais aussi les

Cette MV réalise l’unification des structures de données de la méta-grammaire (i.e. struc- tures de traits associées aux noeuds, traits polarisés pour IG , etc), puis

[r]