Professional Documents
Culture Documents
Le cours du MOOC
1 Arithmtique
1
Division euclidienne et pgcd
2
Thorme de Bzout . . . . .
3
Nombres premiers . . . . . .
4
Congruences . . . . . . . . . .
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
5
7
10
13
2 Cryptographie
1
Le chiffrement de Csar . . . . . . . . . .
2
Le chiffrement de Vigenre . . . . . . . .
3
La machine Enigma et les cls secrtes
4
La cryptographie cl publique . . . . .
5
Larithmtique pour RSA . . . . . . . . .
6
Le chiffrement RSA . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
22
25
30
34
37
3 Algorithmes et mathmatiques
1
Premiers pas avec Python . . . . . . . . .
2
criture des entiers . . . . . . . . . . . . .
3
Calculs de sinus, cosinus, tangente . . . .
4
Les rels . . . . . . . . . . . . . . . . . . . .
5
Arithmtique Algorithmes rcursifs . .
6
Polynmes Complexit dun algorithme
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
44
47
53
56
61
65
II
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
70
4 Logique et raisonnements
1
Logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
Raisonnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
72
76
5 Ensembles et applications
1
Ensembles . . . . . . . . . . . .
2
Applications . . . . . . . . . . .
3
Injection, surjection, bijection
4
Ensembles finis . . . . . . . . .
5
Relation dquivalence . . . . .
79
80
83
85
87
93
III
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Les exercices
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
97
Cours et exercices de maths
exo7.emath.fr
1
Vous voulez comprendre l'arithmtique ? Vous souhaitez dcouvrir une application des mathmatiques la
vie quotidienne ? Ce cours est fait pour vous ! De niveau premire anne d'universit, vous apprendrez les
bases de l'arithmtique (division euclidienne, thorme de Bzout, nombres premiers, congruences).
Vous vous tes dj demand comment sont scurises les transactions sur Internet ? Vous dcouvrirez les
bases de la cryptographie, en commenant par les codes les plus simples pour aboutir au code RSA. Le
code RSA est le code utilis pour crypter les communications sur internet. Il est bas sur de l'arithmtique
assez simple que l'on comprendra en dtails. Vous pourrez en plus mettre en pratique vos connaissances par
l'apprentissage de notions sur le langage de programmation Python.
Comment utiliser ce support de cours ? Le but est de comprendre en dtails les deux premiers chapitres !
Les autres chapitres sont l pour vous aider si vous en avez besoin.
Chapitre 1. Arithmtique. Le cur de nos proccupations, nous tudierons tout pas pas et en dtails .
Chapitre 2. Cryptographie. Notre motivation : comprendre le chirement RSA.
Chapitre 3. Algorithme. Nous aurons besoin d'un petit peu de programmation pour casser des codes
secrets. Nous n'tudierons pas ce chapitre en entier.
Chapitre 4 et 5. Pour ceux qui ont besoin d'une petite remise niveau, des rappels sur la logique et les
ensembles.
Des exercices pour l'arithmtique que l'on travaillera en profondeur. Et aussi pour ceux qui le souhaitent
des exercices de remise niveau pour la logique et les ensembles.
Plan de travail
Semaine 0
Semaine 1
Semaine 2
Semaine 3
Semaine 4
Semaine 5
Semaine 6
Premire partie
Le cours du MOOC
Exo7
Arithmtique
Vido
Vido
Vido
Vido
Fiche
partie 1.
partie 2.
partie 3.
partie 4.
d'exercices
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
n)
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
6
7
7
7
7
8
8
9
10
10
10
11
11
12
13
13
14
15
16
Prambule
Une motivation : larithmtique est au cur du cryptage des communication. Pour crypter un message
on commence par le transformer en un ou plusieurs nombres. Le processus de codage et dcodage fait
appel plusieurs notions de ce chapitre :
On choisit deux nombres premiers p et q que lon garde secrets et on pose n = p q. Le principe
tant que mme connaissant n il est trs difficile de retrouver p et q (qui sont des nombres ayant des
centaines de chiffres).
La cl secrte et la cl publique se calculent laide de lalgorithme dEuclide et des coefficients
de Bzout.
Les calculs de cryptage se feront modulo n.
Le dcodage fonctionne grce une variante du petit thorme de Fermat.
4
1
1.1
Dfinition 1. Soient a, b Z. On dit que b divise a et on note b|a sil existe q Z tel que
a = bq
.
Exemple 1. 7|21 ; 6|48 ; a est pair si et seulement si 2|a.
Pour tout a Z on a a|0 et aussi 1|a.
Si a|1 alors a = +1 ou a = 1.
(a| b et b|a) = b = a.
(a| b et b| c) = a| c.
(a| b et a| c) = a| b + c.
Thorme 1 (Division euclidienne).
Soit a Z et b N \ {0}. Il existe des entiers q, r Z tels que
a = bq + r
et
0r<b
34
dividende
199
diviseur
quotient
reste
qb a < (q + 1)b = qb + b.
On dfinit alors r = a qb, r vrifie alors 0 r = a qb < b.
Unicit. Supposons que q0 , r 0 soient deux entiers qui vrifient les conditions du thorme. Tout dabord
a = bq + r = bq0 + r 0 et donc b(q q0 ) = r 0 r. Dautre part 0 r 0 < b et 0 r < b donc b < r 0 r < b (notez
au passage la manipulation des ingalits). Mais r 0 r = b(q q0 ) donc on obtient b < b(q q0 ) < b.
On peut diviser par b > 0 pour avoir 1 < q q0 < 1. Comme q q0 est un entier, la seule possibilit est
q q0 = 0 et donc q = q0 . Repartant de r 0 r = b(q q0 ) on obtient maintenant r = r 0 .
1.2
Dfinition 2. Soient a, b Z deux entiers, non tous les deux nuls. Le plus grand entier qui divise la
fois a et b sappelle le plus grand diviseur commun de a, b et se note pgcd(a, b).
Exemple 3. pgcd(21, 14) = 7, pgcd(12, 32) = 4, pgcd(21, 26) = 1.
pgcd(a, ka) = a, pour tout k Z et a 0.
Cas particuliers. Pour tout a 0 : pgcd(a, 0) = a et pgcd(a, 1) = 1.
1.3
Algorithme dEuclide
=
=
=
=
124
104
20
4
=
=
=
=
=
3003
936
195
156
39
4
1
5
5
+
+
+
+
104
20
4
0
3
3
4
1
4
+
+
+
+
+
936
195
156
39
0
1.4
1.5
a = a0 d
b = b0 d
avec
a0 , b0 Z et pgcd(a0 , b0 ) = 1
Mini-exercices
1. crire la division euclidienne de 111 111 par 20xx, o 20xx est lanne en cours.
2. Montrer quun diviseur positif de 10 008 et de 10 014 appartient ncessairement {1, 2, 3, 6}.
3. Calculer pgcd(560, 133), pgcd(12 121, 789), pgcd(99 999, 1110).
4. Trouver tous les entiers 1 a 50 tels que a et 50 soient premiers entre eux. Mme question avec
52.
Thorme de Bzout
2.1
Thorme de Bzout
=
=
=
=
124
104
20
4
4
1
5
5
+
+
+
+
104
20
4
0
=
=
=
=
=
3003
936
195
156
39
3
3
4
1
4
+
+
+
+
+
936
195
156
39
0
39
39
39
39
=
=
=
=
195 156 1
2.2
2.3
quations ax + b y = c
Proposition 1.
Considrons lquation
ax + b y = c
(E)
o a, b, c Z.
1. Lquation (E) possde des solutions (x, y) Z2 si et seulement si pgcd(a, b)| c.
2. Si pgcd(a, b)| c alors il existe mme une infinit de solutions entires et elles sont exactement les
(x, y) = (x0 + k, y0 + k) avec x0 , y0 , , Z fixs et k parcourant Z.
Le premier point est une consquence du thorme de Bzout. Nous allons voir sur un exemple comment
prouver le second point et calculer explicitement les solutions. Il est bon de refaire toutes les tapes de
la dmonstration chaque fois.
Exemple 10. Trouver les solutions entires de
161x + 368y = 115
8
(E)
Premire tape. Y a-til de solutions ? Lalgorithme dEuclide. On effectue lalgorithme dEuclide pour calculer le pgcd de a = 161 et b = 368.
368 = 161 2 + 46
161 = 46
3 + 23
46 = 23
2 + 0
Donc pgcd(368, 161) = 23. Comme 115 = 5 23 alors pgcd(368, 161)|115. Par le thorme de Bzout,
lquation (E) admet des solutions entires.
Deuxime tape. Trouver une solution particulire : la remonte de lalgorithme dEuclide.
On effectue la remonte de lalgorithme dEuclide pour calculer les coefficients de Bzout.
368 = 161 2 + 46
161 = 46
3 + 23
46 = 23
2 + 0
On trouve donc 161 7 + 368 (3) = 23. Comme 115 = 5 23 en multipliant par 5 on obtient :
161 35 + 368 (15) = 115
Ainsi (x0 , y0 ) = (35, 15) est une solution particulire de (E).
Troisime tape. Recherche de toutes les solutions. Soit (x, y) Z2 une solution de (E). Nous
savons que (x0 , y0 ) est aussi solution. Ainsi :
161x + 368y = 115
et
(on na aucun intrt remplacer x0 et y0 par leurs valeurs). La diffrence de ces deux galits conduit
161 (x x0 ) + 368 (y y0 ) = 0
=
23 7 (x x0 ) + 23 16 (y y0 ) = 0
7(x x0 ) = 16(y y0 )
()
Nous avons simplifier par 23 qui est le pgcd de 161 et 368. (Attention, noubliez surtout pas cette
simplification, sinon la suite du raisonnement serait fausse.)
Ainsi 7|16(y y0 ), or pgcd(7, 16) = 1 donc par le lemme de Gauss 7| y y0 . Il existe donc k Z tel que
y y0 = 7 k. Repartant de lquation () : 7(x x0 ) = 16(y y0 ). On obtient maintenant 7(x x0 ) =
16 7 k. Do x x0 = 16k. (Cest le mme k pour x et pour y.) Nous avons donc (x, y) = (x0
16k, y0 + 7k). Il nest pas dur de voir que tout couple de cette forme est solution de lquation (E). Il
reste donc juste substituer (x0 , y0 ) par sa valeur et nous obtenons :
Les solutions entires de 161x + 368y = 115 sont les (x, y) = (35 16k, 15 + 7k), k parcourant Z.
Pour se rassurer, prenez une valeur de k au hasard et vrifiez que vous obtenez bien une solution de
lquation.
2.4
ppcm
Dfinition 4. Le ppcm(a, b) (plus petit multiple commun) est le plus petit entier 0 divisible par a
et par b.
Par exemple ppcm(12, 9) = 36.
Le pgcd et le ppcm sont lis par la formule suivante :
Proposition 2.
Si a, b sont des entiers (non tous les deux nuls) alors
2 0 0
|ab|
pgcd(a,b) . Pour
0 0
2.5
Mini-exercices
1. Calculer les coefficients de Bzout correspondant pgcd(560, 133), pgcd(12 121, 789).
2. Montrer laide dun corollaire du thorme de Bzout que pgcd(a, a + 1) = 1.
3. Rsoudre les quations : 407x + 129y = 1 ; 720x + 54y = 6 ; 216x + 92y = 8.
4. Trouver les couples (a, b) vrifiant pgcd(a, b) = 12 et ppcm(a, b) = 360.
Nombres premiers
Les nombres premiers sont en quelque sorte les briques lmentaires des entiers : tout entier scrit
comme produit de nombres premiers.
3.1
Dfinition 5. Un nombre premier p est un entier 2 dont les seuls diviseurs positifs sont 1 et p.
Exemples : 2, 3, 5, 7, 11 sont premiers, 4 = 2 2, 6 = 2 3, 8 = 2 4 ne sont pas premiers.
Lemme 2. Tout entier n 2 admet un diviseur qui est un nombre premier.
Dmonstration. Soit D lensemble des diviseurs de n qui sont 2 :
D = k 2 | k| n .
10
3.2
Eratosthne et Euclide
Comment trouver les nombres premiers ? Le crible dEratosthne permet de trouver les premiers
nombres premiers. Pour cela on crit les premiers entiers : pour notre exemple de 2 25.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Rappelons-nous quun diviseur positif dun entier n est infrieur ou gal n. Donc 2 ne peut avoir
comme diviseurs que 1 et 2 et est donc premier. On entoure 2. Ensuite on raye (ici en gris) tous les
multiples suivants de 2 qui ne seront donc pas premiers (car divisible par 2) :
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Le premier nombre restant de la liste est 3 et est ncessairement premier : il nest pas divisible par un
diviseur plus petit (sinon il serait ray). On entoure 3 et on raye tous les multiples de 3 (6, 9, 12, . . . ).
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Le premier nombre restant est 5 et est donc premier. On raye les multiples de 5.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
7 est donc premier, on raye les multiples de 7 (ici pas de nouveaux nombres barrer). Ainsi de suite :
11, 13, 17, 19, 23 sont premiers.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
p
Remarque. Si un nombre n nest pas premier alors un de ses facteurs est n. En effet si n = a b
p
p
avec a, b 2 alors a n ou b n (rflchissez par labsurde !). Par exemple pour tester si un nombre
100 est premier il suffit de tester les diviseurs 10. Et comme il suffit de tester les diviseurs premiers,
il suffit en fait de tester la divisibilit par 2, 3, 5 et 7. Exemple : 89 nest pas divisible par 2, 3, 5, 7 et est
donc un nombre premier.
Proposition 5 (Lemme dEuclide).
Soit p un nombre premier. Si p|ab alors p|a ou p| b.
Dmonstration. Si p ne divise pas a alors p et a sont premiers entre eux (en effet les diviseurs de p
sont 1 et p, mais seul 1 divise aussi a, donc pgcd(a, p) = 1). Ainsi par le lemme de Gauss p| b.
p
Exemple 11. Si p est un nombre premier, p nest pas un nombre rationnel.
2
p
La preuve se fait par labsurde : crivons p = ab avec a Z, b N et pgcd(a, b) = 1. Alors p = ab2 donc
pb2 = a2 . Ainsi p|a2 donc par le lemme dEuclide p|a. On peut alors crire a = pa0 avec a0 un entier. De
lquation pb2 = a2 on tire alors b2 = pa02 . Ainsi p| b2 et donc p| b. Maintenant p|a et p| b donc a et b ne
p
sont pas premiers entre eux. Ce qui contredit pgcd(a, b) = 1. Conclusion p nest pas rationnel.
3.3
Thorme 3.
Soit n 2 un entier. Il existe des nombres premiers p 1 < p 2 < . . . < p r et des exposants entiers 1 , 2 , . . . , r
1 tels que :
n = p1 1 p2 2 p r r .
De plus les p i et les i (i = 1, . . . , r) sont uniques.
Exemple : 24 = 23 3 est la dcomposition en facteurs premiers. Par contre 36 = 22 9 nest pas la
dcomposition en facteurs premiers cest 22 32 .
Remarque. La principale raison pour laquelle on choisit de dire que 1 nest pas un nombre premier,
cest que sinon il ny aurait plus unicit de la dcomposition : 24 = 23 3 = 1 23 3 = 12 23 3 =
11
Dmonstration. Existence. Nous allons dmontrer lexistence de la dcomposition par une rcurrence
sur n.
Lentier n = 2 est dj dcompos. Soit n 3, supposons que tout entier < n admette une dcomposition
en facteurs premiers. Notons p 1 le plus petit nombre premier divisant n (voir le lemme 2). Si n est
un nombre premier alors n = p 1 et cest fini. Sinon on dfinit lentier n0 = pn1 < n et on applique notre
hypothse de rcurrence n0 qui admet une dcomposition en facteurs premiers. Alors n = p 1 n0 admet
aussi une dcomposition.
Unicit. Nous allons dmontrer quune telle dcomposition est unique en effectuant cette fois une rcurP
rence sur la somme des exposants = ri=1 i .
Si = 1 cela signifie n = p 1 qui est bien lunique criture possible.
Soit 2. On suppose que les entiers dont la somme des exposants est < ont une unique dcomposition. Soit n un entier dont la somme des exposants vaut . crivons le avec deux dcompositions :
n = p1 1 p2 2 p r r = q1 1 q2 2 q s s .
(On a p 1 < p 2 < et q 1 < q 2 < .)
Si p 1 < q 1 alors p 1 < q j pour tous les j = 1, . . . , s. Ainsi p 1 divise p 1 1 p 2 2 p r r = n mais ne divise
n0 =
= p1 1 p2 2 p r r = q1 1 q2 2 q s s
p1
Lhypothse de rcurrence qui sapplique n0 implique que ces deux dcompositions sont les mmes.
Ainsi r = s et p i = q i , i = i , i = 1, . . . , r.
Exemple 12.
504 = 23 32 7,
300 = 22 3 52 .
300 = 22 31 52 70 .
Le pgcd est le nombre obtenu en prenant le plus petit exposant de chaque facteur premier :
pgcd(504, 300) = 22 31 50 70 = 12.
Pour le ppcm on prend le plus grand exposant de chaque facteur premier :
ppcm(504, 300) = 23 32 52 71 = 12 600
3.4
Mini-exercices
1. Montrer que n! + 1 nest divisible par aucun des entiers 1, . . . , n. Est-ce toujours un nombre premier ?
2. Trouver tous les nombres premiers 103.
3. Dcomposer a = 2 340 et b = 15 288 en facteurs premiers. Calculer leur pgcd et leur ppcm.
4. Dcomposer 48 400 en produit de facteurs premiers. Combien 48 400 admet-il de diviseurs ?
5. Soient a, b 0. laide de la dcomposition en facteurs premiers, reprouver la formule pgcd(a, b)
ppcm(a, b) = a b.
12
Congruences
4.1
Dfinition
Dfinition 6. Soit n 2 un entier. On dit que a est congru b modulo n, si n divise b a. On note
alors
a b (mod n).
On note aussi parfois a = b (mod n) ou a b[n]. Une autre formulation est
a b (mod n)
k Z
a = b + kn.
1. Utiliser la dfinition.
2. Idem.
3. Prouvons la proprit multiplicative : a b (mod n) donc il existe k Z tel que a = b + kn et c d
(mod n) donc il existe ` Z tel que c d + ` n. Alors a c = (b + kn) (d + ` n) = bd + (b` + dk + k` n)n
qui est bien de la forme bd + mn avec m Z. Ainsi ac bd (mod n).
4. Cest une consquence du point prcdent : avec a = c et b = d on obtient a2 b2 (mod n). On
continue par rcurrence.
(mod 9)
Donc N est congru la somme de ses chiffres modulo 9. Ainsi N 0 (mod 9) si et seulement si la somme
des chiffres vaut 0 modulo 9.
13
Voyons cela sur un exemple : N = 488 889. Ici a 0 = 9 est le chiffre des units, a 1 = 8 celui des dizaines,...
Cette criture dcimale signifie N = 4 105 + 8 104 + 8 103 + 8 102 + 8 10 + 9.
N = 4 105 + 8 104 + 8 103 + 8 102 + 8 10 + 9
4 + 8 + 8 + 8 + 8 + 9 (mod 9)
45 (mod 9)
9 (mod 9)
0 (mod 9)
Ainsi nous savons que 488 889 est divisible par 9 sans avoir effectu de division euclidienne.
Remarque. Pour trouver un bon reprsentant de a (mod n) on peut aussi faire la division euclidienne
de a par n : a = bn + r alors a r (mod n) et 0 r < n.
Exemple 15. Les calculs bien mens avec les congruences sont souvent trs rapides. Par exemple on
souhaite calculer 221 (mod 37) (plus exactement on souhaite trouver 0 r < 37 tel que 221 r (mod 37)).
Plusieurs mthodes :
1. On calcule 221 , puis on fait la division euclidienne de 221 par 37, le reste est notre rsultat. Cest
laborieux !
2. On calcule successivement les 2k modulo 37 : 21 2 (mod 37), 22 4 (mod 37), 23 8 (mod 37),
24 16 (mod 37), 25 32 (mod 37). Ensuite on noublie pas dutiliser les congruences : 26 64 27
(mod 37). 27 2 26 2 27 54 17 (mod 37) et ainsi de suite en utilisant le calcul prcdent
chaque tape. Cest assez efficace et on peut raffiner : par exemple on trouve 28 34 (mod 37)
mais donc aussi 28 3 (mod 37) et donc 29 2 28 2 (3) 6 31 (mod 37),...
3. Il existe une mthode encore plus efficace : on crit lexposant 21 en base 2 : 21 = 24 + 22 + 20 =
16 + 4 + 1. Alors 221 = 216 24 21 . Et il est facile de calculer successivement chacun de ces termes
car les exposants sont des puissances de 2. Ainsi 28 (24 )2 162 256 34 3 (mod 37) et
2
216 28 (3)2 9 (mod 37). Nous obtenons 221 216 24 21 9 16 2 288 29 (mod 37).
4.2
Proposition 7.
Soit a Z , b Z fixs et n 2. Considrons lquation ax b (mod n)
dinconnue x Z :
x2 = 14 + 24m,
14
x3 = 22 + 24m
avec m Z.
Remarque. Expliquons le terme de classe utilis ici. Nous avons considrer ici que lquation 9x 6
(mod 24) est une quation dentiers. On peut aussi considrer que 9, x, 6 sont des classes dquivalence
modulo 24, et lon noterait alors 9x = 6. On trouverait comme solutions trois classes dquivalence :
x1 = 6,
Dmonstration.
x2 = 14,
x3 = 22.
1.
x Z est un solution de lquation ax b (mod n)
k Z
ax = b + kn
k Z
ax kn = b
pgcd(a, n)| b
par la proposition 1
Nous avons juste transform notre quation ax b (mod n) en une quation ax kn = b tudie
auparavant (voir section 2.3), seules les notations changent : au + bv = c devient ax kn = b.
2. Supposons quil existe des solutions. Nous allons noter d = pgcd(a, n) et crire a = da0 , n = dn0
et b = db0 (car par le premier point d | b). Lquation ax kn = b dinconnues x, k Z est alors
quivalente lquation a0 x kn0 = b0 , note (?). Nous savons rsoudre cette quation (voir de
nouveau la proposition 1), si (x0 , k 0 ) est une solution particulire de (?) alors on connat tous les
(x, k) solutions. En particulier x = x0 + ` n0 avec ` Z (les k ne nous intressent pas ici).
Ainsi les solutions x Z sont de la forme x = x0 + ` pgcd(na,n) , ` Z o x0 est une solution particulire
de ax b (mod n). Et modulo n cela donne bien pgcd(a, n) classes distinctes.
4.3
!
!
p
p
p
p
p
p1
p2
(a + 1) = a +
a
+
a
++
+1
p1
p2
1
Rduisons maintenant modulo p :
!
!
p
p
p
p1
p2
(a + 1) a +
a
+
a
++
+ 1 (mod p)
p1
p2
1
p
a p + 1 (mod p)
a + 1 (mod p)
grce au lemme 3
cause de lhypothse de rcurrence
15
Par le principe de rcurrence nous avons dmontr le petit thorme de Fermat pour tout a 0. Il
nest pas dur den dduire le cas des a 0.
Exemple 17. Calculons 143141 (mod 17). Le nombre 17 tant premier on sait par le petit thorme de
Fermat que 1416 1 (mod 17). crivons la division euclidienne de 3141 par 16 :
3141 = 16 196 + 5.
Alors
196
143141 1416196+5 1416196 145 1416
145 1196 145 145 (mod 17)
Il ne reste plus qu calculer 145 modulo 17. Cela peut se faire rapidement : 14 3 (mod 17) donc
142 (3)2 9 (mod 17), 143 142 14 9 (3) 27 7 (mod 17), 145 142 143 9 7 63 12
(mod 17). Conclusion : 143141 145 12 (mod 17).
4.4
Mini-exercices
1. Calculer les restes modulo 10 de 122 + 455, 122 455, 122455 . Mmes calculs modulo 11, puis
modulo 12.
2. Prouver quun entier est divisible par 3 si et seulement si la somme de ses chiffres est divisible
par 3.
3. Calculer 310 (mod 23).
4. Calculer 3100 (mod 23).
5. Rsoudre les quations 3x 4 (mod 7), 4x 14 (mod 30).
Auteurs
Arnaud Bodin
Benjamin Boutin
Pascal Romon
16
Exo7
Cryptographie
Le chiffrement de Csar . . . . . . . . . . . . . .
1.1
Csar a dit... . . . . . . . . . . . . . . . . . .
1.2
Des chiffres et des lettres . . . . . . . . . . .
1.3
Modulo . . . . . . . . . . . . . . . . . . . . . .
1.4
Chiffrer et dchiffrer . . . . . . . . . . . . .
1.5
Espace des cls et attaque . . . . . . . . . .
1.6
Algorithmes . . . . . . . . . . . . . . . . . . .
Le chiffrement de Vigenre . . . . . . . . . . . .
2.1
Chiffrement mono-alphabtique . . . . . .
2.2
Le chiffrement de Vigenre . . . . . . . . .
2.3
Algorithmes . . . . . . . . . . . . . . . . . . .
La machine Enigma et les cls secrtes . . . .
3.1
Un secret parfait . . . . . . . . . . . . . . . .
3.2
La machine Enigma . . . . . . . . . . . . . .
3.3
La ronde des chiffres : DES . . . . . . . . .
La cryptographie cl publique . . . . . . . .
4.1
Le principe de Kerckhoffs . . . . . . . . . .
4.2
Factorisations des entiers . . . . . . . . . .
4.3
Fonctions sens unique . . . . . . . . . . .
4.4
Chiffrement cl prive . . . . . . . . . . .
4.5
Chiffrement cl publique . . . . . . . . . .
Larithmtique pour RSA . . . . . . . . . . . . .
5.1
Le petit thorme de Fermat amlior . . .
5.2
Lalgorithme dEuclide tendu . . . . . . . .
5.3
Inverse modulo n . . . . . . . . . . . . . . .
5.4
Lexponentiation rapide . . . . . . . . . . . .
Le chiffrement RSA . . . . . . . . . . . . . . . . .
6.1
Calcul de la cl publique et de la cl prive
6.2
Chiffrement du message . . . . . . . . . . .
6.3
Dchiffrement du message . . . . . . . . . .
6.4
Schma . . . . . . . . . . . . . . . . . . . . .
6.5
Lemme de dchiffrement . . . . . . . . . . .
6.6
Algorithmes . . . . . . . . . . . . . . . . . . .
Le chiffrement de Csar
17
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
18
18
19
19
21
21
22
22
23
24
25
25
26
29
30
30
31
31
32
33
34
34
35
35
36
37
38
39
40
40
40
41
1.1
Csar a dit...
B 7 E
C 7 F
...
W 7 Z
X 7 A
Y 7 B
Z 7 C
Voici une figure avec lalphabet dorigine en haut et en rouge, en correspondance avec lalphabet pour
le chiffrement en-dessous et en vert.
Nous adopterons la convention suivante, en vert cest la partie du message laquelle tout le monde a
accs (ou qui pourrait tre intercept), cest donc le message crypt. Alors quen rouge cest la partie du
message confidentiel, cest le message en clair.
Pour prendre en compte aussi les dernires lettres de lalphabet, il est plus judicieux de reprsent
lalphabet sur un anneau. Ce dcalage est un dcalage circulaire sur les lettres de lalphabet.
Pour dchiffrer le message de Csar, il suffit de dcaler les lettres dans lautre sens, D se dchiffre en
A, E en B,...
Et la clbre phrase de Csar est :
ALEA JACTA EST
qui traduite du latin donne Les ds sont jets .
1.2
Il est plus facile de manipuler des nombres que des lettres, aussi nous passons une formulation mathmatique. Nous associons chacune des 26 lettres de A Z un nombre de 0 25. En termes mathmatiques, nous dfinissons une bijection :
f : A, B, C, . . . , Z 0, 1, 2, . . . , 25
18
par
A 7 0
B 7 1
C 7 2
...
Z 7 25
1.3
Modulo
puis
26 0, 27 1, 28 2, . . . ,
52 0, 53 1, . . .
1.4
Chiffrer et dchiffrer
Le chiffrement de Csar est simplement une addition dans Z/26Z ! Fixons un entier k qui est le dcalage
(par exemple k = 3 dans lexemple de Csar ci-dessus) et dfinissons la fonction de chiffrement de
Csar de dcalage k qui va de lensemble Z/26Z dans lui-mme :
Ck :
Z/26Z Z/26Z
x 7 x+ k
19
Dk :
Z/26Z Z/26Z
x 7 x k
D k C k (x) = x
En dautres termes, si x est un nombre, on applique la fonction de chiffrement pour obtenir le nombre
crypt y = C k (x) ; ensuite la fonction de dchiffrement fait bien ce que lon attend delle D k (y) = x, on
retrouve le nombre original x.
Ck
Z/26Z
Z/26Z
Dk
Une autre faon de voir la fonction de dchiffrement est de remarquer que D k (x) = C k (x). Par exemple
C 3 (x) = x + (3) x + 23 (mod 26).
Voici le principe du chiffrement : Alice veut envoyer des messages secrets Bruno. Ils se sont dabord
mis daccord sur une cl secrte k, par exemple k = 11. Alice veut envoyer le message "COUCOU"
Bruno. Elle transforme "COUCOU" en "2 14 20 2 14 20". Elle applique la fonction de chiffrement
C 11 (x) = x + 11 chacun des nombres : "13 25 5 13 25 5" ce qui correspond au mot crypt "NZFNZF".
Elle transmet le mot crypt Bruno, qui selon le mme principe applique la fonction de dchiffrement
D 11 (x) = x 11.
ALICE
COUCOU
BRUNO
NZFNZF
NZFNZF
Ck
2 14 20 2 14 20
COUCOU
Dk
13 25 5 13 25 5
13 25 5 13 25 5
2 14 20 2 14 20
Exemple 18. Un exemple classique est le "rot13" (pour rotation par un dcalage de 13) :
C 13 (x) = x + 13
et comme 13 13 (mod 26) alors D 13 (x) = x + 13. La fonction de dchiffrement est la mme que la
fonction de chiffrement !
Exemple : dchiffrez le mot "PRFNE".
Notons ici deux points importants pour la suite : tout dabord nous avons naturellement considr un
mot comme une succession de lettres, et chaque opration de chiffrement et dchiffrement seffectue sur
un bloc dune seule lettre. Ensuite nous avons vu que chiffrer un message est une opration mathmatique (certes sur un ensemble un peu spcial).
20
1.5
Combien existe-t-il de possibilits de chiffrement par la mthode de Csar ? Il y a 26 fonctions C k diffrentes, k = 0, 1, . . . , 25. Encore une fois, k appartient Z/26Z, car par exemple les fonctions C 29 et
C 3 sont identiques. Le dcalage k sappelle la cl de chiffrement, cest linformation ncessaire pour
crypter le message. Il y a donc 26 cls diffrentes et lespace des cls est Z/26Z.
Il est clair que ce chiffrement de Csar est dune scurit trs faible. Si Alice envoie un message secret
Bruno et que Chlo intercepte ce message, il sera facile pour Chlo de le dcrypter mme si elle ne
connat pas la cl secrte k. Lattaque la plus simple pour Chlo est de tester ce que donne chacune
des 26 combinaisons possibles et de reconnatre parmi ces combinaisons laquelle donne un message
comprhensible.
1.6
Algorithmes
Les ordinateurs ont rvolutionn la cryptographie et surtout le dcryptage dun message intercept.
Nous montrons ici, laide du langage Python comment programmer et attaquer le chiffrement de
Csar. Tout dabord la fonction de chiffrement se programme en une seule ligne :
cesar.py (1)
def cesar_chiffre_nb(x,k):
return (x+k)%26
Ici x est un nombre de {0, 1, . . . , 25} et k est le dcalage. (x+k)%26 renvoie le reste modulo 26 de la somme
(x+k). Pour le dcryptage, cest aussi simple :
cesar.py (2)
def cesar_dechiffre_nb(x,k):
return (x-k)%26
Pour chiffrer un mot ou un phrase, il ny a pas de problmes thoriques, mais seulement des difficults
techniques :
Un mot ou une phrase est une chane de caractres, qui en fait se comporte comme une liste. Si
mot est une chane alors mot[0] est la premire lettre, mot[1] la deuxime lettre... et la boucle
for lettre in mot: permet de parcourir chacune des lettres.
Pour transformer une lettre en un nombre, on utilise le code Ascii qui chaque caractre associe un
nombre, ord(A) vaut 65, ord(B) vaut 66... Ainsi (ord(lettre) - 65) renvoie le rang de la lettre
entre 0 et 25 comme nous lavons fix ds le dpart.
La transformation inverse se fait par la fonction char : char(65) renvoie le caractre A, char(66)
renvoie B...
Pour ajouter une lettre une liste, faites maliste.append(lettre). Enfin pour transformer une liste
de caractres en une chane, faites "".join(maliste).
Ce qui donne :
21
cesar.py (3)
def cesar_chiffre_mot(mot,k):
mot_crypte = []
for lettre in mot:
nb = ord(lettre)-65
nb_crypte = cesar_chiffre_nb(nb,k)
lettre_crypte = chr(nb_crypte+65)
mot_crypte.append(lettre_crypte)
mot_crypte = "".join(mot_crypte)
return(mot_crypte)
#
#
#
#
#
#
#
Liste vide
Pour chaque lettre
Lettre devient nb de 0 25
Chiffrement de Csar
Retour aux lettres
Ajoute lettre au message
Revient chaine caractres
Pour lattaque on parcourt lintgralit de lespace des cls : k varie de 0 25. Noter que pour dcrypter
les messages on utilise ici simplement la fonction de Csar avec la cl k.
cesar.py (4)
def cesar_attaque_mot(mot):
for k in range(26):
print "%s pour k=%d" % (cesar_chiffre_mot(mot,-k) , k)
return None
Le chiffrement de Vigenre
2.1
Chiffrement mono-alphabtique
Principe
Nous avons vu que le chiffrement de Csar prsente une scurit trs faible, la principale raison est que
lespace des cls est trop petit : il y a seulement 26 cls possibles, et on peut attaquer un message chiffr
en testant toutes les cls la main.
Au lieu de faire correspondre circulairement les lettres, on associe maintenant chaque lettre une autre
lettre (sans ordre fixe ou rgle gnrale).
Par exemple :
A
F
B
Q
C
B
D
M
E
X
F
I
G
T
H
E
I
P
J
A
K
L
L
W
M
H
N
S
O
D
P
O
Q
Z
R
K
S
V
T
G
U
R
V
C
W
N
X
Y
Y
J
Z
U
22
mme ensemble A, B, . . . , Z . Il y a 26! choix possibles. En effet pour la lettre A de lensemble de dpart,
il y a 26 choix possibles (nous avions choisi F), pour B il reste 25 choix possibles (tout sauf F qui est
dj choisi), pour C il reste 24 choix... enfin pour Z il ne reste quune seule possibilit, la seule lettre non
encore choisie. Au final il y a : 26 25 24 2 1 soit 26! choix de cls. Ce qui fait environ 4 1026
cls. Il y a plus de cls diffrentes que de grains de sable sur Terre ! Si un ordinateur pouvait tester
1 000 000 de cls par seconde, il lui faudrait alors 12 millions dannes pour tout numrer.
Attaque statistique
La principale faiblesse du chiffrement mono-alphabtique est quune mme lettre est toujours chiffre
de la mme faon. Par exemple, ici E devient X. Dans les textes longs, les lettres napparaissent pas
avec la mme frquence. Ces frquences varient suivant la langue utilise. En franais, les lettres les
plus rencontres sont dans lordre :
ESAINTRULODCPMVQGFHBXJYZKW
avec les frquences (souvent proches et dpendant de lchantillon utilis) :
E
14.69%
S
8.01%
A
7.54%
I
7.18%
N
6.89%
T
6.88%
R
6.49%
U
6.12%
L
5.63%
O
5.29%
D
3.66%
Voici la mthode dattaque : dans le texte crypt, on cherche la lettre qui apparat le plus, et si le texte
est assez long cela devrait tre le chiffrement du E, la lettre qui apparat ensuite dans ltude des
frquences devrait tre le chiffrement du S, puis le chiffrement du A... On obtient des morceaux de
texte clair sous la forme dune texte trous et il faut ensuite deviner les lettres manquantes.
Par exemple, dchiffrons la phrase :
LHLZ HFQ BC HFFPZ WH YOUPFH MUPZH
On compte les apparitions des lettres :
H:6 F:4 P:3 Z:3
On suppose donc que le H crypte la lettre E, le F la lettre S, ce qui donne
*E** ES* ** ESS** *E ***SE ****E
Daprs les statistiques P et Z devraient se dcrypter en A et I (ou I et A). Le quatrime mot "HFFPZ",
pour linstant dcrypt en "ESS**", se complte donc en "ESSAI" ou "ESSIA". La premire solution
semble correcte ! Ainsi P crypte A, et Z crypte I. La phrase est maintenant :
*E*I ES* ** ESSAI *E ***ASE **AIE
En rflchissant un petit peu, on dcrypte le message :
CECI EST UN ESSAI DE PHRASE VRAIE
2.2
Le chiffrement de Vigenre
Blocs
Lespace des cls du chiffrement mono-alphabtique est immense, mais le fait quune lettre soit toujours
crypte de la mme faon reprsente une trop grande faiblesse. Le chiffrement de Vigenre remdie
ce problme. On regroupe les lettres de notre texte par blocs, par exemple ici par blocs de longueur 4 :
CETTE PHRASE NE VEUT RIEN DIRE
devient
CETT EPHR ASEN EVEU TRIE NDIR E
(les espaces sont purement indicatifs, dans la premire phrase ils sparent les mots, dans la seconde ils
sparent les blocs).
Si k est la longueur dun bloc, alors on choisit une cl constitue de k nombres de 0 25 : (n 1 , n 2 , . . . , n k ).
Le chiffrement consiste effectuer un chiffrement de Csar, dont le dcalage dpend du rang de la lettre
dans le bloc :
un dcalage de n 1 pour la premire lettre de chaque bloc,
23
C n1 ,n2 ,...,n k :
Chacune des composantes de cette fonction est un chiffrement de Csar. La fonction de dchiffrement
est juste C n1 ,n2 ,...,n k .
Espace des cls et attaque
Il y a 26k choix possibles de cls, lorsque les blocs sont de longueur k. Pour des blocs de longueur k = 4
cela en donne dj 456 976, et mme si un ordinateur teste toutes les combinaisons possibles sans
problme, il nest pas question de parcourir cette liste pour trouver le message en clair, cest--dire celui
qui est comprhensible !
Il persiste tout de mme une faiblesse du mme ordre que celle rencontre dans le chiffrement monoalphabtique : la lettre A nest pas toujours crypte par la mme lettre, mais si deux lettres A sont
situes la mme position dans deux blocs diffrents (comme par exemple "ALPH ABET") alors elles
seront cryptes par la mme lettre.
Une attaque possible est donc la suivante : on dcoupe notre message en plusieurs listes, les premires
lettres de chaque bloc, les deuximes lettres de chaque bloc... et on fait une attaque statistique sur
chacun de ces regroupements. Ce type dattaque nest possible que si la taille des blocs est petite devant
la longueur du texte.
2.3
Algorithmes
Voici un petit algorithme qui calcule la frquence de chaque lettre dune phrase.
statistiques.py
def statistiques(phrase):
liste_stat = [0 for x in range(26)]
# Une liste avec des 0
for lettre in phrase:
# On parcourt la phrase
i = ord(lettre)-65
if 0 <= i < 26:
# Si c'est une vraie lettre
liste_stat[i] = liste_stat[i] + 1
return(liste_stat)
24
vigenere.py
def vigenere(mot,cle):
mot_crypte = []
k = len(cle)
i = 0
for lettre in mot:
nomb = ord(lettre)-65
nomb_code = (nomb+cle[i]) % 26
lettre_code = chr(nomb_code+65)
i=(i+1) % k
mot_crypte.append(lettre_code)
mot_crypte = "".join(mot_crypte)
return(mot_crypte)
3
3.1
Longueur de la cl
Rang dans le bloc
Pour chaque lettre
Lettre devient nb de 0 25
Vigenre : on ajoute n_i
On repasse aux lettres
On passe au rang suivant
Ajoute lettre au message
Revient chaine caractres
Linconvnient des chiffrements prcdents est quune mme lettre est rgulirement chiffre de la
mme faon, car la correspondance dun alphabet un ou plusieurs autres est fixe une fois pour toutes,
ce qui fait quune attaque statistique est toujours possible. Nous allons voir quen changeant la correspondance chaque lettre, il est possible de crer un chiffrement parfait !
Expliquons dabord le principe laide dune analogie : jai choisi deux entiers m et c tels que m + c = 100.
Que vaut m ? Cest bien sr impossible de rpondre car il y a plusieurs possibilits : 0 + 100, 1 + 99,
2 + 98,... Par contre, si je vous donne aussi c alors vous trouvez m immdiatement m = 100 c.
Voici le principe du chiffrement : Alice veut envoyer Bruno le message secret M suivant :
ATTAQUE LE CHATEAU
Alice a dabord choisi une cl secrte C quelle a transmise Bruno. Cette cl secrte est de la mme
longueur que le message (les espaces ne comptent pas) et compose dentiers de 0 25, tirs au hasard.
Par exemple C :
[4, 18, 2, 0, 21, 12, 18, 13, 7, 11, 23, 22, 19, 2, 16, 9]
Elle crypte la premire lettre par un dcalage de Csar donn par le premier entier : A est dcal de
4 lettres et devient donc E. La seconde lettre est dcale du second entier : le premier T devient L. Le
second T est lui dcal de 2 lettres, il devient V. Le A suivant est dcal de 0 lettre, il reste A... Alice
obtient un message chiffr X quelle transmet Bruno :
ELVALGW YL NEWMGQD
Pour le dcrypter, Bruno, qui connat la cl, na qu faire le dcalage dans lautre sens.
Notez que deux lettres identiques (par exemples les T) nont aucune raison dtre cryptes de la mme
faon. Par exemple, les T du message initial sont crypts dans lordre par un L, un V et un M.
Formalisons un peu cette opration. On identifie A avec 0, B avec 1, ..., Z avec 25. Alors le message
crypt X est juste la "somme" du message M avec la cl secrte C, la somme seffectuant lettre lettre,
terme terme, modulo 26.
Notons cette opration M C = X .
25
A
0
T
19
T
19
A
0
Q
16
U
20
E
4
L
11
E
4
C
2
H
7
A
0
T
19
E
4
A
0
U
20
18
21
12
18
13
11
23
22
19
16
4
E
11
L
21
V
0
A
11
L
6
G
22
W
24
Y
11
L
13
N
4
E
22
W
12
M
6
G
16
Q
3
D
3.2
La machine Enigma
Afin de sapprocher de ce protocole de chiffrement parfait, il faut trouver un moyen de gnrer facilement
de longues cls, comme si elles avaient t gnres au hasard. Nous allons tudier deux exemples
utiliss en pratique la fin du sicle dernier, une mthode lectro-mcanique : la machine Enigma et
une mthode numrique : le DES.
La machine Enigma est une machine lectro-mcanique qui ressemble une machine crire. Lorsque
quune touche est enfonce, des disques internes sont actionns et le caractre crypt sallume. Cette
machine, qui sert aussi au dchiffrement, tait utilise pour les communications de larme allemande
durant la seconde guerre mondiale. Ce que les Allemands ne savaient pas, cest que les services secrets
polonais et britanniques avaient russi percer les secrets de cette machine et taient capables de
26
dchiffrer les messages transmis par les allemands. Ce long travail dtudes et de recherches a ncessit
tout le gnie dAlan Turing et linvention de lanctre de lordinateur.
2. Premire lettre. Loprateur tape la premire lettre du message : B, la machine affiche la correspondance W.
3. Rotation. Lanneau intrieur tourne de 1/26me de tour, maintenant le A extrieur et fixe est en
face du W, le B en face du Q,...
27
4. Deuxime lettre. Loprateur tape la deuxime lettre du message A, la machine affiche la correspondance, cest de nouveau W.
5. Rotation. Lanneau intrieur tourne de 1/26me de tour, maintenant le A extrieur et fixe est en
face du Q, le B en face du R, le C en face du U,...
6. Troisime lettre. Loprateur tape la troisime lettre du message C, la machine affiche la correspondance U.
7. Rotation. Lanneau intrieur effectue sa rotation.
8. Message chiffr. Le message crypt est donc "WWU"
Cette mthode de chiffrement est identique un chiffrement de type Vigenre pour une cl de longueur
26. Il y a 26 cls diffrents disposition avec un seul anneau intrieur et identifies par lettre de la
position initiale : G, W, Q... T correspondant aux alphabets : "GWQ...PT", "WQR...TG", "QRU...GW"...
En fait, la machine Enigma tait beaucoup plus sophistique, il ny avait pas un mais plusieurs anneaux
intrieurs. Par exemple pour deux anneaux intrieurs comme sur la figure : B senvoie sur W, qui
senvoie sur A ; la lettre B est crypte en A. Ensuite lanneau intrieur numro 1 effectue 1/26me de
tour. La lettre A senvoie sur W, qui senvoie sur A ; la lettre A est crypte en A. Lorsque lanneau
intrieur numro 1 a fait une rotation complte (26 lettres ont t tapes) alors lanneau intrieur
numro 2 effectue 1/26me de tour. Cest comme sur un compteur kilomtrique, lorsque le chiffre des
kilomtres parcourt 0, 1, 2, 3, ..., 9, alors au kilomtre suivant, le chiffre des kilomtres est 0 et celui des
dizaines de kilomtres est augment dune unit.
Sil y a trois anneaux, lorsque lanneau intrieur 2 a fait une rotation complte, lanneau intrieur 3
tourne de 1/26me de tour. Il y a alors 263 cls diffrentes facilement identifiables par les trois lettres
des positions initiales des anneaux.
28
Il fallait donc pour utiliser cette machine, dabord choisir les disques (nos anneaux intrieurs) les placer
dans un certain ordre, fixer la position initiale de chaque disque. Ce systme tait rendu largement plus
complexe avec lajout de correspondances par fichage entre les lettres du clavier (voir photo). Le nombre
de cls possibles dpassait plusieurs milliards de milliards !
3.3
La machine Enigma gnre mcaniquement un alphabet diffrent chaque caractre crypt, tentant
de se rapprocher dun chiffrement parfait. Nous allons voir une autre mthode, cette fois numrique :
le DES. Le DES (Data Encryption Standard) est un protocole de chiffrement par blocs. Il a t, entre
1977 et 2001, le standard de chiffrement pour les organisations du gouvernement des tats-Unis et par
extension pour un grand nombre de pays dans le monde.
Commenons par rappeler que lobjectif est de gnrer une cl alatoire de grande longueur. Pour ne
pas avoir retenir lintgralit de cette longue cl, on va la gnrer de faon pseudo-alatoire partir
dune petite cl.
Voyons un exemple lmentaire de suite pseudo-alatoire.
Soit (u n ) la suite dfinie par la donne de (a, b) et de u 0 et la relation de rcurrence
u n+1 a u n + b (mod 26).
Par exemple pour a = 2, b = 5 et u 0 = 6, alors les premiers termes de la suites sont :
6
17
13
15
23
25
11
19
17
13
Les trois nombres (a, b, u 0 ) reprsentent la cl principale et la suite des (u n )nN les cls secondaires.
Avantages : partir dune cl principale on a gnr une longue liste de cls secondaires. Inconvnients :
la liste nest pas si alatoire que cela, elle se rpte ici avec une priode de longueur 12 : 17, 13, 5, ..., 17, 13, 5, ...
Le systme DES est une version sophistique de ce processus : partir dune cl courte et doprations
lmentaires on crypte un message. Comme lors de ltude de la machine Enigma, nous allons prsenter
une version trs simplifie de ce protocole afin den expliquer les tapes lmentaires.
Pour changer, nous allons travailler modulo 10. Lorsque lon travaille par blocs, les additions se font bit
par bit. Par exemple : [1 2 3 4] [7 8 9 0] = [8 0 2 4] car (1 + 7 8 (mod 10), 2 + 8 0 (mod 10),...)
Notre message est coup en blocs, pour nos explications ce seront des blocs de longueur 8. La cl est de
longueur 4.
Voici le message (un seul bloc) : M = [1 2 3 4 5 6 7 8] et voici la cl : C = [3 1 3 2].
tape 0. Initialisation. On note M0 = M et on dcoupe M en une partie gauche et une partie droite
M0 = [G 0 k D 0 ] = [1 2 3 4 k 5 6 7 8]
tape 1. Premier tour. On pose
M1 = [D 0 k C (G 0 )]
o est une permutation circulaire.
On effectue donc trois oprations pour passer de M0 M1 :
29
On va recommencer le mme processus. Cela revient appliquer la formule de rcurrence, qui partant
de M i = [G i k D i ], dfinit
M i+1 = [D i k C (G i )]
tape 2. Deuxime tour. On part de M1 = [5 6 7 8 k 5 4 7 3].
1. On change la partie droite et la partie gauche de M0 :
M0 7 [5 4 7 3 k 5 6 7 8]
2. Sur la nouvelle partie droite, on permute circulairement les nombres.
7 [5 4 7 3 k 6 7 8 5]
La cryptographie cl publique
Les Grecs pour envoyer des messages secrets rasaient la tte du messager, tatouaient le message sur
son crne et attendaient que les cheveux repoussent avant denvoyer le messager effectuer sa mission !
Il est clair que ce principe repose uniquement sur le secret de la mthode.
4.1
Le principe de Kerckhoffs
30
Il faut distinguer entre un systme dcriture chiffr, imagin pour un change momentan de lettres entre quelques personnes isoles, et une mthode de cryptographie destine
rgler pour un temps illimit la correspondance des diffrents chefs darme entre eux.
Le principe fondamental est le suivant :
Dans le second cas, [. . . ] il faut que le systme nexige pas le secret, et quil puisse
sans inconvnient tomber entre les mains de lennemi.
Ce principe est novateur dans la mesure o intuitivement il semble opportun de dissimuler le maximum
de choses possibles : cl et systme de chiffrement utiliss. Mais lobjectif vis par Kerckhoffs est plus
acadmique, il pense quun systme dpendant dun secret mais dont le mcanisme est connu de tous
sera test, attaqu, tudi, et finalement utilis sil savre intressant et robuste.
4.2
4.3
multiplication
factorisation
3
4
5
10
50
100
200
9
16
25
100
2 500
10 000
40 000
320
572
934
5 528
2 510 835
115 681 968
14 423 748 780
Il existe bien dautres situations mathmatiques asymtriques : les fonctions sens unique. En
dautres termes, tant donne une fonction f , il est possible connaissant x de calculer facilement
f (x) ; mais connaissant un lment de lensemble image de f , il est difficile ou impossible de trouver
son antcdent.
31
Dans le cadre de la cryptographie, possder une fonction sens unique qui joue le rle de chiffrement
na que peu de sens. En effet, il est indispensable de trouver un moyen efficace afin de pouvoir dchiffrer
les messages chiffrs. On parle alors de fonction sens unique avec trappe secrte.
Prenons par exemple le cas de la fonction f suivante :
f : x 7 x3 (mod 100).
Connaissant x, trouver y = f (x) est facile, cela ncessite deux multiplications et deux divisions.
Connaissant y image par f dun lment x (y = f (x)), retrouver x est difficile.
Tentons de rsoudre le problme suivant : trouver x tel que x3 11 (mod 100).
On peut pour cela :
soit faire une recherche exhaustive, cest--dire essayer successivement 1, 2, 3, ..., 99, on trouve alors :
713 = 357 911 11 (mod 100),
soit utiliser la trappe secrte : y 7 y7 (mod 100) qui fournit directement le rsultat !
117 = 19 487 171 71 (mod 100).
La morale est la suivante : le problme est dur rsoudre, sauf pour ceux qui connaissent la trappe
secrte. (Attention, dans le cas de cet exemple, la fonction f nest pas bijective.)
4.4
Chiffrement cl prive
Petit retour en arrire. Les protocoles tudis dans les chapitres prcdents taient des chiffrements
cl prive. De faon image, tout se passe comme si Bruno pouvaient dposer son message dans un
coffre fort pour Alice, Alice et Bruno tant les seuls possder la cl du coffre.
BRUNO
ALICE
En effet, jusquici, les deux interlocuteurs se partageaient une mme cl qui servait chiffrer (et
dchiffrer) les messages. Cela pose bien sr un problme majeur : Alice et Bruno doivent dabord se
communiquer la cl.
BRUNO
Message M
ALICE
Cl C
Message M
Message crypt X
Chiffrement C
Dchiffrement D
32
4.5
Chiffrement cl publique
Les fonctions sens unique trappe donnent naissance des protocoles de chiffrement cl publique.
Lassociation cl et publique peut paratre incongrue, mais il signifie que le principe de chiffrement
est accessible tous mais que le dchiffrement ncessite une cl quil faut bien sr garder secrte.
BRUNO
ALICE
De faon image, si Bruno veut envoyer un message Alice, il dpose son message dans la bote aux lettres dAlice, seule Alice pourra ouvrir sa bote et consulter le message. Ici la cl publique est symbolise
par la bote aux lettre, tout le monde peut y dposer un message, la cl qui ouvre la bote aux lettres est
la cl prive dAlice, que Alice doit conserver labri.
BRUNO
ALICE
Cl publique
Message M
Cl prive
Message M
Message crypt X
Chiffrement C
Dchiffrement D
En prenant appui sur lexemple prcdent, si le message initial est 71 et que la fonction f de chiffrement
est connue de tous, le message transmis est 11 et le dchiffrement sera rapide si la trappe secrte 7 est
connue du destinataire.
Les paramtres dun protocole de chiffrement cl publique sont donc :
les fonctions de chiffrement et de dchiffrement : C et D ,
la cl publique du destinataire qui va permettre de paramtrer la fonction C ,
la cl prive du destinataire qui va permettre de paramtrer la fonction D .
Dans le cadre de notre exemple Bruno souhaite envoyer un message Alice, ces lments sont :
C : x 7 x? (mod 100) et D : x 7 x? (mod 100),
3 : la cl publique dAlice qui permet de dfinir compltement la fonction de chiffrement :
C : x 7 x3
(mod 100),
(mod 100).
Dans la pratique, un chiffrement cl publique ncessite plus de calculs et est donc assez lent, plus lent
quun chiffrement cl prive. Afin de gagner en rapidit, un protocole hybride peut tre mis en place
de la faon suivante :
laide dun protocole de chiffrement cl publique, Alice et Bruno changent une cl,
Alice et Bruno utilise cette cl dans un protocole de chiffrement cl prive.
33
Pour un entier n, sachant quil est le produit de deux nombres premiers, il est difficile de retrouver les
facteurs p et q tels que n = pq. Le principe du chiffrement RSA, chiffrement cl publique, repose sur
cette difficult.
Dans cette partie nous mettons en place les outils mathmatiques ncessaires pour le calcul des cls
publique et prive ainsi que les procds de chiffrement et dchiffrement RSA.
5.1
34
5.2
Nous avons dj tudi lalgorithme dEuclide qui repose sur le principe que pgcd(a, b) = pgcd(b, a
(mod b)).
Voici sa mise en uvre informatique.
euclide.py (1)
def euclide(a,b):
while b !=0 :
a , b = b , a % b
return a
On profite que Python assure les affectations simultanes, ce qui pour nous correspond aux suites
a i+1
b i+1
bi
ai
(mod b i )
initialise par a 0 = a, b 0 = b.
Nous avons vu aussi comment remonter lalgorithme dEuclide la main pour obtenir les coefficients
de Bzout u, v tels que au + bv = pgcd(a, b). Cependant il nous faut une mthode plus automatique pour
obtenir ces coefficients, cest lalgorithme dEuclide tendu.
On dfinit deux suites (x i ), (yi ) qui vont aboutir aux coefficients de Bzout.
Linitialisation est :
x0 = 1
x1 = 0
y0 = 0
y1 = 1
et la formule de rcurrence pour i 1 :
x i+1 = x i1 q i x i
yi+1 = yi1 q i yi
euclide.py (2)
def euclide_etendu(a,b):
x = 1 ; xx = 0
y = 0 ; yy = 1
while b !=0 :
q = a // b
a , b = b , a % b
xx , x = x - q*xx , xx
yy , y = y - q*yy , yy
return (a,x,y)
Cet algorithme renvoie dabord le pgcd, puis les coefficients u, v tels que au + bv = pgcd(a, b).
5.3
Inverse modulo n
u, v Z
u Z
au + nv = 1
au 1 (mod n)
Voici le code :
euclide.py (3)
def inverse(a,n):
c,u,v = euclide_etendu(a,n)
# pgcd et coeff. de Bzout
if c != 1 :
# Si pgcd diffrent de 1 renvoie 0
return 0
else :
return u % n
# Renvoie l'inverse
5.4
Lexponentiation rapide
Nous aurons besoin de calculer rapidement des puissances modulo n. Pour cela il existe une mthode
beaucoup plus efficace que de calculer dabord a k puis de le rduire modulo n. Il faut garder lesprit
que les entiers que lon va manipuler ont des dizaines voir des centaines de chiffres.
Voyons la technique sur lexemple de 511 (mod 14). Lide est de seulement calculer 5, 52 , 54 , 58 ... et de
rduire modulo n chaque fois. Pour cela on remarque que 11 = 8 + 2 + 1 donc
511 = 58 52 51 .
i
`
X
k i 2i .
i =0
On obtient alors
xk = x
P`
i =0 k i 2
`
Y
(x2 )k i .
i =0
36
Ensuite on calcule 17, 172 , 174 , 178 , ..., 17128 modulo 100.
17 17 (mod 100)
172 17 17 289 89 (mod 100)
174 172 172 89 89 7921 21 (mod 100)
178 174 174 21 21 441 41 (mod 100)
1716 178 178 41 41 1681 81 (mod 100)
1732 1716 1716 81 81 6561 61 (mod 100)
1764 1732 1732 61 61 3721 21 (mod 100)
17128 1764 1764 21 21 441 41 (mod 100)
Il ne reste qu rassembler :
17154 17128 1716 178 172 41 81 41 89 3321 3649 21 49 1029 29 (mod 100)
On en dduit un algorithme pour le calcul rapide des puissances.
puissance.py
def puissance(x,k,n):
puiss = 1
while (k>0):
if k % 2 != 0 :
puiss = (puiss*x) % n
x = x*x % n
k = k // 2
return(puiss)
# Initialisation du rsultat
# Si k est impair (i.e. k_i=1)
# Vaut x, x^2, x^4,...
En fait Python sait faire lexponentiation rapide : pow(x,k,n) pour le calcul de a k modulo n, il faut donc
viter (x ** k) % n qui nest pas adapt.
Le chiffrement RSA
Voici le but ultime de ce cours : la chiffrement RSA. Il est temps de relire lintroduction du chapitre
Arithmtique pour sapercevoir que nous sommes prts !
Pour crypter un message on commence par le transformer en un ou plusieurs
nombres. Les processus de chiffrement et dchiffrement font appel plusieurs notions :
On choisit deux nombres premiers p et q que lon garde secrets et on pose n =
p q. Le principe tant que mme connaissant n il est trs difficile de retrouver p
et q (qui sont des nombres ayant des centaines de chiffres).
La cl secrte et la cl publique se calculent laide de lalgorithme dEuclide
et des coefficients de Bzout.
Les calculs de cryptage se feront modulo n.
Le dchiffrement fonctionne grce une variante du petit thorme de Fermat.
Dans cette section, cest Bruno qui veut envoyer un message secret Alice. La processus se dcompose
ainsi :
1. Alice prpare une cl publique et une cl prive,
2. Bruno utilise la cl publique dAlice pour crypter son message,
3. Alice reoit le message crypt et le dchiffre grce sa cl prive.
37
6.1
38
Cl prive
Alice garde pour elle sa cl prive :
d
Alice dtruit en secret p, q et (n) qui ne sont plus utiles. Elle conserve secrtement sa cl prive.
Exemple 1. d = 13
Exemple 2. d = 8743
6.2
Chiffrement du message
Bruno veut envoyer un message secret Alice. Il se dbrouille pour que son message soit un entier
(quitte dcouper son texte en bloc et transformer chaque bloc en un entier).
Message
Le message est un entier m, tel que 0 m < n.
Exemple 1. Bruno veut envoyer le message m = 10.
Exemple 2. Bruno veut envoyer le message m = 1234.
Message chiffr
Bruno rcupre la cl publique dAlice : n et e avec laquelle il calcule, laide de lalgorithme dexponentiation rapide, le message chiffr :
x m e (mod n)
Il transmet ce message x Alice
Exemple 1. m = 10, n = 85 et e = 5 donc
x me
39
6.3
Dchiffrement du message
Alice reoit le message x chiffr par Bruno, elle le dcrypte laide de sa cl prive d, par lopration :
m x d (mod n)
qui utilise galement lalgorithme dexponentiation rapide.
Nous allons prouver dans le lemme 4, que par cette opration Alice retrouve bien le message original m
de Bruno.
Exemple 1. c = 40, d = 13, n = 85 donc
x d (40)13 (mod 85).
Calculons la main 4013 (mod 85) on note que 13 = 8 + 4 + 1, donc 4013 = 408 404 40.
402 1600 70 (mod 85)
404 (402 )2 702 4900 55 (mod 85)
408 (404 )2 552 3025 50 (mod 85)
Donc
x d 4013 408 404 40 50 55 40 10 (mod 85)
qui est bien le message m de Bruno.
Exemple 2. c = 10 378, d = 8743, n = 10 403. On calcule par ordinateur x d (10 378)8743 (mod 10 403)
qui vaut exactement le message original de Bruno m = 1234.
6.4
Schma
n, e
d
x m e (mod n)
- C
Bruno
?
- D
m x d (mod n)
Alice
Cls dAlice :
publique : n, e
prive : d
6.5
Lemme de dchiffrement
On rappelle que par le petit thorme de Fermat gnralis : lorsque m et n sont premiers entre eux
m(n) m( p1)( q1) 1 (mod n)
Premier cas pgcd(m, n) = 1.
Notons c m e (mod n) et calculons x d :
x d (m e )d m ed m1+k(n) m m k(n) m (m(n) )k m (1)k m (mod n)
Deuxime cas pgcd(m, n) 6= 1.
Comme n est le produit des deux nombres premiers p et q et que m est strictement plus petit que
n alors si m et n ne sont pas premiers entre eux cela implique que p divise m ou bien q divise
m (mais pas les deux en mme temps). Faisons lhypothse pgcd(m, n) = p et pgcd(m, q) = 1, le cas
pgcd(m, n) = q et pgcd(m, p) = 1 se traiterait de la mme manire.
tudions (m e )d la fois modulo p et modulo q limage de ce que nous avons fait dans la preuve du
thorme de Fermat amlior.
modulo p : m 0 (mod p) et (m e )d 0 (mod p) donc (m e )d m (mod p),
modulo q : (m e )d m (m(n) )k m (m q1 )( p1)k m (mod q).
Comme p et q sont deux nombres premiers distincts, ils sont premiers entre eux et on peut crire
comme dans la preuve du petit thorme de Fermat amlior que
(m e )d m (mod n)
6.6
Algorithmes
La mise en uvre est maintenant trs simple. Alice choisit deux nombres premiers p et q et un exposant
e.
Voici le calcul de la cl secrte :
rsa.py (1)
def cle_privee(p,q,e) :
n = p * q
phi = (p-1)*(q-1)
c,d,dd = euclide_etendu(e,phi)
return(d % phi)
Le chiffrement dun message m est possible par tout le monde, connaissant la cl publique (n, e).
rsa.py (2)
def codage_rsa(m,n,e):
return pow(m,e,n)
Seule Alice peut dchiffrer le message crypt x, laide de sa cl prive d.
rsa.py (3)
def decodage_rsa(x,n,d):
return pow(x,d,n)
41
Pour continuer...
Bibliographie commente :
1. Histoire des codes secrets de Simon Singh, Le livre de Poche.
Les codes secrets raconts comme un roman policier. Passionnant. Idal pour les plus littraires.
2. Comprendre les codes secrets de Pierre Vigoureux, dition Ellipses.
Un petit livre trs clair et trs bien crit, qui prsente un panorama complet de la cryptographie
sans rentrer dans les dtails mathmatiques. Idal pour les esprits logiques.
3. Codage et cryptographie de Joan Gmez, dition Le Monde Images des mathmatiques. Un
autre petit livre trs clair et trs bien, un peu de maths, des explications claires et des encarts
historiques intressants.
4. Introduction la cryptographie de Johannes Buchmann, dition Dunod.
Un livre dun niveau avanc (troisime anne de licence) pour comprendre les mthodes mathmatiques de la cryptographie moderne. Idal pour unifier les points de vue des mathmatiques
avec linformatique.
5. Algbre - Premire anne de Liret et Martinais, dition Dunod.
Livre qui recouvre tout le programme dalgbre de la premire anne, trs bien adapt aux tudiants des luniversit. Pas de cryptographie.
Auteurs
Arnaud Bodin
Franois Recher
42
Exo7
Algorithmes et mathmatiques
Vido
Vido
Vido
Vido
Vido
Vido
partie
partie
partie
partie
partie
partie
1.
2.
3.
4.
5.
6.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
44
44
44
46
47
47
47
47
48
49
50
52
53
53
54
56
56
56
56
57
58
60
60
61
61
62
63
64
65
65
65
67
69
69
Dans cette partie on vrifie dabord que Python fonctionne, puis on introduira les boucles (for et while),
le test if ... else ... et les fonctions.
1.1
Hello world !
hello-world.py
>>> a=3
>>> b=6
>>> somme = a+b
>>> print(somme)
9
>>> # Les rsultats
>>> print("La somme est", somme)
La somme est 9
>>> produit = a*b
>>> print("Le produit est", produit)
Le produit est 18
On retient les choses suivantes :
On affecte une valeur une variable par le signe gal =.
On affiche un message avec la fonction print().
Lorsque quune ligne contient un dise #, tout ce qui suit est ignor. Cela permet dinsrer des commentaires, ce qui est essentiel pour relire le code.
Dans la suite on omettra les symboles >>>. Voir plus de dtails sur le fonctionnement en fin de section.
1.2
Travaux pratiques 2.
1. Pour un entier n fix, programmer le calcul de la somme S n = 13 + 23 + 33 + + n3 .
2. Dfinir une fonction qui pour une valeur n renvoie la somme n = 1 + 2 + 3 + + n.
3. Dfinir une fonction qui pour une valeur n renvoie S n .
4. Vrifier, pour les premiers entiers, que S n = (n )2 .
1.
somme-cubes.py (1)
n = 10
somme = 0
for i in range(1,n+1):
somme = somme + i*i*i
print(somme)
44
n( n+1)
2
somme-cubes.py (2)
def somme_entiers(n):
return n*(n+1)/2
Une fonction en informatique est similaire une fonction mathmatique, cest un objet qui prend
en entre des variables (dites variables formelles ou variables muettes, ici n) et retourne une
valeur (un entier, une liste, une chane de caractres,... ici n(n2+1) ).
3. Voici la fonction qui retourne la somme des cubes :
somme-cubes.py (3)
def somme_cubes(n):
somme = 0
for i in range(1,n+1):
somme = somme + i**3
return somme
4. Et enfin on vrifie que pour les premiers entiers S n =
n( n+1)
2
somme-cubes.py (4)
n = 12
if somme_cubes(n) == (somme_entiers(n)**2):
print("Pour n=", n, "l'assertion est vraie.")
else:
print("L'assertion est fausse !")
On retient :
Les puissances se calculent aussi avec ** : 52 scrit 5*5 ou 5**2, 53 scrit 5*5*5 ou 5**3,...
Une fonction se dfinit par def ma_fonction(variable): et se termine par return resultat.
if condition: ... else: ... excute le premier bloc dinstructions si la condition est vraie ; si la
condition est fausse cela excute lautre bloc.
Exemple de conditions
a < b : a < b,
a <= b : a b,
a == b : a = b,
a != b : a 6= b.
Attention ! Il est important de comprendre que a==b vaut soit vraie ou faux (on compare a et b) alors
quavec a=b on affecte dans a la valeur de b.
Enfin en Python (contrairement aux autres langages) cest lindentation (les espaces en dbut de
chaque ligne) qui dtermine les blocs dinstructions.
45
1.3
Calcul de au hasard
Nous allons voir quil est possible de calculer les premires dcimales de par la mthode de MonteCarlo, cest dire avec laide du hasard. On considre le carr de cot 1, le cercle de rayon 1 centr
lorigine, dquation x2 + y2 = 1, et la portion de disque dans le carr (voir la figure).
(0, 1)
(0, 0)
(1, 0)
Travaux pratiques 3.
1. Calculer laire du carr et de la portion de disque.
2. Pour un point (x, y) tir au hasard dans le carr, quelle est la probabilit que le point soit en fait
dans la portion de disque ?
3. Tirer un grand nombre de points au hasard, compter ceux qui sont dans la portion de disque.
4. En dduire les premires dcimales de .
Voici le code :
pi-hasard.py
import random
Tir = 0
NbTirDansLeDisque = 0
# Numro du tir
# Nombre de tirs dans le disque
continue jusqu ce que lon atteigne 999. Pour Tir= 1000 la condition nest plus vraie et le bloc dinstructions du while nest pas excut. On passe aux instructions suivantes pour afficher le rsultat.
chaque tir on teste si on est dans la portion de disque ou pas laide de lingalit x2 + y2 1.
Cette mthode nest pas trs efficace, il faut beaucoup de tirs pour obtenir le deux premires dcimales
de .
1.4
Le plus surprenant avec Python cest que cest lindentation qui dtermine le dbut et la fin dun
bloc dinstructions. Cela oblige prsenter trs soigneusement le code.
Contrairement dautres langages on na pas besoin de dclarer le type de variable. Par exemple
lorsque lon initialise une variable par x=0, on na pas besoin de prciser si x est un entier ou un rel.
Nous travaillerons avec la version 3 (ou plus) de Python, que lon appelle par python ou python3.
Pour savoir si vous avez la bonne version tester la commande 4/3. Si la rponse est 1.3333... alors
tout est ok. Par contre avec les versions 1 et 2 de Python la rponse est 1 (car il considrait que cest
quotient de la division euclidienne de deux entiers).
La premire faon de lancer Python est en ligne de commande, on obtient alors linvite >>> et on tape
les commandes.
Mais le plus pratique est de sauvegarder ses commandes dans un fichier et de faire un appel par
python monfichier.py
Vous trouverez sans problme de laide et des tutoriels sur internet !
1.5
Mini-exercices
2. Que vaut la somme des entiers i qui apparaissent dans linstruction for i in range(1,10).
Idem pour for i in range(11). Idem pour for i in range(1,10,2). Idem pour for i in range(0,10,2).
Idem pour for i in range(10,0,-1).
3. On considre le cube [0, 1] [0, 1] [0, 1] et la portion de boule de rayon 1 centre lorigine incluse
dans ce cube. Faire les calculs de probabilit pour un point tir au hasard dans le cube dtre en
fait dans la portion de boule. Faire une fonction pour le vrifier exprimentalement.
4. On lance deux ds. Exprimenter quelle est la probabilit que la somme soit 7, puis 6, puis
3 ? Quelle est la probabilit que lun des deux ds soit un 6 ? davoir un double ? La fonction
randint(a, b) du module random retourne un entier k au hasard, vrifiant a k b.
5. On lance un d jusqu ce que lon obtienne un 6. En moyenne au bout de combien de lancer
sarrte-t-on ?
Nous allons faire un peu darithmtique : le quotient de la division euclidienne //, le reste % (modulo)
et nous verrons lcriture des entiers en base 10 et en base 2. Nous utiliserons aussi la notion de listes
et le module math.
2.1
et
0r<b
47
Les calculs avec les modulos sont trs pratiques. Par exemple si lon souhaite tester si un entier est pair,
ou impair cela revient un test modulo 2. Le code est if (n%2 == 0): ... else: .... Si on besoin
de calculer cos(n 2 ) alors il faut discuter suivant les valeurs de n%4.
Appliquons ceci au problme suivant :
Travaux pratiques 4. Combien y-a-t-il doccurrences du chiffre 1 dans les nombres de 1 999 ? Par
exemple le chiffre 1 apparat une fois dans 51 mais deux fois dans 131.
nb-un.py
NbDeUn = 0
for N in range(1,999+1):
ChiffreUnite = N % 10
ChiffreDizaine = (N // 10) % 10
ChiffreCentaine = (N // 100) % 10
if (ChiffreUnite == 1):
NbDeUn = NbDeUn + 1
if (ChiffreDizaine == 1):
NbDeUn = NbDeUn + 1
if (ChiffreCentaine == 1):
NbDeUn = NbDeUn + 1
print("Nombre d'occurences du chiffre '1' :", NbDeUn)
Commentaires :
Comment obtient-on le chiffre des units dun entier N ? Cest le reste modulo 10, do linstruction
ChiffreUnite = N % 10.
Comment obtient-on le chiffre des dizaines ? Cest plus dlicat, on commence par effectuer la division
euclidienne de N par 10 (cela revient supprimer le chiffre des units, par exemple si N = 251 alors
N // 10 retourne 25). Il ne reste plus qu calculer le reste modulo 10, (par exemple (N // 10) % 10
retourne le chiffre des dizaines 5.
Pour le chiffre des centaines on divise dabord par 100.
2.2
Lcriture dcimale dun nombre, cest associer un entier N la suite de ses chiffres [a 0 , a 1 , . . . , a n ] de
sorte que a i soit le i-me chiffre de N. Cest--dire
N = a n 10n + a n1 10n1 + + a 2 102 + a 1 10 + a 0
et a i {0, 1, . . . , 9}
a 0 est le chiffre des units, a 1 celui des dizaines, a 2 celui des centaines,...
Travaux pratiques 5.
1. crire une fonction qui partir dune liste [a 0 , a 1 , . . . , a n ] calcule lentier N correspondant.
2. Pour un entier N fix, combien a-t-il de chiffres ? On pourra saider dune ingalit du type 10n
N < 10n+1 .
3. crire une fonction qui partir de N calcule son criture dcimale [a 0 , a 1 , . . . , a n ].
Voici le premier algorithme :
decimale.py (1)
def chiffres_vers_entier(tab):
N = 0
for i in range(len(tab)):
N = N + tab[i] * (10 ** i)
return N
48
decimale.py (2)
def entier_vers_chiffres(N):
tab = []
n = floor(log(N,10)) # le nombre de chiffres est n+1
for i in range(0,n+1):
tab.append((N // 10 ** i) % 10)
return tab
Par exemple entier_vers_chiffres(1234) renvoie le tableau [4, 3, 2, 1]. Nous avons expliqu tout ce
dont nous avions besoin sur les listes au-dessus, expliquons les mathmatiques.
Dcomposons N sous la forme [1, 10[ [10, 100[ [100, 1000[ [1 000, 10 000[ Chaque intervalle
est du type [10n , 10n+1 [. Pour N N il existe donc n N tel que 10n N < 10n+1 . Ce qui indique que
le nombre de chiffres de N est n + 1.
Par exemple si N = 1234 alors 1 000 = 103 N < 104 = 10 000, ainsi n = 3 et le nombre de chiffres est
4.
Comment calculer n partir de N ? Nous allons utiliser le logarithme dcimal log10 qui vrifie
log10 (10) = 1 et log10 (10 i ) = i. Le logarithme est une fonction croissante, donc lingalit 10n N <
10n+1 devient log10 (10n ) log10 (N) < log10 (10n+1 ). Et donc n log10 (N) < n + 1. Ce qui indique donc
que n = E(log10 (N)) o E(x) dsigne la partie entire dun rel x.
2.3
Module math
Quelques commentaires informatiques sur un module important pour nous. Les fonctions mathmatiques ne sont pas dfinies par dfaut dans Python ( part | x| et x n ), il faut faire appel une librairie
spciale : le module math contient les fonctions mathmatiques principales.
49
abs(x)
| x|
x ** n
sqrt(x)
xn
p
x
exp(x)
exp x
log(x)
ln x logarithme nprien
log(x,10)
floor(x)
ceil(x)
Comme on aura souvent besoin de ce module on lappelle par le code from math import *. Cela
signifie que lon importe toutes les fonctions de ce module et quen plus on na pas besoin de prciser
que la fonction vient du module math. On peut crire cos(3.14) au lieu math.cos(3.14).
Dans lalgorithme prcdent nous avions utilis le logarithme dcimal log(x,10), ainsi que la partie
entire floor(x).
2.4
On dispose dune rampe de lumire, chacune des 8 lampes pouvant tre allume (rouge) ou teinte (gris).
On numrote les lampes de 0 7. On souhaite contrler cette rampe : afficher toutes les combinaisons
possibles, faire dfiler une combinaison de la gauche droite (la chenille), inverser ltat de toutes
les lampes,... Voyons comment lcriture binaire des nombres peut nous aider. Lcriture binaire dun
nombre cest son criture en base 2.
Comment calculer un nombre qui est crit en binaire ? Le chiffre des dizaines correspond 2 (au lieu
de 10), le chiffre des centaines 4 = 22 (au lieu de 100 = 102 ), le chiffres des milliers 8 = 23 (au lieu
de 1000 = 103 ),... Pour le chiffre des units cela correspond 20 = 1 (de mme que 100 = 1).
Par exemple 10011b vaut le nombre 19. Car
10011b = 1 24 + 0 23 + 0 22 + 1 21 + 1 20 = 16 + 2 + 1 = 19.
De faon gnrale tout entier N N scrit de manire unique sous la forme
N = a n 2n + a n1 2n1 + + a 2 22 + a 1 2 + a 0
On note alors N = a n a n1 . . . a 1 a 0
et
a i {0, 1}
Travaux pratiques 6.
1. crire une fonction qui partir dune liste [a 0 , a 1 , . . . , a n ] calcule lentier N correspondant lcriture binaire a n a n1 . . . a 1 a 0 b .
2. crire une fonction qui partir de N calcule son criture binaire sous la forme [a 0 , a 1 , . . . , a n ].
La seule diffrence avec la base 10 cest que lon calcule avec des puissances de 2.
50
binaire.py (1)
def binaire_vers_entier(tab):
N = 0
for i in range(len(tab)):
N = N + tab[i] * (2 ** i)
return N
Idem pour le sens inverse o lon a besoin du logarithme en base 2, qui vrifie log2 (2) = 1 et log2 (2 i ) = i.
binaire.py (2)
def entier_vers_binaire(N):
tab = []
n = floor(log(N,2)) # le nombre de chiffres est n+1
for i in range(0,n+1):
tab.append((N // 2 ** i) % 2)
return tab
Maintenant appliquons ceci notre problme de lampes. Si une lampe est allume on lui attribut 1, et
si elle est teinte 0. Pour une rampe de 8 lampes on code [a 0 , a 1 , . . . , a 7 ] ltat des lampes.
Par exemple la configuration suivante :
20
21
22
23
24
25
26
27
binaire.py (3)
def configurations(n):
for N in range(2**(n+1)):
print(entier_vers_binaire_bis(N,n))
51
binaire.py (4)
def decalage(tab):
N = binaire_vers_entier(tab)
n = len(tab)-1 # le nombre de chiffres est n+1
NN = 2*N % 2**(n+1) + 2*N // 2**(n+1)
return entier_vers_binaire_bis(NN,n)
5. On remarque que si lon a deux configurations opposes alors leur somme vaut 2n+1 1 : par exemple avec [1, 0, 0, 1, 0, 1, 1, 1] et [0, 1, 1, 0, 1, 0, 0, 0], les deux nombres associs sont N = 11101001b
et N 0 = 00010110b (il sagit juste de les rcrire de droite gauche). La somme est N + N 0 =
11101001b + 00010110b = 11111111b = 28 1. Laddition en criture binaire se fait de la mme
faon quen criture dcimale et ici il ny a pas de retenue. Si M est un nombre avec n + 1 fois le
chiffres 1 alors M + 1 = 2n+1 . Exemple si M = 11111b alors M + 1 = 100000b = 25 ; ainsi M = 25 1.
Donc loppos de N est N 0 = 2n+1 1 N (remarquez que dans Z/(2n+1 1)Z alors N 0 N).
Cela conduit :
binaire.py (5)
def inversion(tab):
N = binaire_vers_entier(tab)
n = len(tab)-1 # le nombre de chiffres est n+1
NN = 2**(n+1)-1 - N
return entier_vers_binaire_bis(NN,n)
2.5
Mini-exercices
1. Pour un entier n fix, combien y-a-t-il doccurrences du chiffre 1 dans lcriture des nombres de 1
n?
2. crire une fonction qui calcule lcriture dcimale dun entier, sans recourir au log (une boucle
while est la bienvenue).
3. crire un algorithme qui permute cycliquement une configuration de rampe vers la droite.
4. On dispose de n + 1 lampes, chaque lampe peut sclairer de trois couleurs : vert, orange, rouge
(dans cet ordre). Trouver toutes les combinaisons possibles. Comment passer toutes les lampes
la couleur suivante ?
5. Gnrer toutes les matrices 4 4 nayant que des 0 et des 1 comme coefficients. On codera une
matrice sous la forme de lignes [[1, 1, 0, 1], [0, 0, 1, 0], [1, 1, 1, 1], [0, 1, 0, 1]].
52
6. On part du point (0, 0) Z2 . A chaque pas on choisit au hasard un direction Nord, Sud, Est, Ouest.
Si on va au Nord alors on ajoute (0, 1) sa position (pour Sud on ajoute (0, 1) ; pour Est (1, 0) ; pour
Ouest (1, 0)). Pour un chemin dune longueur fixe de n pas, coder tous les chemins possibles.
Caractriser les chemins qui repassent par lorigine. Calculer la probabilit p n de repasser par
lorigine. Que se passe-t-il lorsque n + ?
7. crire une fonction, qui pour un entier N, affiche son criture en chiffres romains : M = 1000,
D = 500, C = 100, X = 10, V = 5, I = 1. Il ne peut y avoir plus de trois symboles identiques
suivre.
Le but de cette section est le calcul des sinus, cosinus, et tangente dun angle par nous mme, avec une
prcision de 8 chiffres aprs la virgule.
3.1
Calcul de Arctan x
Nous aurons besoin de calculer une fois pour toute Arctan(10 i ), pour i = 0, . . . , 8, cest--dire que lon
cherche les angles i ] 2 , 2 [ tels que tan i = 10 i . Nous allons utiliser la formule :
Arctan x =
+
X
k=0
(1)k
x2k+1
x3 x5 x7
= x
+
+
2k + 1
3
5
7
Travaux pratiques 8.
1. Calculer Arctan 1.
2. Calculer i = Arctan 10 i (avec 8 chiffres aprs la virgule) pour i = 1, . . . , 8.
3. Pour quelles valeurs de i, lapproximation Arctan x ' x tait-elle suffisante ?
tangente.py (1)
def mon_arctan(x,n):
somme = 0
for k in range(0,n+1):
if (k%2 == 0): # si k est pair signe +
somme = somme + 1/(2*k+1) * (x ** (2*k+1))
else:
# si k est impair signe somme = somme - 1/(2*k+1) * (x ** (2*k+1))
return somme
La srie qui permet de calculer Arctan x est une somme infinie, mais si x est petit alors chacun
2 k+1
1
des termes (1)k 2xk+1 est trs trs petit ds que
k devient
grand. Par exemple si 0 x 10 alors
2 k+1
x2k+1 1021k+1 et donc pour k 4 nous aurons (1)k 2xk+1 < 109 . Chacun des termes suivants ne
contribue pas aux 8 premiers chiffres aprs la virgule. Attention : il se pourrait cependant que la
somme de beaucoup de termes finissent par y contribuer, mais ce nest pas le cas ici (cest un bon
exercice de le prouver).
Dans la pratique on calcule la somme un certain ordre 2k + 1 jusqu ce que les 8 chiffres aprs
la virgules ne bougent plus. Et en fait on saperoit que lon a seulement besoin dutiliser Arctan x '
3
5
7
x x3 + x5 x7 .
Pour i 4, Arctan x ' x donne dj 8 chiffres exacts aprs la virgule !
On remplit les valeurs des angles i obtenus dans une liste nomme theta.
53
3.2
Calcul de tan x
Le principe est le suivant : on connat un certain nombre dangles avec leur tangente : les angles i
(calculs ci-dessus) avec par dfinition tan i = 10 i . Fixons un angle a [0, 2 ]. Partant du point M0 =
(1, 0), nous allons construire des points M1 , M2 , . . . , M n jusqu ce que M n soit ( peu prs) sur la demiy
droite correspondant langle a. Si M n a pour coordonnes (xn , yn ) alors tan a = xnn . Langle pour passer
dun point M k M k+1 est lun des angles i .
Mn
M n1
M2
M1
i n
i2
i1
M0
Rappelons que si lon a un point M(x, y) alors la rotation centre lorigine et dangle envoie M(x, y)
sur le point N(x0 , y0 ) avec
0
0
x
cos sin x
x = x cos y sin
=
cest--dire
y0
sin cos
y
y0 = x sin + y cos
Pour un point M, on note M 0 le point de la demi-droite [ON) tel que les droites (OM) et (MM 0 ) soient
perpendiculaires en M.
M0
Mn
N
y
tan a ' xn
n
yn
a
M
O
xn
Travaux pratiques 9.
1.
2. Faire une boucle qui dcompose langle a en somme dangles i ( une prcision de 108 ; avec un
minimum dangles, les angles pouvant se rpter).
3. Partant de M0 = (1, 0) calculer les coordonnes des diffrents M k , jusquau point M n (xn , yn ) correy
spondant lapproximation de langle a. Renvoyer la valeur xnn comme approximation de tan a.
Voici les prliminaires mathmatiques :
OM
OM
0
Dans le triangle rectangle OMM 0 on a cos = OM
0 donc OM = cos .
Dautre part comme la rotation dangle conserve les distances alors OM = ON. Si les coordonnes
de M 0 sont (x00 , y00 ) alors x00 = cos1 x0 et y00 = cos1 y0 .
54
Ainsi
Autrement dit :
1
x00
=
tan
y00
tan
1
x
y
Voici une boucle simple pour dcomposer langle : on commence par retirer le plus grand angle 0
autant de fois que lon peut, lorsque ce nest plus possible on passe langle 1 ,...
tangente.py (2)
i = 0
while (a > precision):
while (a < theta[i]):
i = i+1
a = a - theta[i]
Ici precision est la prcision souhait (pour nous 109 ). Et le tableau theta contient les valeurs des
angles i .
x0
1
tan
Posons x0 = 1, y0 = 0 et M0 =
.
. Alors on dfinit par rcurrence M k+1 = P( i ) M k o P( ) =
y0
tan
1
Les i sont ceux apparaissant dans la dcomposition de langle en somme de i , donc on connat tan i =
10 i . Ainsi si lon passe dun point M k M k+1 par un angle i on a simplement :
xk+1 = xk yk 10 i
yk+1 = xk 10 i + yk
La valeur xnn est la tangente de la somme des angles i , donc une approximation de tan a.
Le code est maintenant le suivant.
tangente.py (3)
def ma_tan(a):
precision = 10**(-9)
i = 0 ; x = 1 ; y = 0
while (a > precision):
while (a < theta[i]):
i = i+1
newa = a - theta[i]
newx = x - (10**(-i))*y
newy = (10**(-i))*x + y
x = newx
y = newy
a = newa
return y/x
# on renvoie la tangente
55
Notez quel point les oprations du calcul de tan x sont simples : il ny a quasiment que des additions
effectuer. Par exemple lopration xk+1 = xk yk 10 i peut tre fait la main : multiplier par 10 i
cest juste dcaler la virgule droite de i chiffres, puis on additionne. Cest cet algorithme CORDIC
qui est implment dans les calculatrices, car il ncessite trs peu de ressources. Bien sr, si les
nombres sont cods en binaire on remplace les 10 i par 2 i pour navoir qu faire des dcalages
droite.
3.3
Travaux pratiques 10. Pour 0 x 2 , calculer sin x et cos x en fonction de tan x. En dduire comment
calculer les sinus et cosinus de x.
Solution : On sait cos2 + sin2 x = 1, donc en divisant par cos2 x on trouve 1 + tan2 x =
que pour 0 x 2 cos x = p 1 2 . On trouve de mme sin x = p tan x 2 .
1+tan x
1
.
cos2 x
On en dduit
1+tan x
Donc une fois que lon a calcul tan x on en dduit sin x et cos x par un calcul de racine carre. Attention
cest valide car x est compris entre 0 et 2 . Pour un x quelconque il faut se ramener par les formules
trigonomtriques lintervalle [0, 2 ].
3.4
Mini-exercices
1. On dispose de billets de 1, 5, 20 et 100 euros. Trouvez la faon de payer une somme de n euros
avec le minimum de billets.
2. Faire un programme qui pour nimporte quel x R, calcule sin x, cos x, tan x.
3. Pour t = tan 2x montrer que tan x =
pour x assez petit tan x ' x).
2t
.
1 t 2
4. Modifier lalgorithme de la tangente pour quil calcule aussi directement le sinus et le cosinus.
Les rels
Dans cette partie nous allons voir diffrentes faons de calculer la constante dEuler. Cest un nombre
assez mystrieux car personne ne sait si est un nombre rationnel ou irrationnel. Notre objectif est
davoir le plus de dcimales possibles aprs la virgule en un minimum dtapes. Nous verrons ensuite
comment les ordinateurs stockent les rels et les problmes que cela engendre.
4.1
Constante dEuler
1 1 1
1
+ + ++
1 2 3
n
et dfinissons
u n = H n ln n.
Cette suite (u n ) admet une limite lorsque n + : cest la constante dEuler.
Travaux pratiques 11.
1. Calculer les premires dcimales de . Sachant que u n 21n , combien de dcimales exactes
peut-on esprer avoir obtenues ?
56
euler.py (1)
def euler1(n):
somme = 0
for i in range(n,0,-1):
somme = somme + 1/i
return somme - log(n)
euler.py (2)
def euler2(n):
somme = 0
for i in range(n,0,-1):
somme = somme + 1/i
return somme - log(n+1/2+1/(24*n))
Vous remarquez que la somme est calcule partir de la fin. Nous expliquerons pourquoi en fin de
section.
4.2
Il y a deux techniques pour obtenir plus de dcimales : (i) pousser plus loin les itrations, mais pour
avoir 1000 dcimales de les mthodes prcdentes sont insuffisantes ; (ii) trouver une mthode encore
plus efficace. Cest ce que nous allons voir avec la mthode de Bessel modifie.
Soit
EX
( n) n k 2
EX
( n) n k 2
An
ln n avec A n =
H k et B n =
wn =
Bn
k!
k!
k=1
k=0
o = 3.59112147... est la solution de (ln 1) = 1 et E(x) dsigne la partie entire. Alors
|wn |
C
e4n
euler.py (3)
def euler3(n):
alpha = 3.59112147
N = floor(alpha*n)
# Borne des sommes
A = 0 ; B = 0
H = 0
for k in range(1,N+1):
c = ( (n**k)/factorial(k) ) ** 2
# Coefficient commun
H = H + 1/k
# Somme harmonique
A = A + c*H
B = B + c
return A/B - log(n)
57
C
e4n
1
.
10 N
On ne connat pas C mais ce nest pas si important. Moralement pour une itration de plus
on obtient ( peu prs) une dcimale de plus (cest--dire un facteur 10 sur la prcision !). Pour n 800
on obtient 1000 dcimales exactes de la constante dEuler :
0,
57721566490153286060651209008240243104215933593992
14631447249807082480960504014486542836224173997644
60087352039481656708532331517766115286211995015079
05877553526733139925401296742051375413954911168510
67600172479537836759271351577226102734929139407984
93586796549725203621287922655595366962817638879272
10090151251959509222435014093498712282479497471956
45516989279230187739107294578155431600500218284409
28690001558193988042707411542227819716523011073565
93031005030863034185698032310836916400258929708909
35988057672348848677267776646709369470632917467495
92353625350033374293733773767394279259525824709491
84793745085705740029921354786146694029604325421519
28079842348775872050384310939973613725530608893312
30103417771778088154957066107501016191663340152278
68013243101047650596370394739495763890657296792960
46976318506676129063811051824197444867836380861749
60537724342032854783670151773943987003023703395183
83396734871765049194181230004065469314299929777956
85486825777364288253954925873629596133298574739302
Pour obtenir plus de dcimales que la prcision standard de Python, il faut utiliser le module decimal
qui permet de travailler avec une prcision arbitraire fixe.
4.3
Un peu de ralit
En mathmatique un rel est un lment de R et son criture dcimale est souvent infinie aprs la
virgule : par exemple = 3, 14159265 . . . Mais bien sr un ordinateur ne peut pas coder une infinit
dinformations. Ce qui se rapproche dun rel est un nombre flottant dont lcriture est :
1, 234567890123456789 e
123
|
{z
} | {z }
mantisse
exposant
pour 1, 234 . . . 10123 . La mantisse est un nombre dcimal (positif ou ngatif) appartenant [1, 10[
et lexposant est un entier (lui aussi positif ou ngatif). En Python la mantisse une prcision de 16
chiffres aprs la virgule.
Cette ralit informatique fait que des erreurs de calculs peuvent apparatre mme avec des oprations
simples. Pour voir un exemple de problme faites ceci :
Travaux pratiques 13.
Comme Python est trs prcis nous allons faire une routine qui permet de limiter drastiquement le
nombre de chiffres et mettre en vidence les erreurs de calculs.
Travaux pratiques 14.
1. Calculer lexposant dun nombre rel. Calculer la mantisse.
2. Faire une fonction qui ne conserve que 6 chiffres dun nombre (6 chiffres en tout : avant + aprs la
virgule, exemple 123, 456789 devient 123, 456).
Voici le code :
reels.py (1)
precision = 6
# Nombre de dcimales conserves
def tronquer(x):
n = floor(log(x,10))
# Exposant
m = floor( x * 10 ** (precision-1 - n)) # Mantisse
return m * 10 ** (-precision+1+n)
# Nombre tronqu
Comme on la dj vu auparavant lexposant se rcupre laide du logarithme en base 10. Et pour
tronquer un nombre avec 6 chiffres, on commence par le dcaler vers la gauche pour obtenir 6 chiffres
avant la virgule (123, 456789 devient 123456, 789) il ne reste plus qu prendre la partie entire (123456)
et le redcaler vers la droite (pour obtenir 123, 456).
58
Absorption
Travaux pratiques 15.
1. Calculer tronquer(1234.56 + 0.007).
2. Expliquer.
Chacun des nombres 1234, 56 et 0, 007 est bien un nombre scrivant avec moins de 6 dcimales mais
leur somme 1234, 567 a besoin dune dcimale de plus, lordinateur ne retient pas la 7-me dcimale et
ainsi le rsultat obtenu est 1234, 56. Le 0, 007 napparat pas dans le rsultat : il a t victime dune
absorption.
limination
Travaux pratiques 16.
1. Soient x = 1234, 8777, y = 1212, 2222. Calculer x y la main. Comment se calcule la diffrence
x y avec notre prcision de 6 chiffres ?
2. Expliquer la diffrence.
Comme x y = 22, 6555 qui na que 6 chiffres alors on peut penser que lordinateur va obtenir ce rsultat.
Il nen est rien, lordinateur ne stocke pas x mais tronquer(x), idem pour y. Donc lordinateur effectue
en fait le calcul suivant : tronquer(tronquer(x)-tronquer(y)), il calcule donc 1234, 87 1212, 22 =
22, 65. Quel est le problme ? Cest quensuite lutilisateur considre tort que le rsultat est calcul
avec une prcision de 6 chiffres. Donc on peut penser que le rsultat est 22, 6500 mais les 2 derniers
chiffres sont une pure invention.
Cest un phnomne dlimination. Lorsque lon calcule la diffrence de deux nombres proches, le
rsultat a en fait une prcision moindre. Cela peut tre encore plus dramatique avec lexemple =
1234, 569 1234, 55 la diffrence est 0, 01900 alors que lordinateur retournera 0, 01000. Il y a presque
un facteur deux, et on aura des problmes si lon a besoin de diviser par .
Signalons au passage une erreur dinterprtation frquente : ne pas confondre la prcision daffichage
(exemple : on calcule avec 10 chiffres aprs la virgule) avec lexactitude du rsultat (combien de dcimales sont vraiment exactes ?).
Conversion binaire dcimale
Enfin le problme le plus troublant est que les nombres flottants sont stocks en criture binaire et pas
en criture dcimale.
Travaux pratiques 17.
1. sum = 0 puis for i in range(10): sum = sum + 0.1. Que vaut sum ?
2. 0.1 + 0.1 == 0.2
et
59
4.4
1
12
2. Faire une fonction qui calcule cette somme mais en utilisant seulement une criture dcimale 6
chiffres ( laide de la fonction tronquer() vue au-dessus).
3. Reprendre cette dernire fonction, mais en commenant la somme par les plus petits termes.
4. Comparez le deux dernires mthodes, justifier et conclure.
La premire fonction ne pose aucun problme et utilise toute la prcision de Python.
Dans la seconde on doit, chaque calcul, limiter notre prcision 6 chiffres (ici 1 avant la virgule et 5
aprs).
reels.py (2)
def somme_inverse_carres_tronq(n):
somme = 0
for i in range(1,n+1):
somme = tronquer(somme + tronquer(1/(i*i)))
return somme
Il est prfrable de commencer la somme par la fin :
reels.py (3)
def somme_inverse_carres_tronq_inv(n):
somme = 0
for i in range(n,0,-1):
somme = tronquer(somme + tronquer(1/(i*i)))
return somme
Par exemple pour n = 100 000 lalgorithme somme_inverse_carres_tronq() (avec criture tronque,
somm dans lordre) retourne 1, 64038 alors que lalgorithme somme_inverse_carres_tronq_inv()
(avec la somme dans lordre inverse) on obtient 1, 64490. Avec une prcision maximale et n trs grand
2
on doit obtenir 1, 64493 . . . (en fait cest 6 ).
Notez que faire grandir n pour lalgorithme somme_inverse_carres_tronq() ny changera rien, il
bloque 2 dcimales exactes aprs la virgule : 1, 64038 ! La raison est un phnomne dabsorption :
on rajoute des termes trs petits devant une somme qui vaut plus de 1. Alors que si lon part des termes
petits, on ajoute des termes petits une somme petite, on garde donc un maximum de dcimales valides
avant de terminer par les plus hautes valeurs.
4.5
Mini-exercices
1. crire une fonction qui approxime la constante qui vrifie (ln 1) = 1. Pour cela poser f (x) =
x(ln x 1) 1 et appliquer la mthode de Newton : fixer u 0 (par exemple ici u 0 = 4) et u n+1 =
f (u )
u n f 0 (unn ) .
2. Pour chacune des trois mthodes, calculer le nombre approximatif ditrations ncessaires pour
obtenir 100 dcimales de la constante dEuler.
P
An
Cn
k)!]3
1
3. Notons C n = 41n 2kn=0 (k!)[(2
4 (16 n)2 k . La formule de Brent-McMillan affirme = B B2 ln n + O( e8 n )
n
n
o cette fois les sommations pour A n et B n vont jusqu E( n) avec = 4, 970625759 . . . la solution
de (ln 1) = 3. La notation O( e18n ) indique que lerreur est eC8n pour une certaine constante
C. Mettre en uvre cette formule. En 1999 cette formule a permis de calculer 100 millions de
dcimales. Combien a-t-il fallu ditrations ?
60
1
3
et u n+1 = 4u n 1. Que
Nous allons prsenter quelques algorithmes lmentaires en lien avec larithmtique. Nous en profitons
pour prsenter une faon compltement diffrente dcrire des algorithmes : les fonctions rcursives.
5.1
Algorithmes rcursifs
recursif.py (1)
def factorielle_classique(n):
produit = 1
for i in range(1,n+1):
produit = i * produit
return produit
Voyons comment fonctionne cette boucle. On initialise la variable produit 1, on fait varier un indice i
de 1 n. chaque tape on multiplie produit par i et on affecte le rsultat dans produit. Par exemple
si n = 5 alors la variable produit sinitialise 1, puis lorsque i varie la variable produit devient 1 1 = 1,
2 1 = 2, 3 2 = 6, 4 6 = 24, 5 24 = 120. Vous avez bien sr reconnus le calcul de 5!
tudions un autre algorithme.
recursif.py (2)
def factorielle(n):
if (n==1):
return 1
else:
return n * factorielle(n-1)
Que fait cet algorithme ? Voyons cela pour n = 5. Pour n = 5 la condition du si (if) nest pas vrifie donc
on passe directement au sinon (else). Donc factorielle(5) renvoie comme rsultat : 5 * factorielle(4).
On a plus ou moins progress : le calcul nest pas fini car on ne connat pas encore factorielle(4) mais
on sest ramen un calcul au rang prcdent, et on itre :
et
u n = n u n1 si n 2.
recursif.py (3)
def fibonacci(n):
if (n==0) or (n==1):
return 1
else:
return fibonacci(n-1)+fibonacci(n-2)
Faites-le calcul de fibonacci(5). Voici la version mathmatique des nombres de Fibonacci.
F0 = 1, F1 = 1
F n = F n1 + F n2
et
si n 2.
5.2
13
21
34
...
Lalgorithme dEuclide
arith.py (1)
def pgcd(a,b):
if a%b == 0:
return b
else:
return pgcd(b, a%b)
Deux entiers a, b sont premiers entre eux ssi pgcd(a, b) = 1, donc voici lalgorithme :
arith.py (2)
def nb_premiers_entre_eux(n,nbtirages):
i = 1
nbpremiers = 0
while i <= nbtirages:
i = i+1
a = random.randint(1,n)
b = random.randint(1,n)
if pgcd(a,b)==1:
nbpremiers = nbpremiers + 1
return nbpremiers
62
On tire au hasard deux entiers a et b entre 1 et n et on effectue cette opration nbtirages fois. Par exemple entre 1 et 1000 si lon effectue 10 000 tirage on trouve une probabilit mesure par nbpremiers/nbtirages
de 0, 60 . . . (les dcimales daprs dpendent des tirages).
Lorsque n tend vers + alors p n 62 = 0.607927 . . . et on dit souvent que : la probabilit que deux
entiers tirs au hasard soient premiers entre eux est 62 .
Commentaires sur les algorithmes rcursifs :
Les algorithmes rcursifs ont souvent un code trs court, et proche de la formulation mathmatique
lorsque lon a une relation de rcurrence.
Selon le langage ou la fonction programme il peut y avoir des problmes de mmoire (si par exemple
pour calculer 5! lordinateur a besoin de stocker 4! pour lequel il a besoin de stocker 3!...).
Il est important de bien rflchir la condition initiale (qui est en fait celle qui termine lalgorithme)
et la rcurrence sous peine davoir une fonction qui boucle indfiniment !
Il nexiste pas des algorithmes rcursifs pour tout (voir par exemple les nombres premiers) mais ils
apparaissent beaucoup dans les algorithmes de tris. Autre exemple : la dichotomie se programme trs
bien par une fonction rcursive.
5.3
Nombres premiers
Les nombres premiers offrent peu de place aux algorithmes rcursifs car il ny a pas de lien de rcurrence
entre les nombres premiers.
Travaux pratiques 20.
1. crire une fonction qui dtecte si un nombre n est premier ou pas en testant sil existe des entiers
p
k qui divise n. (On se limitera aux entiers 2 k n, pourquoi ?).
2. Faire un algorithme pour le crible dEratosthne : crire tous les entiers de 2 n, conserver 2 (qui
est premier) et barrer tous les multiples suivants de 2. Le premier nombre non barr (cest 3) est
premier. Barrer tous les multiples suivants de 3,...
3. Dessiner la spirale dUlam : on place les nombres entiers en spirale, et on colorie en rouge les
nombres premiers.
..
5 4 3
.
6 1
7 8
2
9
11
10
p
p
1. Si n nest pas premier alors n = a b avec a, b 2. Il est clair que soit a n ou bien b n (sinon
p
n = a b > n). Donc il suffit de tester les diviseurs 2 k n. Do lalgorithme :
arith.py (3)
def est_premier(n):
if (n<=1): return False
k = 2
while k*k <= n:
if n%k==0:
return False
else:
k = k +1
return True
Notez quil vaut mieux crire la condition k*k <= n plutt que k <= sqrt(n) : il est beaucoup
plus rapide de calculer le carr dun entier plutt quextraire une racine carre.
Nous avons utilis un nouveau type de variable : un boolen est une variable qui ne peut prendre
que deux tats Vrai ou Faux (ici True or False, souvent cod 1 et 0). Ainsi est_premier(13)
renvoie True, alors que est_premier(14) renvoie False.
63
2. Pour le crible dEratosthne le plus dur est de trouver le bon codage de linformation.
arith.py (4)
def eratosthene(n):
liste_entiers = list(range(n+1)) # tous les entiers
liste_entiers[1] = 0
# 1 n'est pas premier
k = 2
# on commence par les multiples de 2
while k*k <= n:
if liste_entiers[k] != 0: # si le nombre k n'est pas barr
i = k
# les i sont les multiples de k
while i <= n-k:
i = i+k
liste_entiers[i] = 0 # multiples de k : pas premiers
k = k +1
liste_premiers = [k for k in liste_entiers if k !=0] # efface les 0
return liste_premiers
Ici on commence par faire un tableau contenant les entiers [0,1,2,3,4,5,6,7,8,9,10,11,12,13,...].
Pour signifier quun nombre nest pas premier ou remplace lentier par 0. Comme 1 nest pas un
nombre premier : on le remplace par 0. Puis on fait une boucle, on part de 2 et on remplace tous les
autres multiples de 2 par 0 : la liste est maintenant : [0,0,2,3,0,5,0,7,0,9,0,11,0,13,...].
Le premiers nombre aprs 2 est 3 cest donc un nombre premier. (car sil na aucun diviseur autre
que 1 et lui-mme car sinon il aurait t ray). On garde 3 et remplace tous les autres multiples
de 3 par 0. La liste est maintenant : [0,0,2,3,0,5,0,7,0,0,0,11,0,13,...]. On itre ainsi,
la fin on efface les zros pour obtenir : [2,3,5,7,11,13,...].
3. Pour la spirale dUlam la seule difficult est de placer les entiers sur une spirale, voici le rsultat.
gauche le dbut de la spirale (de n = 1 37) en rouge les nombres premiers (en noir les nombres
non premiers) ; droite le motif obtenu jusqu de grandes valeurs (en blanc les nombres non
premiers).
5.4
Mini-exercices
1. crire une version itrative et une version rcursive pour les fonctions suivantes : (a) la somme
des carrs des entiers de 1 n ; (b) 2n (sans utiliser dexposant) ; (c) la partie entire dun rel
x 0 ; (d) le quotient de la division euclidienne de a par b (avec a N, b N ) ; (e) le reste de cette
division euclidienne (sans utiliser les commandes % ni //).
64
1
2
placer les coefficients pairs par un carr blanc et les coefficients impairs par un carr rouge).
Quelle figure reconnaissez-vous ?
Nous allons tudier la complexit des algorithmes travers lexemple des polynmes.
6.1
Quest ce quun algorithme ? Un algorithme est une succession dinstructions qui renvoie un rsultat.
Pour tre vraiment un algorithme on doit justifier que le rsultat retourn est exact (le programme fait
bien ce que lon souhaite) et ceci en un nombre fini dtapes (cela renvoie le rsultat en temps fini).
Maintenant certains algorithmes peuvent tre plus rapides que dautres. Cest souvent le temps de calcul qui est le principal critre, mais cela dpend du langage et de la machine utilise. Il existe une
manire plus mathmatique de faire : la complexit dun algorithme cest le nombre doprations lmentaires effectuer.
Ces oprations peuvent tre le nombre doprations au niveau du processeur, mais pour nous ce sera le
nombre dadditions +, le nombre de multiplications effectuer. Pour certains algorithmes la vitesse
dexcution nest pas le seul paramtre mais aussi la taille de la mmoire occupe.
6.2
Polynmes
polynome.py (1)
def somme(A,B):
# si deg(A)=deg(B)
C = []
for i in range(0,degre(A)+1):
s = A[i]+B[i]
C.append(s)
65
Calculons sa complexit, on suppose deg A n et deg B n : il faut faire laddition des coefficients
a i + b i , pour i variant de 0 n : donc la complexit est de n + 1 additions (dans Z ou R).
P
Pn
i
j
2. Pour le produit il faut se rappeler que si A(X ) = m
i =0 a i X , B(X ) =
j =0 b j X et C = A B =
P m+ n
P
c X k alors le k-me coefficient de C est c k = i+ j=k a i b j . Dans la pratique on fait attention
k=0 k
de ne pas accder des coefficients qui nont pas t dfinis.
polynome.py (2)
def produit(A,B):
C = []
for k in range(degre(A)+degre(B)+1):
s = 0
for i in range(k+1):
if (i <= degre(A)) and (k-i <= degre(B)):
s = s + A[i]*B[k-i]
C.append(s)
return C
Pour la complexit on commence par compter le nombre de multiplications (dans Z ou R). Notons
m = deg A et n = deg B. Alors il faut multiplier les m + 1 coefficients de A par les n + 1 coefficients
de B : il y a donc (m + 1)(n + 1) multiplications.
Comptons maintenant les additions : les coefficients de A B sont : c 0 = a 0 b 0 , c 1 = a 0 b 1 + a 1 b 0 ,
c 2 = a 2 b 0 + a 1 b 1 + a 2 b 0 ,...
Nous utilisons lastuce suivante : nous savons que le produit A B est de degr m + n donc a
(au plus) m + n + 1 coefficients. Partant de (m + 1)(n + 1) produits, chaque addition regroupe deux
termes, et nous devons arriver m + n + 1 coefficients. Il y a donc (m + 1)(n + 1) (m + n + 1) = mn
additions.
3. Pour la division euclidienne, le principe est de poser une division de polynme. Par exemple pour
A = 2X 4 X 3 2X 2 + 3X 1 et B = X 2 X + 1.
2X 4 X 3 2X 2 + 3X 1
X2 X +1
2X 4 2X 3 + 2X 2
X 3 4X 2 + 3X 1
2X 2 + X 3
X3 X2 + X
3X 2 + 2X 1
3X 2 + 3X 3
X + 2
Alors on cherche quel monme P1 fait diminuer le degr de A P1 B, cest 2X 2 (le coefficient 2 est
le coefficient dominant de A). On pose ensuite R 1 = A P1 B = X 3 4X 2 + 3X 1, Q 1 = 2X 2 , on
recommence avec R 1 divis par B, R 2 = R 1 P2 B avec P2 = X , Q 2 = Q 1 + P2 ,... On arrte lorsque
deg R i < deg B.
66
polynome.py (3)
def division(A,B):
Q = [0]
# Quotient
R = A
# Reste
while (degre(R) >= degre(B)):
P = monome(R[degre(R)],degre(R)-degre(B))
R = somme(R,produit(-P,B))
Q = somme(Q,P)
return Q,R
Cest une version un peu simplifie du code : o P = r n X deg R deg B et o il faut remplacer P par
[a 0 , a 1 , ...]. Si A, B Z[X ] alors le fait que B soit unitaire implique que Q et R sont aussi
coefficients entiers.
Quelle est la complexit de la division euclidienne ? chaque tape on effectue une multiplication
de polynmes (P i B) puis une addition de polynme (R i P i B) ; chaque tape le degr de R i
diminue (au moins) de 1. Donc il y a au plus deg A deg B + 1 tapes.
Mais dans la pratique cest plus simple que cela. La multiplication P i B est trs simple : car P i
est un monme P i = p i X i . Multiplier par X i cest juste un dcalage dindice (comme multiplier
par 10 i en criture dcimale) cest donc une opration ngligeable. Il reste donc multiplier les
coefficients de B par p i : il y a donc deg B + 1 multiplications de coefficients. La soustraction
aussi est assez simple on retire R i un multiple de B, donc on a au plus deg B + 1 coefficients
soustraire : il y a chaque tape deg B + 1 additions de coefficients.
Bilan : si m = deg A et n = deg B alors la division euclidienne seffectue en au plus (m n + 1)(m + 1)
multiplications et le mme nombre dadditions (dans Z ou R).
6.3
Algorithme de Karatsuba
Pour diminuer la complexit de la multiplication de polynmes, on va utiliser un paradigme trs classique de programmation : diviser pour rgner . Pour cela, on va dcomposer les polynmes multiplier
P et Q de degrs strictement infrieurs 2n en
P = P1 + P2 X n
et
Q = Q1 + Q2 X n
polynome.py (4)
def decoupe(P,n):
if (degre(P)<n): return P, [0]
else: return P[0:n], P[n:]
On a aussi besoin dune fonction produit_monome(P,n) qui renvoie le polynme X n P par un
dcalage. Voici la multiplication proprement dite avec les appels rcursifs et leur combinaison.
polynome.py (5)
def produit_assez_rapide(P,Q):
p = degre(P) ; q = degre(Q)
if (p == 0): return [P[0]*k for k in Q]
if (q == 0): return [Q[0]*k for k in P]
n = (max(p,q)+1)//2
P1,P2 = decoupe(P,n)
Q1,Q2 = decoupe(Q,n)
P1Q1 = produit_assez_rapide(P1,Q1)
P2Q2 = produit_assez_rapide(P2,Q2)
P1Q2 = produit_assez_rapide(P1,Q2)
P2Q1 = produit_assez_rapide(P2,Q1)
R1 = produit_monome(somme(P1Q2,P2Q1),n)
R2 = produit_monome(P2Q2,2*n)
return somme(P1Q1,somme(R1,R2))
#
#
#
#
# dcalages
# sommes
La relation de rcurrence qui exprime la complexit de cet algorithme est C(n) = 4C(n/2) + O(n) et
elle se rsout en C(n) = O(n2 ). Voir la question suivante pour une mthode de rsolution.
3.
polynome.py (6)
def produit_rapide(P,Q):
p = degre(P) ; q = degre(Q)
if (p == 0): return [P[0]*k for k in Q] # Condition initiale: P=cst
if (q == 0): return [Q[0]*k for k in P] # Condition initiale: Q=cst
n = (max(p,q)+1)//2
# demi-degr
P1,P2 = decoupe(P,n)
# decoupages
Q1,Q2 = decoupe(Q,n)
P1Q1 = produit_rapide(P1,Q1)
# produits en petits degrs
P2Q2 = produit_rapide(P2,Q2)
PQ = produit_rapide(somme(P1,P2),somme(Q1,Q2))
R1 = somme(PQ,somme([-k for k in P1Q1],[-k for k in P2Q2]))
R1 = produit_monome(R1,n)
# dcalages
R2 = produit_monome(P2Q2,2*n)
return somme(P1Q1,somme(R1,R2))
# sommes
68
4. Notons C(n) la complexit de la multiplication entre deux polynmes de degrs strictement infrieurs n. En plus des trois appels rcursifs, il y a des oprations linaires : deux calculs de
degrs, deux dcoupes en n/2 puis des additions : deux de taille n/2, une de taille n, une de taille
3n/2 et une de taille 2n. On obtient donc la relation de rcurrence suivante :
C(n) = 3 C(n/2) + n
`
C (2 )
o = 15
2 . Une mthode de rsolution est de poser ` = 3` qui vrifie ` = `1 +
tire, puisque 0 = C(1) = 1,
`+1 !
` 2 k
X
2
+1
` =
+ 0 = 3 1
3
k=1 3
2 `
3
. Do on
puis pour n = 2` :
ln 3
ln 3
6.4
Voici quelques petites astuces pour acclrer lcriture ou la vitesse des algorithmes :
k ** 3 au lieu de k * k * k (cela conomise de la mmoire, une seule variable au lieu de 3) ;
k ** 2 <= n au lieu de k <= sqrt(n) (les calculs avec les entiers sont beaucoup plus rapides quavec
les rels) ;
x += 1 au lieu de x = x +1 (gain de mmoire) ;
a,b = a+b, a-b au lieu de newa = a+b ; newb = a-b ; a = newa ; b = newb (gain de mmoire,
code plus court).
Cependant il ne faut pas que cela nuise la lisibilit du code : il est important que quelquun puisse
relire et modifier votre code. Le plus souvent cest vous mme qui modifierez les algorithmes qui vous
avez crits et vous serez ravi dy trouver des commentaires clairs et prcis !
6.5
Mini-exercices
n1
n
x0 R : P(x0 ) = a 0 + a 1 x0 + + a n1 x0 + a n x0 et P(x0 ) = a 0 + x0 a 1 + x0 a 2 + + x0 (a n1 + a n x0 )
(mthode de Horner).
3. Comment trouver le maximum dune liste ? Montrer que votre mthode est de complexit minimale (en terme du nombre de comparaisons).
4. Soit f : [a, b] R une fonction continue vrifiant f (a) f (b) 0. Combien ditrations de la mthode
de dichotomie sont ncessaires pour obtenir une racine de f (x) = 0 avec une prcision infrieure
?
5. Programmer plusieurs faons de calculer les coefficients du binme de Newton nk et les comparer.
6. Trouver une mthode de calcul de 2n qui utilise peu de multiplications. On commencera par crire
n en base 2.
Auteurs
Rdaction : Arnaud Bodin
Relecture : Jean-Franois Barraud
Remerciements Lionel Rieg pour son tp sur lalgorithme de Karatsuba
69
Deuxime partie
70
Exo7
Logique et raisonnements
Logique . . . . . . . . . . . .
1.1
Assertions . . . . . . .
1.2
Quantificateurs . . .
1.3
Mini-exercices . . . .
Raisonnements . . . . . . .
2.1
Raisonnement direct
2.2
Cas par cas . . . . . .
2.3
Contrapose . . . . . .
2.4
Absurde . . . . . . . .
2.5
Contre-exemple . . .
2.6
Rcurrence . . . . . .
2.7
Mini-exercices . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
72
72
74
76
76
76
76
77
77
77
77
78
Quelques motivations
Il est important davoir un langage rigoureux. La langue franaise est souvent ambige. Prenons
lexemple de la conjonction ou ; au restaurant fromage ou dessert signifie lun ou lautre mais
pas les deux. Par contre si dans un jeu de carte on cherche les as ou les curs alors il ne faut pas
exclure las de cur. Autre exemple : que rpondre la question As-tu 10 euros en poche ? si lon
dispose de 15 euros ?
Il y a des notions difficiles expliquer avec des mots : par exemple la continuit dune fonction est
souvent explique par on trace le graphe sans lever le crayon . Il est clair que cest une dfinition peu
satisfaisante. Voici la dfinition mathmatique de la continuit dune fonction f : I R en un point
x0 I :
> 0 > 0 x I (| x x0 | < = | f (x) f (x0 )| < ).
Cest le but de ce chapitre de rendre cette ligne plus claire ! Cest la logique.
Enfin les mathmatiques tentent de distinguer le vrai du faux. Par exemple Est-ce quune augmentation de 20%, puis de 30% est plus intressante quune augmentation de 50% ? . Vous pouvez
penser oui ou non , mais pour en tre sr il faut suivre une dmarche logique qui mne la
conclusion. Cette dmarche doit tre convaincante pour vous mais aussi pour les autres. On parle de
raisonnement.
Les mathmatiques sont un langage pour sexprimer rigoureusement, adapt aux phnomnes complexes, qui rend les calculs exacts et vrifiables. Le raisonnement est le moyen de valider ou dinfirmer
une hypothse et de lexpliquer autrui.
71
1
1.1
Logique
Assertions
Une assertion est une phrase soit vraie, soit fausse, pas les deux en mme temps.
Exemples :
Il pleut.
Je suis plus grand que toi.
2+2 = 4
23 = 7
Pour tout x R, on a x2 0.
Pour tout z C, on a | z| = 1.
Si P est une assertion et Q est une autre assertion, nous allons dfinir de nouvelles assertions construites partir de P et de Q.
Loprateur logique et
Lassertion P et Q est vraie si P est vraie et Q est vraie. Lassertion P et Q est fausse sinon.
On rsume ceci en une table de vrit :
P \Q
V
F
V
V
F
F
F
F
V
V
V
F
V
F
V
F
F
V
72
Limplication =
La dfinition mathmatique est la suivante :
Lassertion (non P) ou Q est note P = Q .
Sa table de vrit est donc la suivante :
P \Q
V
F
V
V
V
F
F
V
V
V
F
F
F
V
6. P et (Q ou R) (P et Q) ou (P et R)
7. P ou (Q et R) (P ou Q) et (P ou R)
73
8. P = Q non(Q) = non(P)
Dmonstration. Voici des exemples de dmonstrations :
4. Il suffit de comparer les deux assertions non(P et Q) et (non P) ou (non Q) pour toutes les
valeurs possibles de P et Q. Par exemple si P est vrai et Q est vrai alors P et Q est vrai donc
non(P et Q) est faux ; dautre part (non P) est faux, (non Q) est faux donc (non P) ou (non Q) est
faux. Ainsi dans ce premier cas les assertions sont toutes les deux fausses. On dresse ainsi les deux
tables de vrits et comme elles sont gales les deux assertions sont quivalentes.
P \Q
V
F
V
F
V
F
V
V
V
V
V
Q\R
V
F
F
V
F
V
F
F
F
F
F
1.2
Quantificateurs
P(x)
est une assertion vraie lorsque lon peut trouver au moins un x de E pour lequel P(x) est vraie. On lit
il existe x appartenant E tel que P(x) (soit vraie) .
Par exemple :
x R (x(x 1) < 0) est vraie (par exemple x = 21 vrifie bien la proprit).
n N n2 n > n est vraie (il y a plein de choix, par exemple n = 3 convient, mais aussi n = 10 ou
mme n = 100, un seul suffit pour dire que lassertion est vraie).
x R (x2 = 1) est fausse (aucun rel au carr ne donnera un nombre ngatif).
74
P(x) est x E
non P(x) .
P(x) est x E
non P(x) .
y > 0
(x + y > 10)
x R
y > 0
(x + y 10).
sa ngation est
Remarques
Lordre des quantificateurs est trs important. Par exemple les deux phrases logiques
x R
y R
(x + y > 0)
et
y R
x R
(x + y > 0).
sont diffrentes. La premire est vraie, la seconde est fausse. En effet une phrase logique se lit de gauche
droite, ainsi la premire phrase affirme Pour tout rel x, il existe un rel y (qui peut donc dpendre de
x) tel que x + y > 0. (par exemple on peut prendre y = x + 1). Cest donc une phrase vraie. Par contre la
deuxime se lit : Il existe un rel y, tel que pour tout rel x, x + y > 0. Cette phrase est fausse, cela ne
peut pas tre le mme y qui convient pour tous les x !
On retrouve la mme diffrence dans les phrases en franais suivantes. Voici une phrase vraie Pour
toute personne, il existe un numro de tlphone , bien sr le numro dpend de la personne. Par contre
cette phrase est fausse : Il existe un numro, pour toutes les personnes . Ce serait le mme numro
pour tout le monde !
Terminons avec dautres remarques.
Quand on crit x R ( f (x) = 0) cela signifie juste quil existe un rel pour lequel f sannule. Rien
ne dit que ce x est unique. Dans un premier temps vous pouvez lire la phrase ainsi : il existe au
moins un rel x tel que f (x) = 0 . Afin de prciser que f sannule en une unique valeur, on rajoute un
point dexclamation :
! x R ( f (x) = 0).
Pour la ngation dune phrase logique, il nest pas ncessaire de savoir si la phrase est fausse ou vraie.
Le procd est algorithmique : on change le pour tout en il existe et inversement, puis on prend
la ngation de lassertion P.
Pour la ngation dune proposition, il faut tre prcis : la ngation de lingalit stricte < est lingalit large , et inversement.
Les quantificateurs ne sont pas des abrviations. Soit vous crivez une phrase en franais : Pour
tout rel x, si f (x) = 1 alors x 0. , soit vous crivez la phrase logique :
x R
( f (x) = 1 = x 0).
Mais surtout ncrivez pas x rel, si f (x) = 1 = x positif ou nul . Enfin, pour passer dune ligne
lautre dun raisonnement, prfrez plutt donc = .
Il est dfendu dcrire 6 , 6= . Ces symboles nexistent pas !
75
1.3
Mini-exercices
1. crire la table de vrit du ou exclusif . (Cest le ou dans la phrase fromage ou dessert , lun
ou lautre mais pas les deux.)
2. crire la table de vrit de non (P et Q) . Que remarquez vous ?
3. crire la ngation de P = Q .
4. Dmontrer les assertions restantes de la proposition 9.
5. crire la ngation de P et (Q ou R) .
6. crire laide des quantificateurs la phrase suivante : Pour tout nombre rel, son carr est positif . Puis crire la ngation.
7. Mmes questions avec les phrases : Pour chaque rel, je peux trouver un entier relatif tel que leur
produit soit strictement plus grand que 1 . Puis Pour tout entier n, il existe un unique rel x tel
que exp(x) gale n .
Raisonnements
2.1
Raisonnement direct
On veut montrer que lassertion P = Q est vraie. On suppose que P est vraie et on montre qualors
Q est vraie. Cest la mthode laquelle vous tes le plus habitu.
Exemple 19. Montrer que si a, b Q alors a + b Q.
Dmonstration. Prenons a Q, b Q. Rappelons que les rationnels Q sont lensemble des rels scrivant
p
q avec p Z et q N .
Alors a =
p
q
p0
q0
avec p0 Z et q0 N . Maintenant
p p0 pq0 + q p0
+
=
.
q q0
qq0
Or le numrateur pq0 + q p0 est bien un lment de Z ; le dnominateur qq0 est lui un lment de N .
p00
Donc a + b scrit bien de la forme a + b = q00 avec p00 Z, q00 N . Ainsi a + b Q.
2.2
Si lon souhaite vrifier une assertion P(x) pour tous les x dans un ensemble E, on montre lassertion
pour les x dans une partie A de E, puis pour les x nappartenant pas A. Cest la mthode de disjonction ou du cas par cas.
Exemple 20. Montrer que pour tout x R, | x 1| x2 x + 1.
Dmonstration. Soit x R. Nous distinguons deux cas.
Premier cas : x 1. Alors | x 1| = x 1. Calculons alors x2 x + 1 | x 1|.
x2 x + 1 | x 1| = x2 x + 1 (x 1)
= x2 2x + 2
= (x 1)2 + 1 0.
2.3
Contrapose
Le raisonnement par contraposition est bas sur lquivalence suivante (voir la proposition 9) :
Lassertion P = Q est quivalente non(Q) = non(P) .
Donc si lon souhaite montrer lassertion P = Q , on montre en fait que si non(Q) est vraie alors
non(P) est vraie.
Exemple 21. Soit n N. Montrer que si n2 est pair alors n est pair.
Dmonstration. Nous supposons que n nest pas pair. Nous voulons montrer qualors n2 nest pas pair.
Comme n nest pas pair, il est impair et donc il existe k N tel que n = 2k + 1. Alors n2 = (2k + 1)2 =
4k2 + 4k + 1 = 2` + 1 avec ` = 2k2 + 2k N. Et donc n2 est impair.
Conclusion : nous avons montr que si n est impair alors n2 est impair. Par contraposition ceci est
quivalent : si n2 est pair alors n est pair.
2.4
Absurde
Le raisonnement par labsurde pour montrer P = Q repose sur le principe suivant : on suppose
la fois que P est vraie et que Q est fausse et on cherche une contradiction. Ainsi si P est vraie alors Q
doit tre vraie et donc P = Q est vraie.
Exemple 22. Soient a, b 0. Montrer que si
a
1+ b
b
1+ a
alors a = b.
Dmonstration. Nous raisonnons par labsurde en supposant que 1+a b = 1+b a et a 6= b. Comme 1+a b = 1+b a
alors a(1 + a) = b(1 + b) donc a + a2 = b + b2 do a2 b2 = b a. Cela conduit (a b)(a + b) = (a b).
Comme a 6= b alors a b 6= 0 et donc en divisant par a b on obtient a + b = 1. La somme de deux
nombres positifs ne peut tre ngative. Nous obtenons une contradiction.
Conclusion : si 1+a b = 1+b a alors a = b.
Dans la pratique, on peut choisir indiffremment entre un raisonnement par contraposition ou par
labsurde. Attention cependant de bien crire quel type de raisonnement vous choisissez et surtout de
ne pas changer en cours de rdaction !
2.5
Contre-exemple
Si lon veut montrer quune assertion du type x E P(x) est vraie alors pour chaque x de E il
faut montrer que P(x) est vraie. Par contre pour montrer que cette assertion est fausse alors il suffit
de trouver x E tel que P(x) soit fausse. (Rappelez-vous la ngation de x E P(x) est x
E non P(x) ). Trouver un tel x cest trouver un contre-exemple lassertion x E P(x) .
Exemple 23. Montrer que lassertion suivante est fausse Tout entier positif est somme de trois carrs .
(Les carrs sont les 02 , 12 , 22 , 32 ,... Par exemple 6 = 22 + 12 + 12 .)
Dmonstration. Un contre-exemple est 7 : les carrs infrieurs 7 sont 0, 1, 4 mais avec trois de ces
nombres on ne peut faire 7.
2.6
Rcurrence
Le principe de rcurrence permet de montrer quune assertion P(n), dpendant de n, est vraie pour
tout n N. La dmonstration par rcurrence se droule en trois tapes : lors de linitialisation on
prouve P(0). Pour ltape dhrdit, on suppose n 0 donn avec P(n) vraie, et on dmontre alors que
lassertion P(n + 1) au rang suivant est vraie. Enfin dans la conclusion, on rappelle que par le principe
de rcurrence P(n) est vraie pour tout n N.
Exemple 24. Montrer que pour tout n N, 2n > n.
77
2.7
Mini-exercices
a+ b
2
b et a
ab b.
2. (Cas par cas) Montrer que pour tout n N, n(n + 1) est divisible par 2 (distinguer les n pairs des n
impairs).
p
3. p
(Contrapose ou absurde) Soient a, b Z. Montrer que si b 6= 0 alors a + b 2 Q. (On utilisera que
2 Q.)
p
4. (Absurde) Soit n N . Montrer que n2 + 1 nest pas un entier.
5. (Contre-exemple) Est-ce que pour tout x R on a x < 2 = x2 < 4 ?
6. (Rcurrence) Montrer que pour tout n 1, 1 + 2 + + n =
n( n+1)
2 .
7. (Rcurrence) Fixons un rel x 0. Montrer que pour tout entier n 1, (1 + x)n 1 + nx.
Auteurs
Arnaud Bodin
Benjamin Boutin
Pascal Romon
78
Exo7
Ensembles et applications
Vido
Vido
Vido
Vido
Vido
Fiche
Fiche
Fiche
Fiche
Ensembles . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1
Dfinir des ensembles . . . . . . . . . . . . . . . .
1.2
Inclusion, union, intersection, complmentaire .
1.3
Rgles de calculs . . . . . . . . . . . . . . . . . . .
1.4
Produit cartsien . . . . . . . . . . . . . . . . . . .
1.5
Mini-exercices . . . . . . . . . . . . . . . . . . . .
Applications . . . . . . . . . . . . . . . . . . . . . . . . .
2.1
Dfinitions . . . . . . . . . . . . . . . . . . . . . .
2.2
Image directe, image rciproque . . . . . . . . .
2.3
Antcdents . . . . . . . . . . . . . . . . . . . . . .
2.4
Mini-exercices . . . . . . . . . . . . . . . . . . . .
Injection, surjection, bijection . . . . . . . . . . . . .
3.1
Injection, surjection . . . . . . . . . . . . . . . . .
3.2
Bijection . . . . . . . . . . . . . . . . . . . . . . . .
3.3
Mini-exercices . . . . . . . . . . . . . . . . . . . .
Ensembles finis . . . . . . . . . . . . . . . . . . . . . . .
4.1
Cardinal . . . . . . . . . . . . . . . . . . . . . . . .
4.2
Injection, surjection, bijection et ensembles finis
4.3
Nombres dapplications . . . . . . . . . . . . . . .
4.4
Nombres de sous-ensembles . . . . . . . . . . . .
4.5
Coefficients du binme de Newton . . . . . . . .
4.6
Formule du binme de Newton . . . . . . . . . .
4.7
Mini-exercices . . . . . . . . . . . . . . . . . . . .
Relation dquivalence . . . . . . . . . . . . . . . . . .
5.1
Dfinition . . . . . . . . . . . . . . . . . . . . . . .
5.2
Exemples . . . . . . . . . . . . . . . . . . . . . . .
5.3
Classes dquivalence . . . . . . . . . . . . . . . .
5.4
Lensemble Z/ nZ . . . . . . . . . . . . . . . . . . .
5.5
Mini-exercices . . . . . . . . . . . . . . . . . . . .
partie 1.
partie 2.
partie 3.
partie 4.
partie 5.
d'exercices
d'exercices
d'exercices
d'exercices
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Ensembles
Applications
Injection, surjection, bijection
Ensembles finis
Relation d'quivalence
Logique, ensembles, raisonnements
Injection, surjection, bijection
Dnombrement
Relation d'quivalence, relation d'ordre
79
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
80
80
81
81
82
82
83
83
84
84
85
85
85
86
87
87
87
88
89
90
90
92
93
93
93
94
94
95
96
Motivations
Au dbut du XXe sicle le professeur Frege peaufinait la rdaction du second tome dun ouvrage qui
souhaitait refonder les mathmatiques sur des bases logiques. Il reut une lettre dun tout jeune mathmaticien : Jai bien lu votre premier livre. Malheureusement vous supposez quil existe un ensemble
qui contient tous les ensembles. Un tel ensemble ne peut exister. Sensuit une dmonstration de deux
lignes. Tout le travail de Frege scroulait et il ne sen remettra jamais. Le jeune Russell deviendra lun
des plus grands logiciens et philosophes de sont temps. Il obtient le prix Nobel de littrature en 1950.
Voici le paradoxe de Russell pour montrer que lensemble de tous les ensembles ne peut exister. Cest
trs bref, mais difficile apprhender. Par labsurde, supposons quun tel ensemble E contenant tous les
ensembles existe. Considrons
n
o
F = EE |EE .
Expliquons lcriture E E : le E de gauche est considr comme un lment, en effet lensemble E
est lensemble de tous les ensembles et E est un lment de cet ensemble ; le E de droite est considr
comme un ensemble, en effet les lment de E sont des ensembles ! On peut donc sinterroger si llment
E appartient lensemble E. Si non, alors par dfinition on met E dans lensemble F.
La contradiction arrive lorsque lon se pose la question suivante : a-t-on F F ou F F ? Lune des deux
affirmation doit tre vraie. Et pourtant :
Si F F alors par dfinition de F, F est lun des ensembles E tel que F F. Ce qui est contradictoire.
Si F F alors F vrifie bien la proprit dfinissant F donc F F ! Encore contradictoire.
Aucun des cas nest possible. On en dduit quil ne peut exister un tel ensemble E contenant tous les
ensembles.
Ce paradoxe a t popularis par lnigme suivante : Dans une ville, le barbier rase tous ceux qui ne se
rasent pas eux-mmes. Qui rase le barbier ? La seule rponse valable est quune telle situation ne peut
exister.
Ne vous inquitez pas, Russell et dautres ont fond la logique et les ensembles sur des bases solides.
Cependant il nest pas possible dans ce cours de tout redfinir. Heureusement, vous connaissez dj
quelques ensembles :
lensemble des entiers naturels N = {0, 1, 2, 3, . . .}.
lensemble des entiers relatifs Z = {. . . , 2, 1, 0, 1, 2, . . .}.
p
1
1.1
Ensembles
Dfinir des ensembles
x R | | x 2| < 1 ,
z C | z5 = 1 ,
x R | 0 x 1 = [0, 1].
80
1.2
P ({1, 2, 3}) = , {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3} .
Complmentaire. Si A E,
E A = x E | x A
On le note aussi E \ A et juste A sil ny a pas dambigut (et parfois aussi A c ou A).
E A
Union. Pour A, B E,
A B = x E | x A ou x B
AB
Intersection.
A B = x E | x A et x B
1.3
AB
Rgles de calculs
A (B C) = (A B) (A C)
A (B C) = (A B) (A C)
A = A et donc A B B A.
(A B) = A B
(A B) = A B
Voici les dessins pour les deux dernires assertions.
81
(A B) = A B
AB
(A B) = A B
AB
Les preuves sont pour lessentiel une reformulation des oprateurs logiques, en voici quelques-unes :
Preuve de A (B C) = (A B)(A C) : x A (B C) x A et x (B C) x A et (x B ou x
C) (x A et x B) ou (x A et x C) (x A B) ou (x A C) x (A B) (A C).
B non(x A) ou non(x B) x A ou x B x A B.
Remarquez que lon repasse aux lments pour les preuves.
1.4
Produit cartsien
Soient E et F deux ensembles. Le produit cartsien, not E F, est lensemble des couples (x, y) o
x E et y F.
Exemple 25.
x
0
1
1
0
1.5
Mini-exercices
5. Reprsenter les sous-ensembles de R2 suivants : ]0, 1[[2, 3[ [1, 1], R \ (]0, 1[[2, 3[ (R \
Applications
2.1
Dfinitions
Une application (ou une fonction) f : E F, cest la donne pour chaque lment x E dun unique
lment de F not f (x).
Nous reprsenterons les applications par deux types dillustrations : les ensembles patates, lensemble de dpart (et celui darrive) est schmatis par un ovale ses lments par des points. Lassociation
x 7 f (x) est reprsente par une flche.
f
x
f (x)
Lautre reprsentation est celle des fonctions continues de R dans R (ou des sous-ensembles de R).
Lensemble de dpart R est reprsent par laxe des abscisses et celui darrive par laxe des ordonnes.
Lassociation x 7 f (x) est reprsente par le point (x, f (x)).
y
f (x)
x
x
galit. Deux applications f , g : E F sont gales si et seulement si pour tout x E, f (x) = g(x). On
note alors f = g.
Le graphe de f : E F est
n
o
f = x, f (x) E F | x E
y
f
x
g f (x) .
g
f
E F G
g f
Exemple 26.
1. Lidentit, idE : E E est simplement dfinie par x 7 x et sera trs utile dans la suite.
2. Dfinissons f , g ainsi
f :
]0, +[ ]0, +[
,
1
x
7
x
83
g :
]0, +[
x
7
R
x1
x+1
1
g f (x) = g f (x) = g
=
x
2.2
1
x
1
x
1
+1
1 x
= g(x).
1+ x
f (A) = f (x) | x A
y
f
F
f (A)
f (A)
x
A
f 1 (B) = x E | f (x) B
f
y
B
x
f 1 (B)
f 1 (B)
Limage directe dun singleton f ({ x}) = f (x) est un singleton. Par contre limage rciproque dun
singleton f 1 { y} dpend de f . Cela peut tre un singleton, un ensemble plusieurs lments ; mais
cela peut-tre E tout entier (si f est une fonction constante) ou mme lensemble vide (si aucune
image par f ne vaut y).
2.3
Antcdents
E
x1
x3
x2
F
y
y
x
x1
84
x2
x3
2.4
Mini-exercices
4
n+1 .
3
3.1
x, x0 E
f (x) = f (x0 ) = x = x0
Dfinition 11. f est surjective si pour tout y F, il existe x E tel que y = f (x). Autrement dit :
y F x E
y = f (x)
Une autre formulation : f est surjective si et seulement si f (E) = F.
Les applications f reprsentes sont injectives :
y
)
E
x
E
x
E
Remarque. Encore une fois ce sont des notions difficiles apprhender. Une autre faon de formuler
linjectivit et la surjectivit est dutiliser les antcdents.
f est injective si et seulement si tout lment y de F a au plus 1 antcdent (et ventuellement
aucun).
f est surjective si et seulement si tout lment y de F a au moins 1 antcdent.
Remarque. Voici deux fonctions non injectives :
f
y
F
x
x0
y
x
x
85
x0
F
)
y
E
F
x
E
Exemple 27.
1. Soit f 1 : N Q dfinie par f 1 (x) = 1+1 x . Montrons que f 1 est injective : soit x, x0 N tels que f 1 (x) =
f 1 (x0 ). Alors 1+1 x = 1+1x0 , donc 1 + x = 1 + x0 et donc x = x0 . Ainsi f 1 est injective.
Par contre f 1 nest pas surjective. Il sagit de trouver un lment y qui na pas dantcdent par f 1 .
Ici il est facile de voir que lon a toujours f 1 (x) 1 et donc par exemple y = 2 na pas dantcdent.
Ainsi f 1 nest pas surjective.
2. Soit f 2 : Z N dfinie par f 2 (x) = x2 . Alors f 2 nest pas injective. En effet on peut trouver deux
lments x, x0 Z diffrents tels que f 2 (x) = f 2 (x0 ). Il suffit de prendre par exemple x = 2, x0 = 2.
f 2 nest pas non plus surjective, en effet il existe des lments y N qui nont aucun antcdent.
2
Par exemple
p y = 3 : si y = 3 avait un antcdent x par f 2 , nous aurions f 2 (x) = y, cest--dire x = 3,
do x = 3. Mais alors x nest pas un entier de Z. Donc y = 3 na pas dantcdent et f 2 nest pas
surjective.
3.2
Bijection
Dfinition 12. f est bijective si elle injective et surjective. Cela quivaut : pour tout y F il existe
un unique x E tel que y = f (x). Autrement dit :
y F
!x E
y = f (x)
x
E
Proposition 10.
Soit E, F des ensembles et f : E F une application.
1. Lapplication f est bijective si et seulement si il existe une application g : F E telle que f g = idF
et g f = idE .
2. Si f est bijective alors lapplication g est unique et elle aussi est bijective. Lapplication g sappelle
1
la bijection rciproque de f et est note f 1 . De plus f 1
= f.
Remarque.
f g = idF se reformule ainsi
y F
f g(y) = y.
x E
g f (x) = x.
86
Par exemple f : R ]0, +[ dfinie par f (x) = exp(x) est bijective, sa bijection rciproque est g :
]0, +[ R dfinie par g(y) = ln(y). Nous avons bien exp ln(y) = y, pour tout y ]0, +[ et ln exp(x) =
x, pour tout x R.
Dmonstration.
1. Sens . Supposons f bijective. Nous allons construire une application g : F E. Comme f est
surjective alors pour chaque y F, il existe un x E tel que y = f (x) et on pose g(y) = x. On
a f g(y) = f (x) = y, ceci pour tout y F et donc f g = idF . On compose droite avec f donc
f g f = idF f . Alors pour tout x E on a f g f (x) = f (x) or f est injective et donc g f (x) = x.
Ainsi g f = idE . Bilan : f g = idF et g f = idE .
Sens . Supposons que g existe et montrons que f est bijective.
f est surjective : en effet soit y F alors on note x = g(y) E ; on a bien : f (x) = f g(y) =
f g(y) = idF (y) = y, donc f est bien surjective.
f est injective : soient x, x0 E tels que f (x) = f (x0 ). On compose par g ( gauche) alors g f (x) =
g f (x0 ) donc idE (x) = idE (x0 ) donc x = x0 ; f est bien injective.
2. Si f est bijective alors g est aussi bijective car g f = idE et f g = idF et on applique ce que lon
vient de dmontrer avec g la place de f . Ainsi g1 = f .
Si f est bijective, g est unique : en effet soit h : F E une autre application telle que h f = idE
Proposition 11.
Soient f : E F et g : F G des applications bijectives. Lapplication g f est bijective et sa bijection
rciproque est
(g f )1 = f 1 g1
Dmonstration. Daprs la proposition 10, il existe u : F E tel que u f = idE et f u = idF . Il existe
aussi v : G F tel que v g = idF et gv = idG . On a alors (g f )(uv) = g( f u)v = gidF u = g u = idE .
Et (u v) (g f ) = u (v g) f = u idF f = u f = idE . Donc g f est bijective et son inverse est u v.
Comme u est la bijection rciproque de f et v celle de g alors : u v = f 1 g1 .
3.3
Mini-exercices
1
x1
Ensembles finis
4.1
Cardinal
Dfinition 13. Un ensemble E est fini sil existe un entier n N et une bijection de E vers {1, 2, . . . , n}.
Cet entier n est unique et sappelle le cardinal de E (ou le nombre dlments) et est not Card E.
Quelques exemples :
1. E = {rouge, noir} est en bijection avec {1, 2} et donc est de cardinal 2.
87
A
B
4.2
Proposition 12.
Soit E, F deux ensembles finis et f : E F une application.
1. Si f est injective alors Card E Card F.
2. Si f est surjective alors Card E Card F.
3. Si f est bijective alors Card E = Card F.
Dmonstration.
1. Supposons f injective. Notons F 0 = f (E) F alors la restriction f | : E F 0 (dfinie par f | (x) = f (x))
est une bijection. Donc pour chaque y F 0 est associ un unique x E tel que y = f (x). Donc E
et F 0 ont le mme nombre dlments. Donc Card F 0 = Card E. Or F 0 F, ainsi Card E = Card F 0
Card F.
2. Supposons f surjective. Pour tout lment y F, il existe au moins un lment x de E tel que
y = f (x) et donc Card E Card F.
3. Cela dcoule de (1) et (2) (ou aussi de la preuve du (1)).
Proposition 13.
Soit E, F deux ensembles finis et f : E F une application. Si
Card E = Card F
alors les assertions suivantes sont quivalentes :
i. f est injective,
ii. f est surjective,
iii. f est bijective.
Dmonstration. Le schma de la preuve est le suivant : nous allons montrer successivement les implications :
(i) = (ii) = (iii) = (i)
ce qui prouvera bien toutes les quivalences.
88
(i) = (ii). Supposons f injective. Alors Card f (E) = Card E = Card F. Ainsi f (E) est un sous-ensemble
de F ayant le mme cardinal que F ; cela entrane f (E) = F et donc f est surjective.
(ii) = (iii). Supposons f surjective. Pour montrer que f est bijective, il reste montrer que f est
injective. Raisonnons par labsurde et supposons f non injective. Alors Card f (E) < Card E (car au
moins 2 lments ont la mme image). Or f (E) = F car f surjective, donc Card F < Card E. Cest une
contradiction, donc f doit tre injective et ainsi f est bijective.
(iii) = (i). Cest clair : une fonction bijective est en particulier injective.
Appliquez ceci pour montrer le principe des tiroirs :
Proposition 14.
Si lon range dans k tiroirs, n > k paires de chaussettes alors il existe (au moins) un tiroir contenant (au
moins) deux paires de chaussettes.
Malgr sa formulation amusante, cest une proposition souvent utile. Exemple : dans un amphi de 400
tudiants, il y a au moins deux tudiants ns le mme jour !
4.3
Nombres dapplications
89
Proposition 17.
Le nombre de bijections dun ensemble E de cardinal n dans lui-mme est :
n!
Exemple 29. Parmi les 3125 applications de {1, 2, 3, 4, 5} dans lui-mme il y en a 5! = 120 qui sont
bijectives.
Dmonstration. Nous allons le prouver par rcurrence sur n. Soit (P n ) lassertion suivante : le nombre
de bijections dun ensemble n lments dans un ensemble n lments est n!
P1 est vraie. Il ny a quune bijection dun ensemble 1 lment dans un ensemble 1 lment.
Fixons n 1 et supposons que P n est vraie. Soit E un ensemble n + 1 lments. On fixe a E.
Pour chaque b E il y a -par lhypothse de rcurrence- exactement n! applications bijectives de
E \ {a} E \ { b}. Chaque application se prolonge en une bijection de E F en posant a 7 b. Comme
il y a n + 1 choix de b E alors nous obtenons n! (n + 1) bijections de E dans lui-mme. Ainsi P n+1
est vraie.
Par le principe de rcurrence le nombre de bijections dun ensemble n lments est n!
On aurait aussi pu directement utiliser la proposition 16 avec n = p (sachant qualors les injections sont
aussi des bijections).
4.4
Nombres de sous-ensembles
4.5
Dfinition 14. Le nombre de parties k lments dun ensemble n lments est not
Exemple 31. Les parties deux lments de {1, 2, 3} sont {1, 2}, {1, 3} et {2, 3} et donc
dj class les parties de {1, 2, 3, 4, 5} par nombre dlments et donc
50 = 1 (la seule partie nayant aucun lment est lensemble vide),
90
3
2
n
k
ou C nk .
= 3. Nous avons
5
= 5 (il y a 5 singletons),
51
= 10 (il y a 10 paires),
52
= 10,
53
= 5,
54
=
1 (la seule partie ayant 5 lments est lensemble tout entier).
5
n n
n
n
n
0 + 1 ++ k ++ n = 2
Dmonstration.
1. Par exemple :
n
1
= n car il y a n singletons.
Proposition 20.
!
!
!
n
n1
n1
=
+
k
k
k1
0<k<n
1
2
1
4
1
1
1
3
1
1
1
1
91
2
3
1
1
1
3
4
5
10
1
4
10
1
5
Ce qui fait que cela fonctionne cest bien sr la proposition 20 qui se reprsente ainsi :
n1
n1
k1
n
k
Une autre faon de calculer le coefficient du binme de Newton repose sur la formule suivante :
Proposition 21.
!
n
n!
=
k!(n k)!
k
Dmonstration. Cela se fait par rcurrence sur n. Cest clair pour n = 1. Si cest vrai au rang n 1 alors
1 n1
1 n1
crivons nk = nk
et utilisons lhypothse de rcurrence pour nk
1 + k
1 et
k . Ainsi
!
!
!
n
n1
n1
(n 1)!
(n 1)!
=
+
=
+
k
k1
k
(k 1)!(n 1 (k 1))! k!(n 1 k)!
(n 1)!
1
1
(n 1)!
n
=
+
=
(k 1)!(n k 1)!
nk k
(k 1)!(n k 1)! k(n k)
n!
=
k!(n k)!
4.6
Thorme 7.
Soient a, b R et n un entier positif alors :
!
n n
X
a n k b k
(a + b)n =
k=0 k
Autrement dit :
!
!
!
!
n n 0
n n1 1
n n k k
n 0 n
(a + b) =
a b +
a
b ++
a
b ++
a b
0
1
k
n
n
92
n
k=0 k
Pn
a n k
(a + b) = (a + b) (a + b)
n1
!
!
n 1 n1k k
n1
= a a
++
a
b ++ b
k
!
!
n 1 n1(k1) k1
n1
n1
+b a
++
a
b
++ b
k1
!
!!
n1
n1
= +
+
a n k b k +
k
k1
!
!
n n
X
n n k k
a n k b k
= +
a
b + =
k
k
k=0
n1
4.7
Mini-exercices
5
5.1
Relation dquivalence
Dfinition
Une relation sur un ensemble E, cest la donne pour tout couple (x, y) E E de Vrai (sils sont en
relation), ou de Faux sinon.
Nous schmatisons une relation ainsi : les lments de E sont des points, une flche de x vers y signifie
que x est en relation avec y, cest--dire que lon associe Vrai au couple (x, y).
Dfinition 15. Soit E un ensemble et R une relation, cest une relation dquivalence si :
x E, xR x, (rflexivit)
x
x, y E, xR y = yR x,
(symtrie)
y
93
x, y, z E, xR y et yR z = xR z,
(transitivit)
y
z
x
5.2
Exemples
5.3
Classes dquivalence
Dfinition 16. Soit R une relation dquivalence sur un ensemble E. Soit x E, la classe dquivalence de x est
cl(x) = y E | yR x
x0
cl(x)
x
cl(x0 )
cl(x) est donc un sous-ensemble de E, on le note aussi x. Si y cl(x), on dit que y un reprsentant de
cl(x).
Soit E un ensemble et R une relation dquivalence.
Proposition 22.
On a les proprits suivantes :
94
1. cl(x) = cl(y) xR y.
2. Pour tout x, y E, cl(x) = cl(y) ou cl(x) cl(y) = .
3. Soit C un ensemble de reprsentants de toutes les classes alors cl(x) | x C constitue une partition de E.
S
Une partition de E est un ensemble {E i } de parties de E tel que E = i E i et E i E j = (si i 6= j).
E
...
E2
E1
Ei
Ej
...
...
Exemples :
1. Pour la relation tre du mme ge, la classe dquivalence dune personne est lensemble des
personnes ayant le mme ge. Il y a donc une classe dquivalence forme des personnes de 19
ans, une autre forme des personnes de 20 ans,... Les trois assertions de la proposition se lisent
ainsi :
On est dans la mme classe dquivalence si et seulement si on est du mme ge.
Deux personnes appartiennent soit la mme classe, soit des classes disjointes.
Si on choisit une personne de chaque ge possible, cela forme un ensemble de reprsentants C.
Maintenant une personne quelconque appartient une et une seule classe dun des reprsentants.
2. Pour la relation tre parallle, la classe dquivalence dune droite est lensemble des droites
parallles. chaque classe dquivalence correspond une et une seule direction.
Voici un exemple que vous connaissez depuis longtemps :
Exemple 34. Dfinissons sur E = Z N la relation R par
(p, q)R (p0 , q0 ) pq0 = p0 q.
Tout dabord R est une relation dquivalence :
R est rflexive : pour tout (p, q) on a bien pq = pq et donc (p, q)R (p, q).
R est symtrique : pour tout (p, q), (p0 , q0 ) tels que (p, q)R (p0 , q0 ) on a donc pq0 = p0 q et donc p0 q = pq0
do (p0 , q0 )R (p, q).
R est transitive : pour tout (p, q), (p0 , q0 ), (p00 , q00 ) tels que (p, q)R (p0 , q0 ) et (p0 , q0 )R (p00 , q00 ) on a donc
pq0 = p0 q et p0 q00 = p00 q0 . Alors (pq0 )q00 = (p0 q)q00 = q(p0 q00 ) = q(p00 q0 ). En divisant par q0 6= 0 on obtient
pq00 = q p00 et donc (p, q)R (p00 , q00 ).
p
Nous allons noter q = cl(p, q) la classe dquivalence dun lment (p, q) Z N . Par exemple, comme
(2, 3)R (4, 6) (car 2 6 = 3 4) alors les classes de (2, 3) et (4, 6) sont gales : avec notre notation cela
scrit : 23 = 46 .
Cest ainsi que lon dfinit les rationnels : lensemble Q des rationnels est lensemble de classes dquivalence de la relation R .
Les nombres 32 = 46 sont bien gaux (ce sont les mmes classes) mais les critures sont diffrentes (les
reprsentants sont distincts).
5.4
Lensemble Z/ nZ
a b est un multiple de n
Exemples pour n = 7 : 10 3 (mod 7), 19 5 (mod 7), 77 0 (mod 7), 1 20 (mod 7).
Cette relation est bien une relation dquivalence :
95
a = cl(a) = b Z | b a (mod n) .
a = a + nZ = a + kn | k Z .
n + 1 = 1,
n + 2 = 2, . . .
Z/nZ = 0, 1, 2, . . . , n 1
0, 1, 2, . . . , 6 possde 7 lments.
Remarque. Dans beaucoup de situations de la vie courante, nous raisonnons avec les modulos. Par
exemple pour lheure : les minutes et les secondes sont modulo 60 (aprs 59 minutes on repart zro),
les heures modulo 24 (ou modulo 12 sur le cadran aiguilles). Les jours de la semaine sont modulo 7,
les mois modulo 12,...
5.5
Mini-exercices
2 x+ y
3
2. Dans R2 montrer que la relation dfinie par (x, y)R (x0 , y0 ) x + y0 = x0 + y est une relation
dquivalence. Montrer que deux points (x, y) et (x0 , y0 ) sont dans une mme classe si et seulement
sils appartiennent une mme droite dont vous dterminerez la direction.
3. On dfinit une addition sur Z/nZ par p + q = p + q. Calculer la table daddition dans Z/6Z (cest-dire toutes les sommes p + q pour p, q Z/6Z). Mme chose avec la multiplication p q = p q.
Mmes questions avec Z/5Z, puis Z/8Z.
Auteurs
Arnaud Bodin
Benjamin Boutin
Pascal Romon
96
Troisime partie
Les exercices
97
98
Exo7
Arithmtique dans Z
Exercice 1
Sachant que lon a 96842 = 256 375 + 842, dterminer, sans faire la division, le reste de la division du nombre
96842 par chacun des nombres 256 et 375.
Indication H
Correction H
Vido
[000251]
Exercice 2
Montrer que n N :
n(n + 1)(n + 2)(n + 3) est divisible par 24,
n(n + 1)(n + 2)(n + 3)(n + 4) est divisible par 120.
Correction H
Vido
[000257]
Exercice 3
Montrer que si n est un entier naturel somme de deux carrs dentiers alors le reste de la division euclidienne
de n par 4 nest jamais gal 3.
Correction H
Vido
[000267]
Exercice 4
Dmontrer que le nombre 7n + 1 est divisible par 8 si n est impair ; dans le cas n pair, donner le reste de sa
division par 8.
Indication H
Correction H
Vido
[000254]
Exercice 5
Trouver le reste de la division par 13 du nombre 1001000 .
Indication H
Correction H
Vido
[000250]
Exercice 6
1. Montrer que le reste de la division euclidienne par 8 du carr de tout nombre impair est 1.
2. Montrer de mme que tout nombre pair vrifie x2 = 0 (mod 8) ou x2 = 4 (mod 8).
3. Soient a, b, c trois entiers impairs. Dterminer le reste modulo 8 de a2 +b2 +c2 et celui de 2(ab+bc+ca).
4. En dduire que ces deux nombres ne sont pas des carrs puis que ab + bc + ca non plus.
Indication H
Correction H
Vido
[000285]
Exercice 7
Calculer le pgcd des nombres suivants :
1. 126, 230.
2. 390, 720, 450.
3. 180, 606, 750.
Correction H
Vido
[000290]
Exercice 8
Dterminer les couples dentiers naturels de pgcd 18 et de somme 360. De mme avec pgcd 18 et produit 6480.
Correction H
Vido
[000292]
Exercice 9
Calculer par lalgorithme dEuclide : pgcd(18480, 9828). En dduire une criture de 84 comme combinaison
linaire de 18480 et 9828.
Correction H
Vido
[000296]
Exercice 10
Notons a = 1 111 111 111 et b = 123 456 789.
1. Calculer le quotient et le reste de la division euclidienne de a par b.
2. Calculer p = pgcd(a, b).
3. Dterminer deux entiers relatifs u et v tels que au + bv = p.
Correction H
Vido
[000303]
Exercice 11
Rsoudre dans Z : 1665x + 1035y = 45.
Indication H
Correction H
Vido
[000305]
Exercice 12
Combien 15! admet-il de diviseurs ?
Indication H
Correction H
Vido
[000249]
Exercice 13
Dmontrer que, si a et b sont des entiers premiers entre eux, il en est de mme des entiers a + b et ab.
Indication H
Correction H
Vido
[000337]
Exercice 14
Soient a, b des entiers suprieurs ou gaux 1. Montrer :
1. (2a 1)|(2ab 1) ;
2. 2 p 1 premier p premier ;
3. pgcd(2a 1, 2b 1) = 2pgcd(a,b) 1.
Indication H
Correction H
Vido
[000336]
Exercice 15
2
Soit a N tel que an + 1 soit premier, montrer que k N, n = 2k . Que penser de la conjecture : n N, 22 + 1
est premier ?
Indication H
Correction H
Vido
[000349]
Exercice 16
Soit p un nombre premier.
1. Montrer que i N, 0 < i < p on a :
Cip est divisible par p.
2. Montrer par rcurence que :
p premier, a N , on a a p a est divisible par p.
Indication H
Correction H
Vido
[000339]
Exercice 17
1. Montrer par rcurrence que n N, k > 1 on a :
n+k
22
n
k1 n+i
1 = 22 1 (22 + 1).
i=0
Correction H
Vido
[000341]
Exercice 18
Soit X lensemble des nombres premiers de la forme 4k + 3 avec k N.
1. Montrer que X est non vide.
2. Montrer que le produit de nombres de la forme 4k + 1 est encore de cette forme.
3. On suppose que X est fini et on lcrit alors X = {p1 , . . . , pn }.
Soit a = 4p1 p2 . . . pn 1. Montrer par labsurde que a admet un diviseur premier de la forme 4k + 3.
4. Montrer que ceci est impossible et donc que X est infini.
Correction H
Vido
[000348]
Correction de lexercice 1 N
La seule chose voir est que pour une division euclidienne le reste doit tre plus petit que le quotient. Donc les
divisions euclidiennes scrivent : 96842 = 256 378 + 74 et 96842 = 258 375 + 92.
Correction de lexercice 2 N
Il suffit de constater que pour 4 nombres conscutifs il y a ncessairement : un diviseur de 2, un diviseur de 3,
un diviseur de 4 (tous distincts). Donc le produit de 4 nombres conscutifs est divisible par 2 3 4 = 24.
Correction de lexercice 3 N
Ecrire n = p2 + q2 et tudier le reste de la division euclidienne de n par 4 en distinguant les diffrents cas de
parit de p et q.
Correction de lexercice 4 N
Raisonnons modulo 8 :
7 1 (mod 8).
Donc
7n + 1 (1)n + 1 (mod 8).
Le reste de la division euclidienne de 7n + 1 par 8 est donc (1)n + 1 donc Si n est impair alors 7n + 1 est
divisible par 8. Et si n est pair 7n + 1 nest pas divisible par 8.
Correction de lexercice 5 N
Il sagit de calculer 1001000 modulo 13. Tout dabord 100 9 (mod 13) donc 1001000 91000 (mod 13). Or
92 81 3 (mod 13), 93 92 .9 3.9 1 (mod 13), Or 94 93 .9 9 (mod 13), 95 94 .9 9.9 3
(mod 13). Donc 1001000 91000 93.333+1 (93 )333 .9 1333 .9 9 (mod 13).
Correction de lexercice 6 N
1. Soit n un nombre impair, alors il scrit n = 2p + 1 avec p N. Maintenant n2 = (2p + 1)2 = 4p2 + 4p +
1 = 4p(p + 1) + 1. Donc n2 1 (mod 8).
2. Si n est pair alors il existe p N tel que n = 2p. Et n2 = 4p2 . Si p est pair alors p2 est pair et donc
n2 = 4p2 est divisible par 8, donc n2 0 (mod 8). Si p est impair alors p2 est impair et donc n2 = 4p2
est divisible par 4 mais pas par 8, donc n2 4 (mod 8).
3. Comme a est impair alors daprs la premire question a2 1 (mod 8), et de mme c2 1 (mod 8),
c2 1 (mod 8). Donc a2 + b2 + c2 1 + 1 + 1 3 (mod 8). Pour lautre reste, crivons a = 2p + 1 et
b = 2q + 1, c = 2r + 1, alors 2ab = 2(2p + 1)(2q + 1) = 8pq + 4(p + q) + 2. Alors 2(ab + bc + ca) =
8pq + 8qr + 8pr + 8(p + q + r) + 6, donc 2(ab + bc + ca) 6 (mod 8).
4. Montrons par labsurde que le nombre a2 + b2 + c2 nest pas le carr dun nombre entier. Supposons quil
existe n N tel que a2 + b2 + c2 = n2 . Nous savons que a2 + b2 + c2 3 (mod 8). Si n est impair alors
n2 1 (mod 8) et si n est pair alors n2 0 (mod 8) ou n2 4 (mod 8). Dans tous les cas n2 nest pas
congru 3 modulo 8. Donc il y a une contradiction. La conclusion est que lhypothse de dpart est fausse
donc a2 + b2 + c2 nest pas un carr. Le mme type de raisonnement est valide pour 2(ab + bc + ca).
Pour ab + bc + ca largument est similaire : dune part 2(ab + bc + ca) 6 (mod 8) et dautre part si, par
labsurde, on suppose ab + bc + ca = n2 alors selon la parit de n nous avons 2(ab + bc + ca) 2n2 2
(mod 8) ou 0 (mod 8). Dans les deux cas cela aboutit une contradiction. Nous avons montrer que
ab + bc + ca nest pas un carr.
Correction de lexercice 7 N
Il sagit ici dutiliser la dcomposition des nombres en facteurs premiers.
1. 126 = 2.32 .7 et 230 = 2.5.23 donc le pgcd de 126 et 230 est 2.
6
2. 390 = 2.3.5.13, 720 = 24 .32 .5, 450 = 2.32 .52 et donc le pgcd de ces trois nombres est 2.3.5 = 30.
3. pgcd(180, 606, 750) = 6.
Correction de lexercice 8 N
Soient a, b deux entiers de pgcd 18 et de somme 360. Soit a0 , b0 tel que a = 18a0 et b = 18b0 . Alors a0 et b0 sont
premiers entre eux, et leur somme est 360/18 = 20.
Nous pouvons facilement numrer tous les couples dentiers naturels (a0 , b0 ) (a0 6 b0 ) qui vrifient cette condition, ce sont les couples :
(1, 19), (3, 17), (7, 13), (9, 11).
Pour obtenir les couples (a, b) recherchs (a 6 b), il suffit de multiplier les couples prcdents par 18 :
(18, 342), (54, 306), (126, 234), (162, 198).
Correction de lexercice 9 N
1. pgcd(18480, 9828) = 84 ;
2. 25 18480 + (47) 9828 = 84.
Correction de lexercice 10 N
1. a = 9b + 10.
2. Calculons le pgcd par lalgorithme dEuclide. a = 9b + 10, b = 12345678 10 + 9, 10 = 1 9 + 1. Donc
le pgcd vaut 1 ;
3. Nous reprenons les quations prcdentes en partant de la fin : 1 = 10 9, puis nous remplaons 9 grce
la deuxime quation de lalgorithme dEuclide : 1 = 10 (b 12345678 10) = b + 1234679
10. Maintenant nous remplaons 10 grce la premire quation : 1 = b + 12345679(a 9b) =
12345679a 111111112b.
Correction de lexercice 11 N
En divisant par 45 (qui est le pgcd de 1665, 1035, 45) nous obtenons lquation quivalente :
37x + 23y = 1
(E)
Comme le pgcd de 37 et 23 est 1, alors daprs le thorme de Bzout cette quation (E) a des solutions.
Lalgorithme dEuclide pour le calcul du pgcd de 37 et 23 fourni les coefficients de Bzout : 37 5 + 23
(8) = 1. Une solution particulire de (E) est donc (x0 , y0 ) = (5, 8).
Nous allons maintenant trouver lexpression gnrale pour les solutions de lquation (E). Soient (x, y) une
solution de lquation 37x + 23y = 1. Comme (x0 , y0 ) est aussi solution, nous avons 37x0 + 23y0 = 1. Faisons
la diffrence de ces deux galits pour obtenir 37(x x0 ) + 23(y y0 ) = 0. Autrement dit
37(x x0 ) = 23(y y0 ) ()
On en dduit que 37|23(y y0 ), or pgcd(23, 37) = 1 donc par le lemme de Gauss, 37|(y y0 ). (Cest ici quil
est important davoir divis par 45 ds le dbut !) Cela nous permet dcrire y y0 = 37k pour un k Z.
Repartant de lgalit () : nous obtenons 37(x x0 ) = 23 37 k. Ce qui donne x x0 = 23k. Donc si
(x, y) est solution de (E) alors elle est de la forme : (x, y) = (x0 23k, y0 + 37k), avec k Z.
Rciproquement pour chaque k Z, si (x, y) est de cette forme alors cest une solution de (E) (vrifiez-le !).
Conclusion : les solutions sont
(5 23k, 8 + 37k) | k Z .
Correction de lexercice 12 N
crivons la dcomposition de 15! = 1.2.3.4 . . . 15 en facteurs premiers. 15! = 211 .36 .53 .72 .11.13. Un diviseur de
15! scrit d = 2 .3 .5 .7 .11 .13 avec 0 11, 0 6, 0 3, 0 2, 0 1, 0 1.
De plus tout nombre d de cette forme est un diviseur de 15!. Le nombre de diviseurs est donc (11 + 1)(6 +
1)(3 + 1)(2 + 1)(1 + 1)(1 + 1) = 4032.
Correction de lexercice 13 N
Soit a et b des entiers premiers entre eux. Raisonnons par labsurde et supposons que ab et a + b ne sont pas
premiers entre eux. Il existe alors un nombre premier divisant ab et a + b. Par le lemme dEuclide comme p|ab
alors p|a ou p|b. Par exemple supposons que p|a. Comme p|a + b alors p divise aussi (a + b) a, donc p|b.
ne divise pas b cela implique que et b sont premiers entre eux.
Daprs le lemme de Gauss, comme divise ab et premier avec b alors divise a. Donc p est un facteur
premier de a et de b ce qui est absurde.
Correction de lexercice 14 N
1. Nous savons que
xb 1 = (x 1)(xb1 + + x + 1),
pour x = 2a nous obtenons :
2ab 1 = (2a )b 1 = (2a 1) 2a(b1) + + 2a + 1 .
Donc (2a 1)|(2ab 1).
2. Montrons la contrapose. Supposons que p ne soit pas premier. Donc p = ab avec 1 < p, q < a. Par la
question prcdente 2a 1 divise 2 p 1 (et 1 < 2a 1 < 2 p 1). Donc 2 p 1 nest pas un nombre
premier.
3. Nous supposons a b. Nous allons montrer que faire lalgorithme dEuclide pour le couple (2a 1, 2b
1) revient faire lalgorithme dEuclide pour (a, b). Tout dabord rappellons la formule qui est la base de
lalgorithme dEuclide : pgcd(a, b) = pgcd(a b, b). Appliqu 2a 1 et 2b 1 cela donne directement
pgcd(2a 1, 2b 1) = pgcd(2a 2b , 2b 1). Mais 2a 2b = 2b (2ab 1) do pgcd(2a 1, 2b 1) =
pgcd(2b (2ab 1), 2b 1) = pgcd(2ab 1, 2b 1). La dernire galit vient du fait 2b et 2b 1 sont
premiers entre eux (deux entiers conscutifs sont toujours premiers entre eux).
Nous avons montrer : pgcd(2a 1, 2b 1) = pgcd(2ab 1, 2b 1). Cette formule est mettre en parallle de pgcd(a, b) = pgcd(a b, b). En itrant cette formule nous obtenons que si a = bq + r alors :
pgcd(2a 1, 2b 1) = pgcd(2abq 1, 2b 1) = pgcd(2r 1, 2b 1) comparer avec pgcd(a, b) =
pgcd(a bq, b) = pgcd(r, b). Nous avons notre premire tape de lalgorithme dEuclide. En itrant lalgorithme dEuclide pour (a, b), nous nous artons au dernier reste non nul : pgcd(a, b) = pgcd(b, r) =
= pgcd(rn , 0) = rn . Ce qui va donner pour nous pgcd(2a 1, 2b 1) = pgcd(2b 1, 2r 1) = =
pgcd(2rn 1, 20 1) = 2rn 1.
Bilan : pgcd(2a 1, 2b 1) = 2pgcd(a,b) 1.
Correction de lexercice 15 N
1. Supposons que an + 1 est premier. Nous allons montrer la contrapose. Supposons que n nest pas de la
forme 2k , cest--dire que n = p q avec p un nombre premier > 2 et q N. Nous utilisons la formule
x p + 1 = (x + 1)(1 x + x2 x3 + . . . + x p1 )
avec x = aq :
an + 1 = a pq + 1 = (aq ) p + 1 = (aq + 1)(1 aq + (aq )2 + + (aq ) p1 ).
8
Donc aq + 1 divise an + 1 et comme 1 < aq + 1 < an + 1 alors an + 1 nest pas premier. Par contraposition
si an + 1 est premier alor n = 2k .
2. Cette conjecture est fausse, mais pas facile vrifier sans une bonne calculette ! En effet pour n = 5 nous
obtenons :
5
22 + 1 = 4294967297 = 641 6700417.
Correction de lexercice 16 N
1. tant donn 0 < i < p, nous avons
Cip =
p!
p(p 1)(p 2) . . . (p (i + 1))
=
i!(p i)!
i!
Comme Cip est un entier alors i! divise p(p 1) . . . (p (i + 1)). Mais i! et p sont premiers entre eux (en
utilisant lhypothse 0 < i < p). Donc daprs le thorme de Gauss : i! divise (p 1) . . . (p (i + 1)),
autrement dit il existe k Z tel que ki! = (p 1) . . . (p (i + 1)). Maintenant nous avons Cip = pk donc
p divise Cip .
2. Il sagit de montrer le petit thorme de Fermat : pour p premier et a N , alors a p a (mod p). Fixons
p. Soit lassertion
(Ha ) a p a (mod p).
Pour a = 1 cette assertion est vraie ! tant donn a 1 supposons que Ha soit vraie. Alors
p
(a + 1) p = Cip ai .
i=0
Mais daprs la question prcdente pour 0 < i < p, p divise Cip . En termes de modulo nous obtenons :
(a + 1) p C0p a0 +Cpp a p 1 + a p
(mod p).
(mod p).
Nous venons de prouver que Ha+1 est vraie. Par le principe de rcurrence alors quelque soit a N nous
avons :
a p a (mod p).
Correction de lexercice 17 N
1. Fixons n et montrons la rcurrence sur k N. La formule est vraie pour k = 0. Supposons la formule
vraie au rang k. Alors
n
n+i
(22 1) (22
i=0
k1
n+i
+ 1) = (22 1) (22
n+k
+ 1) (22
+ 1)
i=0
n+k
= (22
n+k
1) (22
n+k
+ 1) = (22
n+k+1
)2 1 = 22
1.
Nous avons utiliser lhypothse de rcurrence dans ces galits. Nous avons ainsi montrer la formule au
rang k + 1. Et donc par le principe de rcurrence elle est vraie.
m1
Fm + 2 = (22 1) Fi .
i=n
Soit encore :
m1
Fn (22 1)
Fi Fm = 2.
i=n+1
Si d est un diviseur de Fn et Fm alors d divise 2 (ou alors on peut utiliser le thorme de Bzout). En
consquent d = 1 ou d = 2. Mais Fn est impair donc d = 1. Nous avons montrer que tous diviseurs de Fn
et Fm est 1, cela signifie que Fn et Fm sont premiers entre eux.
3. Supposons quil y a un nombre fini de nombres premiers. Nous les notons alors {p1 , . . . , pN }. Prenons
alors N + 1 nombres de la famille Fi , par exemple {F1 , . . . , FN+1 }. Chaque Fi , i = 1, . . . , N + 1 est divisible
par (au moins) un facteur premier p j , j = 1, . . . , N. Nous avons N + 1 nombres Fi et seulement N facteurs
premiers p j . Donc par le principe des tiroirs il existe deux nombres distincts Fk et Fk0 (avec 1 k, k0
N + 1) qui ont un facteur premier en commun. En consquent Fk et Fk0 ne sont pas premiers entre eux. Ce
qui contredit la question prcdente. Il existe donc une infinit de nombres premiers.
Correction de lexercice 18 N
1. X est non vide car, par exemple pour k = 2, 4k + 3 = 11 est premier.
2. (4k + 1)(4` + 1) = 16k` + 4(k + `) + 1 = 4(4k` + k + `) + 1. Si lon note lentier k0 = 4k` + k + ` alors
(4k + 1)(4` + 1) = 4k0 + 1, ce qui est bien de la forme voulue.
3. Remarquons que 2 est le seul nombre premier pair, les autres sont de la forme 4k + 1 ou 4k + 3. Ici a
nest pas divisible par 2, supposons par labsurde que a na pas de diviseur de la forme 4k + 3, alors
tous les diviseurs de a sont de la forme 4k + 1. Cest--dire que a scrit comme produit de nombre de
la forme 4k + 1, et par la question prcdente a peut scrire a = 4k0 + 1. Donc a 1 (mod 4). Mais
comme a = 4p1 p2 . . . pn 1, a 1 3 (mod 4). Nous obtenons une contradiction. Donc a admet une
diviseur premier p de la forme p = 4` + 3.
4. Dans lensemble X = {p1 , . . . , pn } il y a tous les nombres premiers de la formes 4k + 3. Le nombre p
est premier et scrit p = 4` + 3 donc p est un lment de X, donc il existe i {1, . . . , n} tel que p = pi .
Raisonnons modulo p = pi : a 0 (mod p) car p divise a. Dautre part a = 4p1 . . . pn 1 donc a 1
(mod p). (car pi divise p1 . . . pn ). Nous obtenons une contradiction, donc X est infini : il existe une infinit
de nombre premier de la forme 4k + 3. Petite remarque, tous les nombres de la forme 4k + 3 ne sont pas
des nombres premiers, par exemple pour k = 3, 4k + 3 = 15 nest pas premier.
10
Exo7
Logique, ensembles, raisonnements
Logique
Exercice 1
Complter les pointills par le connecteur logique qui simpose : , , .
1. x R x2 = 4 . . . . . . x = 2 ;
2. z C z = z . . . . . . z R ;
3. x R x = . . . . . . e2ix = 1.
Correction H
Vido
[000108]
Exercice 2
Soient les quatre assertions suivantes :
(a) x R y R
(c) x R
x+y > 0
y R
x+y > 0
(b) x R
;
;
(d) x R
y R
y R
x+y > 0 ;
y2 > x.
Correction H
Vido
[000106]
Exercice 3
Dans R2 , on dfinit les ensembles F1 = {(x, y) R2 , y 0} et F2 = {(x, y) R2 , xy 1, x 0}. On note
M1 M2 la distance usuelle entre deux points M1 et M2 de R2 . valuer les propositions suivantes :
1. ]0, +[ M1 F1
2. M1 F1
M2 F2
M2 F2
M1 M2 <
]0, +[
M1 M2 <
3. ]0, +[ M1 F1
4. M1 F1
M2 F2
M2 F2
M1 M2 <
]0, +[
M1 M2 <
Correction H
Vido
[000109]
Exercice 4
Nier la proposition : tous les habitants de la rue du Havre qui ont les yeux bleus gagneront au loto et prendront
leur retraite avant 50 ans.
Correction H
Vido
[000110]
Exercice 5
Nier les assertions suivantes :
1. tout triangle rectangle possde un angle droit ;
2. dans toutes les curies, tous les chevaux sont noirs ;
1
3. pour tout entier x, il existe un entier y tel que, pour tout entier z, la relation z < x implique le relation
z < x+1;
4. > 0 > 0
(|x 7/5| < |5x 7| < ).
Correction H
Vido
[000112]
Exercice 6
Soient f , g deux fonctions de R dans R. Traduire en termes de quantificateurs les expressions suivantes :
1. f est majore ;
2. f est borne ;
3. f est paire ;
4. f est impaire ;
5. f ne sannule jamais ;
6. f est priodique ;
7. f est croissante ;
8. f est strictement dcroissante ;
9. f nest pas la fonction nulle ;
10. f na jamais les mmes valeurs en deux points distincts ;
11. f atteint toutes les valeurs de N ;
12. f est infrieure g ;
13. f nest pas infrieure g.
Correction H
Vido
[000120]
Exercice 7
Soit f une application de R dans R. Nier, de la manire la plus prcise possible, les noncs qui suivent :
1. Pour tout x R f (x) 1.
2. Lapplication f est croissante.
3. Lapplication f est croissante et positive.
4. Il existe x R+ tel que f (x) 0.
5. Il existe x R tel que quel que soit y R, si x < y alors f (x) > f (y).
On ne demande pas de dmontrer quoi que ce soit, juste dcrire le contraire dun nonc.
Correction H
Vido
[000107]
Exercice 8
Montrer que
> 0
Indication H
Correction H
2n + 1
< 2 + ).
n+2
Vido
[000119]
Ensembles
Exercice 9
Soit A, B deux ensembles, montrer {(A B) = {A {B et {(A B) = {A {B.
Indication H
Correction H
Vido
[000123]
Exercice 10
Montrer par contraposition les assertions suivantes, E tant un ensemble :
2
1. A, B P(E) (A B = A B) A = B,
2. A, B,C P(E) (A B = A C et A B = A C) B = C.
Correction H
Vido
[000122]
Exercice 11
Soient E et F deux ensembles, f : E F. Dmontrer que :
A, B P(E) (A B) ( f (A) f (B)),
A, B P(E) f (A B) f (A) f (B),
A, B P(E) f (A B) = f (A) f (B),
A, B P(F) f 1 (A B) = f 1 (A) f 1 (B),
A P(F) f 1 (F \ A) = E \ f 1 (A).
Correction H
Vido
[000124]
Exercice 12
Montrez que chacun des ensembles suivants est un intervalle que vous calculerez.
I=
+
\
n=1
Correction H
1
1
,2+
n
n
et
J=
+
[
n=2
1
1+ ,n
n
Vido
[000137]
Absurde et contrapose
Exercice 13
Soit ( fn )nN une suite dapplications de lensemble N dans lui-mme. On dfinit une application f de N dans
N en posant f (n) = fn (n) + 1. Dmontrer quil nexiste aucun p N tel que f = f p .
Indication H
Correction H
Vido
[000150]
Exercice 14
1. Soit p1 , p2 , . . . , pr , r nombres premiers. Montrer que lentier N = p1 p2 . . . pr + 1 nest divisible par aucun
des entiers pi .
2. Utiliser la question prcdente pour montrer par labsurde quil existe une infinit de nombres premiers.
Indication H
Correction H
Vido
[000151]
Rcurrence
Exercice 15
Montrer :
n
1.
k=
k=1
n
2.
n(n + 1)
2
k2 =
k=1
Correction H
n N .
n(n + 1)(2n + 1)
6
n N .
Vido
[000153]
Exercice 16
Soit X un ensemble. Pour f F (X, X), on dfinit f 0 = id et par rcurrence pour n N f n+1 = f n f .
1. Montrer que n N f n+1 = f f n .
3
Correction H
Vido
[000157]
Exercice 17
Soit la suite (xn )nN dfinie par x0 = 4 et xn+1 =
2xn2 3
.
xn + 2
1. Montrer que : n N
xn > 3.
2. Montrer que : n N
3. Montrer que : n N
Correction H
Vido
[000155]
2n+1
n+2
2n + 1
n+2
soit vraie.
Indication pour lexercice 9 N
Il est plus facile de raisonner en prenant un lment x E. Par exemple, soit F, G des sous-ensembles de E.
Montrer que F G revient montrer que pour tout x F alors x G. Et montrer F = G est quivalent x F
si et seulement si x G, et ce pour tout x de E. Remarque : pour montrer F = G on peut aussi montrer F G
puis G F.
Enfin, se rappeler que x {F si et seulement si x
/ F.
Indication pour lexercice 13 N
Par labsurde, supposer quil existe p N tel que f = f p . Puis pour un tel p, valuer f et f p en une valeur bien
choisie.
Indication pour lexercice 14 N
Pour la premire question vous pouvez raisonner par contraposition ou par labsurde.
Indication pour lexercice 16 N
Pour les deux questions, travailler par rcurrence.
Indication pour lexercice 17 N
1. Rcurrence : calculer xn+1 3.
2. Calculer xn+1 3 32 (xn 3).
3. Rcurrence.
Correction de lexercice 1 N
1.
2.
3.
Correction de lexercice 2 N
1. (a) est fausse. Car sa ngation qui est x R y R x + y 0 est vraie. tant donn x R il existe
toujours un y R tel que x + y 0, par exemple on peut prendre y = (x + 1) et alors x + y = x x 1 =
1 0.
2. (b) est vraie, pour un x donn, on peut prendre (par exemple) y = x + 1 et alors x + y = 1 > 0. La
ngation de (b) est x R y R x + y 0.
3. (c) : x R y R
R x + y 0.
y2 x.
Correction de lexercice 3 N
1. Cette proposition est vraie. En effet soit > 0, dfinissons M1 = ( 2 , 0) F1 et M2 = ( 2 , 2 ) F2 , alors
M1 M2 = 2 < . Ceci tant vrai quelque soit > 0 la proposition est donc dmontre.
2. Soit deux points fixs M1 , M2 vrifiant cette proposition, la distance d = M1 M2 est aussi petite que lon
veut donc elle est nulle, donc M1 = M2 ; or les ensembles F1 et F2 sont disjoints. Donc la proposition est
fausse. La ngation de cette proposition est :
M1 F1 M2 F2
]0, +[
M1 M2 >
M1 M2 >
Cest--dire que lon peut trouver deux points aussi loigns lun de lautre que lon veut.
4. Cette proposition est vraie, il suffit de choisir = M1 M2 + 1. Elle signifie que la distance entre deux
points donns est un nombre fini !
Correction de lexercice 4 N
Il existe un habitant de la rue du Havre qui a les yeux bleus, qui ne gagnera pas au loto ou qui prendra sa
retraite aprs 50 ans.
Correction de lexercice 5 N
1. Il existe un triangle rectangle qui na pas dangle droit." Bien sr cette dernire phrase est fausse !
2. Il existe une curie dans laquelle il y a (au moins) un cheval dont la couleur nest pas noire."
3. Sachant que la proposition en langage mathmatique scrit
x Z y Z z Z (z < x z < x + 1),
la ngation est
x Z y Z z Z (z < x et z x + 1).
6
4. > 0 > 0
Correction de lexercice 6 N
1. M R
x R
2. M R
m R
f (x) M ;
x R
3. x R
f (x) = f (x) ;
4. x R
f (x) = f (x) ;
5. x R
f (x) 6= 0 ;
6. a R
x R
m f (x) M ;
f (x + a) = f (x) ;
7. (x, y)
R2
(x y f (x) f (y)) ;
8. (x, y)
R2
9. x R
f (x) 6= 0 ;
10. (x, y)
R2
11. n N
x R
(x 6= y f (x) 6= f (y)) ;
f (x) = n ;
12. x R
f (x) g(x) ;
13. x R
Correction de lexercice 7 N
Dans ce corrig, nous donnons une justification, ce qui ntait pas demand.
1. Cette assertion se dcompose de la manire suivante : ( Pour tout x R) ( f (x) 1). La ngation de (
Pour tout x R)" est Il existe x R" et la ngation de ( f (x) 1)" est f (x) > 1. Donc la ngation de
lassertion complte est : Il existe x R, f (x) > 1".
2. Rappelons comment se traduit lassertion Lapplication f est croissante" : pour tout couple de rels
(x1 , x2 ), si x1 x2 alors f (x1 ) f (x2 )". Cela se dcompose en : (pour tout couple de rels x1 et x2 )
(x1 x2 implique f (x1 ) f (x2 ))". La ngation de la premire partie est : (il existe un couple de rels
(x1 , x2 ))" et la ngation de la deuxime partie est : (x1 x2 et f (x1 ) > f (x2 ))". Donc la ngation de
lassertion complte est : Il existe x1 R et x2 R tels que x1 x2 et f (x1 ) > f (x2 )".
3. La ngation est : lapplication f nest pas croissante ou nest pas positive". On a dj traduit lapplication f nest pas croissante", traduisons lapplication f nest pas positive" : il existe x R, f (x) < 0".
Donc la ngation de lassertion complte est : Il existe x1 R et x2 R tels que x1 < x2 et f (x1 ) f (x2 ),
ou il existe x R, f (x) < 0".
4. Cette assertion se dcompose de la manire suivante : (Il existe x R+ ) ( f (x) 0)". La ngation de la
premire partie est : (pour tout x R+ )", et celle de la seconde est :( f (x) > 0)". Donc la ngation de
lassertion complte est : Pour tout x R+ , f (x) > 0".
5. Cette assertion se dcompose de la manire suivante : (x R)(y R)(x < y f (x) > f (y))". La
ngation de la premire partie est (x R)", celle de la seconde est (y R)", et celle de la troisime
est (x < y et f (x) f (y))". Donc la ngation de lassertion complte est : x R, y Rtelsquex <
y et f (x) f (y)".
Correction de lexercice 8 N
Remarquons dabord que pour n N,
2n+1
n+2
2n + 1
< 2+
n+2
2n + 1
n+2
soit vraie.
2 <
2n + 1
(2 )(n + 2) < 2n + 1
n+2
3 < (n + 2)
3
n > 2
Ici nous est donn, nous prenons un N N tel que N > 3 2, alors pour tout n N nous avons n N > 3 2
et par consquent : 2 < 2n+1
n+2 . Conclusion : tant donn > 0, nous avons trouv un N N tel que pour tout
2n+1
n N on ait 2 < 2n+1
et
n+2
n+2 < 2 + .
En fait nous venons de prouver que la limite de la suite de terme (2n + 1)/(n + 2) tend vers 2 quand n tend vers
+.
Correction de lexercice 9 N
x {(A B) x
/ AB
x
/ A et x
/B
x {A et x {B
x {A {B.
x {(A B) x
/ AB
x
/ A ou x
/B
x {A ou x {
x {A {B.
Correction de lexercice 10 N
Nous allons dmontrer lassertion 1. de deux manires diffrentes.
1. Tout dabord de faon directe". Nous supposons que A et B sont tels que A B = A B. Nous devons
montrer que A = B.
Pour cela tant donn x A montrons quil est aussi dans B. Comme x A alors x A B donc x A B
(car A B = A B). Ainsi x B.
Maintenant nous prenons x B et le mme raisonnement implique x A. Donc tout lment de A est
dans B et tout lment de B est dans A. Cela veut dire A = B.
2. Ensuite, comme demand, nous le montrons par contraposition. Nous supposons que A 6= B et non devons
montrer que A B 6= A B.
Si A 6= B cela veut dire quil existe un lment x A \ B ou alors un lment x B \ A. Quitte changer
A et B, nous supposons quil existe x A \ B. Alors x A B mais x
/ A B. Donc A B 6= A B.
Correction de lexercice 11 N
Montrons quelques assertions.
f (A B) f (A) f (B).
Si y f (A B), il existe x A B tel que y = f (x), or x A donc y = f (x) f (A) et de mme x B donc
y f (B). Do y f (A) f (B). Tout lment de f (A B) est un lment de f (A) f (B) donc f (A B)
f (A) f (B).
8
x E \ f 1 (A)
Correction de lexercice 12 N
I = [0, 2] et J = ]1, +[ .
Correction de lexercice 13 N
Par labsurde, supposons quil existe p N tel que f = f p . Deux applications sont gales si et seulement si
elles prennent les mmes valeurs.
n N f (n) = f p (n).
En particulier pour n = p, f (p) = f p (p). Dautre part la dfinition de f nous donne f (p) = f p (p) + 1. Nous
obtenons une contradiction car f (p) ne peut prendre deux valeurs distinctes. En conclusion, quelque soit p N,
f 6= f p .
Correction de lexercice 14 N
1. Montrons en fait la contrapose.
Sil existe i tel que pi divise N = p1 p2 . . . pr + 1 (i est fix) alors il existe k Z tel que N = kpi donc
pi (k p1 p2 . . . pi1 pi+1 . . . pr ) = 1
soit pi q = 1 (avec q = k p1 p2 . . . pi1 pi+1 . . . pr un nombre entier). Donc pi Z et 1/pi = q Z, alors
pi vaut 1 ou 1. Et donc pi nest pas un nombre premier.
Conclusion : par contraposition il est vrai que N nest divisible par aucun des pi
2. Raisonnons par labsurde : sil nexiste quun nombre fini r de nombres premiers p1 , . . . , pr alors N =
p1 p2 . . . pr + 1 est un nombre premier car divisible par aucun nombre premier autre que lui mme (cest
le 1.).
Mais N est strictement suprieur tous les pi . Conclusion on a construit un nombre premier N diffrent
des pi , il y a donc au moins r + 1 nombres premiers, ce qui est absurde.
Correction de lexercice 15 N
Rdigeons la deuxime galit. Soit An , n N lassertion suivante :
n
(An )
k2 =
k=1
n(n + 1)(2n + 1)
.
6
k2 =
k2
k=1
k=1
+ (n + 1)2
n(n + 1)(2n + 1)
+ (n + 1)2
6
n(n + 1)(2n + 1) + 6(n + 1)2
=
6
(n + 1)(n(2n + 1) + 6(n + 1))
=
6
(n + 1)(n + 2)(2(n + 1) + 1)
=
6
=
Correction de lexercice 17 N
1. Montrons par rcurrence n N xn > 3. Soit lhypothse de rcurrence :
(Hn ) :
xn > 3.
2xn 2 3
2xn 2 3xn 9
3 =
.
xn + 2
xn + 2
Par hypothse de rcurrence xn > 3, donc xn + 2 > 0 et 2xn 2 3xn 9 > 0 (ceci par tude de la fonction
x 7 2x2 3x 9 pour x > 3). Donc xn+1 3 et Hn+1 est vraie.
Nous avons montrer
n N Hn Hn+1
et comme H0 est vraie alors Hn est vraie quelque soit n. Ce qui termine la dmonstration.
10
3 n
+ 3.
2
n
3
(Hn ) xn >
+ 3.
2
La proposition H0 est vraie.
Soit n 0, supposons que Hn vraie et montrons que Hn+1 est vrifie.
Daprs la question prcdente xn+1 3 > 23 (xn 3) et par hypothse de rcurrence xn >
n
n+1
runissant ces deux ingalits nous avons xn+1 3 > 23 ( 32 ) = 32
.
Nous concluons en rsumant la situation :
H0 est vraie, et Hn Hn+1 quelque soit n. Donc Hn est toujours vraie.
4. La suite (xn ) tend vers + et nest donc pas convergente.
11
3 n
+3;
2
en