• Aucun résultat trouvé

Document de travail pour le TD1Question 1- Euclide & Eratosthène

N/A
N/A
Protected

Academic year: 2022

Partager "Document de travail pour le TD1Question 1- Euclide & Eratosthène"

Copied!
3
0
0

Texte intégral

(1)

Module Info31 – L2 Sciences & Techniques Université de Bourgogne Dominique Michelucci

Document de travail pour le TD1

Question 1- Euclide & Eratosthène

Le crible d'Eratosthène permet de lister les entiers premiers entre 1 et n, en supprimant peu à peu les multiples des entiers premiers déjà trouvés.

L'algorithme d'Euclide permet de construire un algorithme récursif de calcul du pgcd ; il est basé sur une propriété du pgcd, rappelée ci-dessous :

pour a et b deux entiers positifs tels que a≤b : pgcd(a,b)=pgcd(b mod a, a)

L'algorithme d'Euclide étendu permet de calculer, en plus du pgcd, les coefficients de Bézout (entiers relatifs, notés u et v) qui sont tels que : au+bv=pgcd(a,b). Par exemple pour a=165 et b=75, complétez le tableau ci-dessous :

niveau a b r=b%a q g=pgcd(a,b) u v au+bv

1 165 75

2 3 4 5

Ecrivez les algorithmes ci-dessus et proposez un schéma de programme Java (à compléter et tester en TP).

Question 2- Fermat

D'après le petit théorème de Fermat, si p est un entier premier, alors pour tout k∈ℕ on a : 1 = kp-1 modulo p

Un test probabiliste calcule kp-1 modulo p pour un certain nombre (disons de l'ordre de log p) de valeurs entières aléatoires de k (dans [1, p-1]); si pour tous les tests, 1= kp-1 modulo p, le nombre p est

"probablement" premier. Sinon (pour un des tests, 1 ≠ kp-1 modulo p), le nombre p n'est sûrement pas premier.

Que pensez-vous du cas où k=1 ?

Comment pouvez-vous optimiser le calcul de kp-1 pour k > 1 ?

Remarque : ad= ad mod Φ(p) modulo p pour tout entier (premier ou non premier), où Φ(p) est l'indicatrice d'Euler ;

Φ(p) est le nombre d'entiers dans [1,p-1] et premiers avec p (leur PGCD avec p vaut 1). Si p est premier, Φ(p)=p-1.

Remarque : les nombres de Carmichael passent tous ces tests, mais ne sont pas premiers. Il vaut mieux utiliser le test probabiliste de primalité de Solovay-Strassen, qui utilise aussi

TD1-1-

Rappel : la récursivité dans le module Info21

xn n ! Cnk et suite de Fibonacci, triangle de Pascal recherche dichotomique

listes

parents et ancêtres, chaînes binaires sans « 11 » tours de Hanoi

(2)

Module Info31 – L2 Sciences & Techniques Université de Bourgogne Dominique Michelucci

l'exponentiation rapide, ou le test de Miller-Rabin.

Question 3- Fibonacci

La suite de Fibonacci est définie par : F0=0; F1=1;

Fn=Fn−1+Fn−2, pour n>1 a) Proposez un calcul récursif simple de cette suite.

b) Construisez l'arbre des premiers appels récursifs (jusqu'à n valant 4 ou 5) et calculez le nombre d'appels sur 0 et 1. Vérifiez que pour toute valeur de n, le nombre d'appels de F1 est égal à la valeur de la suite de Fibonacci sur n.

c) Pour obtenir une certaine efficacité, on veut conserver et réutiliser des résultats intermédiaires. L'idée est de passer à du calcul matriciel, comme illustré ci-contre.

Quelle matrice doit être utilisée ?

Remarque : Le calcul matriciel de (Fn, Fn-1) sera donc fait comme indiqué ci-contre : le calcul de la suite de Fibonacci consiste à calculer une puissance de matrice.

Il sera possible d'utiliser une méthode de calcul de puissance rapide similaire à celle vue dans la question précédente sur les entiers.

Ce calcul matriciel sera programmé plus tard.

d) On note fi et fi' les deux racines de l'équation x2-x-1=0 :

fi= (1+

5)/2 et fi'= (1−

5)/2

Démontrez par récurrence sur n que

Fib(n)= (finfi 'n)/

5

Rappel : pour cette démonstration par récurrence, vous devez vérifier l'égalité sur 0 et 1 puis en prenant comme hypothèse l'égalité pour n et n-1, démontrer l'égalité pour n+1.

Question 4- familles de fonctions

Vous devez travailler sur une famille de fonctions définie sur les entiers positifs par :

– F0(n)=2*n

– Fk+1(n)=FkFk(n)(n)

a) Complétez les deux premières lignes du tableau ci-dessous.

x 0 1 2 3 4 5 6

F0(x) F1(x)

Que pensez-vous du calcul de F2(1), supposez que le plus grand integer est 232 ? b) Montrez par récurrence que F0k(n)=n*2k puis que F1(n)=n*22n

