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
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)/2Démontrez par récurrence sur n que
Fib(n)= (fin−fi 'n)/
√
5Rappel : 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
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-