TD1-2- ( Fn , Fn-1 ) = ( Fn-1 , Fn-2 )

? ?

? ?

( Fn , Fn-1 ) = ( Fn-2 , Fn-3 ) 2

? ?

? ?

( Fn , Fn-1 ) = ( Fn-3 , Fn-4 ) 3

? ?

? ?

( Fn , Fn-1 ) = ( F1 , F0 )

n-1

? ?

? ?

. . .

x Fn

Fnk(x) ...

k fois

Fn Fn Fn

(3)

Module Info31 – L2 Sciences & Techniques Université de Bourgogne Dominique Michelucci

c) Pour travailler sur de telles fonctions, il est possible d'utiliser la classe BigInteger de Java (voir la documentation sur http://www.tutorialspoint.com/java/math/java_math_biginteger.htm) avec les méthodes equals(), add(), subtract(), multiply()1 et les constantes BigInteger.ZERO et BigInteger.ONE.

Utilisez des BigInteger pour calculer les premières valeurs des familles de fonctions : Ackermann2

A(m,n) : n+1 si m=0 A(m-1,1) si m>0 et n=0 A(m-1,A(m,n-1)) autres cas

B(m,n) : 2*n si m=0

A(m-1,1) si m>0 et n=0 A(m-1,A(m,n-1)) autres cas

Question 5- encadrement

Dessinez la courbe y=1/x pour x ∈[1/2, 5]. Et en déduire :

1.083 ≈ 13/12 =1/2 + 1/3 + 1/4 < log 4 < 1 + 1/2 + 1/3 = 11/6 ≈ 1.833 Déduisez-en une formule pour encadrer log x.

Comment peut-on améliorer la précision ? Rappel (vu en cours) :

t=1 t=x

1/t dt est l'aire sous l'arc de l'hyperbole (y=1/x) H(k)=1 + 1/2 + 1/3 + ... + 1/k est la série harmonique, tronquée au terme k.

On en déduit que pour un grand entier n, log n ≈ Hn.

En fait γ = limn→∞Hn−logn ≈ 0.577 est appelée constante d'Euler.

Annexe

Puissances de 2- Voir http://fr.wikipedia.org/wiki/Puissance_de_deux 0 : 1

1 : 2 2 : 4 3 : 8 4 : 16 5 : 32 6 : 64 7 : 128 8 : 256 9 : 512 10 : 1 024 11 : 2 048 12 : 4 096

13 : 8 192 14 : 16 384 15 : 32 768 16 : 65 536 17 : 131 072 18 : 262 144 19 : 524 288 20 : 1 048 576 21 : 2 097 152 22 : 4 194 304 23 : 8 388 608 24 : 16 777 216 25 : 33 554 432

26 : 67 108 864 27 : 134 217 728 28 : 268 435 456 29 : 536 870 912 30 : 1 073 741 824 31 : 2 147 483 648 32 : 4 294 967 296 33 : 8 589 934 592 34 : 17 179 869 184 35 : 34 359 738 368 36 : 68 719 476 736 37 : 137 438 953 472 38 : 274 877 906 944 39 : 549 755 813 888 Bibliographie-

P. Audibert, « Algorithmes et théorie des nombres – Cours, exercices corrigés, programmes en langage C », Ellipses, 2014.

1 Si m et n sont deux objets de la classe BigInteger : m.equals(n) ou m=m.add(n), ...

2 Voir http://en.wikipedia.org/wiki/Ackermann_function

TD1-3-

Références

Documents relatifs

Dans sa d´ ecomposition en produit de cycles ` a supports disjoints ne peuvent figurer que des cycles de longueur 2 (sinon, c’est un cycle de longueur 3 qui admet donc un point

b) Amélia a elle aussi deux seaux de contenances respectives 7 et 4 litres. Comment peut-elle s’y prendre pour obtenir 1 litre d’eau en effectuant le moins d’étapes possibles

Exercice 7 : vérifier si les nombres entiers suivants sont premiers entre eux ou non.. Exercice 13 : on considère trois nombres entiers

Soient a et b deux nombres entiers naturels non nuls. On recommence le procédé jusqu'à obtenir un reste nul. Alors le PGCD est égal au dernier reste non nul dans la suite des

On utilise ici le résultat général (cf. exercice N°77 page 500) : si des nombres premiers, deux à deux distincts, divisent individuellement un entier donné alors leur produit divise

f est dérivable sur R (opérations et compositions de fonctions usuelles dérivables)... Mais on vient de démontrer qu’elle n’est

(En fait, il en sera toujours ainsi car on utilise deux fois le lemme de Gauss qui n’est qu’une implication, mais dans les deux sens. Donc on a une équivalence. Le problème est que la

La preuve, qui pour nous se réduit à une petite manipulation de rapports en écriture symbolique, n’est pas banale car la règle du jeu est que l’on ne peut employer que des