Professional Documents
Culture Documents
Premire anne
Complments
Exo7
2
Exo7
Sommaire
2 Algorithmes et mathmatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1 Premiers pas avec Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2 criture des entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3 Calculs de sinus, cosinus, tangente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4 Les rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5 Arithmtique Algorithmes rcursifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6 Polynmes Complexit dun algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3 Cryptographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
1 Le chiffrement de Csar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2 Le chiffrement de Vigenre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3 La machine Enigma et les cls secrtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4 La cryptographie cl publique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5 Larithmtique pour RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
6 Le chiffrement RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4 La chanette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
1 Le cosinus hyperbolique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2 quation de la chanette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3 Longueur dune chanette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5 La rgle et le compas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
1 Constructions et les trois problmes grecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
2 Les nombres constructibles la rgle et au compas . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3 lments de thorie des corps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4 Corps et nombres constructibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5 Applications aux problmes grecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3
4 SOMMAIRE
1 La dichotomie
2 La mthode de la scante
3 La mthode de Newton
Dans ce chapitre nous allons appliquer toutes les notions prcdentes sur les suites et les fonctions,
la recherche des zros des fonctions. Plus prcisment, nous allons voir trois mthodes afin de
trouver des approximations des solutions dune quation du type ( f (x) = 0).
1. La dichotomie
1.1. Principe de la dichotomie
Le principe de dichotomie repose sur la version suivante du thorme des valeurs interm-
diaires :
Thorme 1
La condition f (a) f (b) 0 signifie que f (a) et f (b) sont de signes opposs (ou que lun des deux est
nul). Lhypothse de continuit est essentielle !
y y
f (b) > 0
f (a) > 0
a ` b b
x a ` x
f (a) < 0
f (b) < 0
Ce thorme affirme quil existe au moins une solution de lquation ( f (x) = 0) dans lintervalle
[a, b]. Pour le rendre effectif, et trouver une solution (approche) de lquation ( f (x) = 0), il sagit
maintenant de lappliquer sur un intervalle suffisamment petit. On va voir que cela permet dobte-
nir un ` solution de lquation ( f (x) = 0) comme la limite dune suite.
6 Zros des fonctions
Voici comment construire une suite dintervalles embots, dont la longueur tend vers 0, et conte-
nant chacun une solution de lquation ( f (x) = 0).
On part dune fonction f : [a, b] R continue, avec a < b, et f (a) f (b) 0.
Voici la premire tape de la construction : on regarde le signe de la valeur de la fonction f
applique au point milieu a+2 b .
Si f (a) f ( a+2 b ) 0, alors il existe c [a, a+2 b ] tel que f (c) = 0.
Si f (a) f ( a+2 b ) > 0, cela implique que f ( a+2 b ) f (b) 0, et alors il existe c [ a+2 b , b] tel que
f (c) = 0.
y
y
a+b
a 2
b x
f ( a+ b
2 )>0 f ( a+ b
2 )<0
a
a+b b x
2
Nous avons obtenu un intervalle de longueur moiti dans lequel lquation ( f (x) = 0) admet une
solution. On itre alors le procd pour diviser de nouveau lintervalle en deux.
Voici le processus complet :
Au rang 0 :
On pose a 0 = a, b 0 = b. Il existe une solution x0 de lquation ( f (x) = 0) dans lintervalle
[a 0 , b 0 ].
Au rang 1 :
Si f (a 0 ) f ( a0 +2 b0 ) 0, alors on pose a 1 = a 0 et b 1 = a0 +2 b0 ,
sinon on pose a 1 = a0 +2 b0 et b 1 = b.
Dans les deux cas, il existe une solution x1 de lquation ( f (x) = 0) dans lintervalle [a 1 , b 1 ].
...
Au rang n : supposons construit un intervalle [a n , b n ], de longueur b2na , et contenant une
solution xn de lquation ( f (x) = 0). Alors :
Si f (a n ) f ( a n +2 b n ) 0, alors on pose a n+1 = a n et b n+1 = a n +2 b n ,
sinon on pose a n+1 = a n +2 b n et b n+1 = b n .
Dans les deux cas, il existe une solution xn+1 de lquation ( f (x) = 0) dans lintervalle
[a n+1 , b n+1 ].
chaque tape on a
a n xn b n .
On arrte le processus ds que b n a n = b2na est infrieur la prcision souhaite.
Comme (a n ) est par construction une suite croissante, (b n ) une suite dcroissante, et (b n a n ) 0
lorsque n +, les suites (a n ) et (b n ) sont adjacentes et donc elles admettent une mme limite.
Daprs le thorme des gendarmes, cest aussi la limite disons ` de la suite (xn ). La continuit de
f montre que f (`) = limn+ f (xn ) = limn+ 0 = 0. Donc les suites (a n ) et (b n ) tendent toutes les
deux vers `, qui est une solution de lquation ( f (x) = 0).
p
1.2. Rsultats numriques pour 10
p
Nous allons calculer une approximation de 10. Soit la fonction f dfinie par f (x) = x2 10, cest
p p
une fonction continue sur R qui sannule en 10. De plus 10 est lunique solution positive de
Zros des fonctions 7
lquation ( f (x) = 0). Nous pouvons restreindre la fonction f lintervalle [3, 4] : en effet 32 = 9 10
p p
donc 3 10 et 42 = 16 10 donc 4 10. En dautre termes f (3) 0 et f (4) 0, donc lquation
( f (x) = 0) admet une solution dans lintervalle [3, 4] daprs le thorme des valeurs intermdiaires,
p p
et par unicit cest 10, donc 10 [3, 4].
p p
Notez que lon ne choisit pas pour f la fonction x 7 x 10 car on ne connat pas la valeur de 10.
Cest ce que lon cherche calculer !
3 4
x
3.125
3.25
3.5
p
3, 160 10 3, 165
p
En particulier, on vient dobtenir les deux premires dcimales : 10 = 3, 16 . . .
Nous cherchons maintenant une approximation de (1, 10)1/12 . Soit f (x) = x12 1, 10. On pose a 0 = 1
et b 0 = 1, 1. Alors f (a 0 ) = 0, 10 0 et f (b 0 ) = 2, 038 . . . 0.
8 Zros des fonctions
a0 = 1 b 0 = 1, 10
a1 = 1 b 1 = 1, 05
a2 = 1 b 2 = 1, 025
a3 = 1 b 3 = 1, 0125
a 4 = 1, 00625 b 4 = 1, 0125
a 5 = 1, 00625 b 5 = 1, 00937 . . .
a 6 = 1, 00781 . . . b 6 = 1, 00937 . . .
a 7 = 1, 00781 . . . b 7 = 1, 00859 . . .
a 8 = 1, 00781 . . . b 8 = 1, 00820 . . .
ba
10 N (b a)10 N 2n
2n
log(b a) + log(10 N ) log(2n )
log(b a) + N n log 2
N + log(b a)
n
log 2
Sachant log 2 = 0, 301 . . ., si par exemple b a 1, voici le nombre ditrations suffisantes pour avoir
une prcision de 10 N (ce qui correspond, peu prs, N chiffres exacts aprs la virgule).
Remarque
En toute rigueur il ne faut pas confondre prcision et nombre de dcimales exactes, par
exemple 0, 999 est une approximation de 1, 000 103 prs, mais aucune dcimale aprs la
virgule nest exacte. En pratique, cest la prcision qui est la plus importante, mais il est plus
frappant de parler du nombre de dcimales exactes.
Zros des fonctions 9
1.5. Algorithmes
Voici comment implmenter la dichotomie dans le langage Python. Tout dabord on dfinit une
fonction f (ici par exemple f (x) = x2 10) :
Algorithme . dichotomie.py (1)
def f(x):
return x*x - 10
def dicho(a,b,n):
for i in range(n):
c = (a+b)/2
if f(a)*f(c) <= 0:
b = c
else:
a = c
return a,b
def dichobis(a,b,prec):
while b-a>prec:
c = (a+b)/2
if f(a)*f(c) <= 0:
b = c
else:
a = c
return a,b
def dichotomie(a,b,prec):
if b-a<=prec:
return a,b
else:
c = (a+b)/2
if f(a)*f(c) <= 0:
return dichotomie(a,c,prec)
else:
10 Zros des fonctions
return dichotomie(c,b,prec)
Mini-exercices
p p
3
1. la main, calculer un encadrement 0, 1 prs de 3. Idem avec 2.
2. Calculer une approximation des solutions de lquation x3 + 1 = 3x.
3. Est-il plus efficace de diviser lintervalle en 4 au lieu den 2 ? ( chaque itration, la
dichotomie classique ncessite lvaluation de f en une nouvelle valeur a+2 b pour une
prcision amliore dun facteur 2.)
4. crire un algorithme pour calculer plusieurs solutions de ( f (x) = 0).
5. On se donne un tableau tri de taille N, rempli de nombres appartenant {1, . . . , n}.
crire un algorithme qui teste si une valeur k apparat dans le tableau et en quelle
position.
2. La mthode de la scante
a a0 a00 b
x
A 00
A0
A
Zros des fonctions 11
Proposition 1
Soit f : [a, b] R une fonction continue, strictement croissante et convexe telle que f (a) 0,
f (b) > 0. Alors la suite dfinie par
b an
a0 = a et a n+1 = a n f (a n )
f (b) f (a n )
Lhypothse f convexe signifie exactement que pour tout x, x0 dans [a, b] la scante (ou corde)
entre (x, f (x)) et (x0 , f (x0 )) est au-dessus du graphe de f .
(x0 , f (x0 ))
x
x0 x
(x, f (x))
Dmonstration
f ( b ) f ( a)
y = ( x a) + f ( a)
ba
f ( b ) f ( a )
Cette droite intersecte laxe des abscisses en (a0 , 0) qui vrifie donc 0 = (a0 a) ba + f (a),
donc a0 = a f (bb)
a
f (a) f (a).
2. Croissance de (a n ).
Montrons par rcurrence que f (a n ) 0. Cest vrai au rang 0 car f (a 0 ) = f (a) 0 par hypothse.
Supposons vraie lhypothse au rang n. Si a n+1 < a n (un cas qui savrera a posteriori jamais ra-
lis), alors comme f est strictement croissante, on a f (a n+1 ) < f (a n ), et en particulier f (a n+1 ) 0.
Sinon a n+1 a n . Comme f est convexe : la scante entre (a n , f (a n )) et ( b, f ( b)) est au-dessus
du graphe de f . En particulier le point (a n+1 , 0) (qui est sur cette scante par dfinition a n+1 )
est au-dessus du point (a n+1 , f (a n+1 )), et donc f (a n+1 ) 0 aussi dans ce cas, ce qui conclut la
rcurrence.
ba n
Comme f (a n ) 0 et f est croissante, alors par la formule a n+1 = a n f ( b ) f ( a n ) f (a n ), on obtient
que a n+1 a n .
3. Convergence de (a n ).
La suite (a n ) est croissante et majore par b, donc elle converge. Notons ` sa limite. Par
continuit f (a n ) f (`). Comme pour tout n, f (a n ) 0, on en dduit que f (`) 0. En parti-
culier, comme on suppose f ( b) > 0, on a ` < b. Comme a n `, a n+1 `, f (a n ) f (`), lgalit
b`
a n+1 = a n f (bb)
a n
f (a n ) f (a n ) devient la limite (lorsque n +) : ` = ` f ( b) f (`) f (`), ce qui
implique f (`) = 0.
Conclusion : (a n ) converge vers la solution de ( f ( x) = 0).
12 Zros des fonctions
p
2.2. Rsultats numriques pour 10
Pour a = 3, b = 4, f (x) = x2 10 voici les rsultats numriques, est aussi indique une majoration
p
de lerreur n = 10 a n (voir ci-aprs).
a0 = 3 0 0, 1666 . . .
a 1 = 3, 14285714285 . . . 1 0, 02040 . . .
a 2 = 3, 16000000000 . . . 2 0, 00239 . . .
a 3 = 3, 16201117318 . . . 3 0, 00028 . . .
a 4 = 3, 16224648985 . . . 4 3, 28 . . . 105
a 5 = 3, 16227401437 . . . 5 3, 84 . . . 106
a 6 = 3, 16227723374 . . . 6 4, 49 . . . 107
a 7 = 3, 16227761029 . . . 7 5, 25 . . . 108
a 8 = 3, 16227765433 . . . 8 6, 14 . . . 109
a0 = 1 0 0, 0083 . . .
a 1 = 1, 00467633 . . . 1 0, 0035 . . .
a 2 = 1, 00661950 . . . 2 0, 0014 . . .
a 3 = 1, 00741927 . . . 3 0, 00060 . . .
a 4 = 1, 00774712 . . . 4 0, 00024 . . .
a 5 = 1, 00788130 . . . 5 0, 00010 . . .
a 6 = 1, 00793618 . . . 6 4, 14 . . . 105
a 7 = 1, 00795862 . . . 7 1, 69 . . . 105
a 8 = 1, 00796779 . . . 8 6, 92 . . . 106
Proposition 2
Soit f : I R une fonction drivable et ` tel que f (`) = 0. Sil existe une constante m > 0 telle
que pour tout x I, | f 0 (x)| m alors
| f (x)|
| x `| pour tout x I.
m
Dmonstration
p
Exemple 1. Erreur pour 10
Soit f (x) = x2 10 et lintervalle I = [3, 4]. Alors f 0 (x) = 2x donc | f 0 (x)| 6 sur I. On pose donc
p
m = 6, ` = 10, x = a n . On obtient lestimation de lerreur :
| f (a n )| |a2n 10|
n = |` a n | =
m 6
p |3,172 10|
Par exemple on a trouv a 2 = 3, 16... 3, 17 donc 10 a 2 6 = 0, 489.
p |a28 10|
Pour a 8 on a trouv a 8 = 3, 1622776543347473 . . . donc 10 a 8 6 = 6, 14 . . . 109 . On a
en fait 7 dcimales exactes aprs la virgule.
Dans la pratique, voici le nombre ditrations suffisantes pour avoir une prcision de 10n pour
cet exemple. Grosso-modo, une itration de plus donne une dcimale supplmentaire.
1010 ( 10 dcimales) 10 itrations
10100 ( 100 dcimales) 107 itrations
101000 ( 1000 dcimales) 1073 itrations
On pose f (x) = x12 1, 10, I = [1; 1, 10] et ` = (1, 10)1/12 . Comme f 0 (x) = 12x11 , si on pose de plus
m = 12, on a | f 0 (x)| m pour x I. On obtient
|a12
n 1, 10|
n = |` a n | .
12
Par exemple a 8 = 1.0079677973185432 . . . donc
|a12
8 1, 10|
|(1, 10)1/12 a 8 | = 6, 92 . . . 106 .
12
2.5. Algorithme
Voici lalgorithme : cest tout simplement la mise en uvre de la suite rcurrente (a n ).
Algorithme . secante.py
def secante(a,b,n):
for i in range(n):
a = a-f(a)*(b-a)/(f(b)-f(a))
return a
Mini-exercices
p p
3
1. la main, calculer un encadrement 0, 1 prs de 3. Idem avec 2.
2. Calculer une approximation des solutions de lquation x3 + 1 = 3x.
3. Calculer une approximation de la solution de lquation (cos x = 0) sur [0, ]. Idem avec
(cos x = 2 sin x).
14 Zros des fonctions
4. tudier lquation (exp( x) = ln(x)). Donner une approximation de la (ou des) solu-
tion(s) et une majoration de lerreur correspondante.
3. La mthode de Newton
f (u n )
u 0 [a, b] et u n+1 = u n .
f 0 (u n )
Dmonstration
f (u n )
un
u n+1
p
3.2. Rsultats pour 10
p
Pour calculer a, on pose f (x) = x2 a, avec f 0 (x) = 2x. La suite issue de la mthode de Newton
u2 a
est dtermine par u 0 > 0 et la relation de rcurrence u n+1 = u n 2nu n . Suite qui pour cet exemple
sappelle suite de Hron et que lon rcrit souvent
1 a
u0 > 0 et u n+1 = un + .
2 un
Zros des fonctions 15
Proposition 3
p
Cette suite (u n ) converge vers a.
p
Pour le calcul de 10, on pose par exemple u 0 = 4, et on peut mme commencer les calculs la
main :
u0 = 4
1
u 0 + 10 1 10
13
u1 = 2 u 0 = 2 4 + 4 = = 3, 25
! 4
u 2 = 21 u 1 + 10 1 13 10 329
u 1 = 2 4 + 13 = 104 = 3, 1634 . . .
4
u 3 = 21 u 2 + 10
u2 = 216 401
68 432 = 3, 16227788 . . .
u 4 = 3, 162277660168387 . . .
p
Pour u 4 on obtient 10 = 3, 1622776601683 . . . avec dj 13 dcimales exactes !
p
Voici la preuve de la convergence de la suite (u n ) vers a.
Dmonstration
1 a
u0 > 0 et u n+1 = un + .
2 un
p
1. Montrons que u n a pour n 1.
Tout dabord
2
1 u2n + a 1 1 ( u2n a)2
u2n+1 a = a= ( u 4
n 2 au 2
n + a 2
) =
4 un 4 u2n 4 u2n
Donc u2n+1 a 0. Comme il est clair que pour tout n 0, u n 0, on en dduit que pour tout
p
n 0, u n+1 a. (Notez que u 0 lui est quelconque.)
2. Montrons que ( u n)n1 est
une suite dcroissante qui converge.
Comme uun+n 1 = 12 1 + a2 , et que pour n 1 on vient de voir que u2n a (donc a
1), alors
un u2n
u n+1
un 1, pour tout n 1.
Consquence : la suite ( u n )n1 est dcroissante et minore par 0 donc elle converge.
p
3. ( u n ) converge vers a.
Notons
` la
limite de ( u n ). Alors u n ` et u n+1 `. Lorsque n + dans la relation u n+1 =
1 a 1 a
` ` . Ce qui conduit la relation `2 = a et par positivit de la
2 u n + un , on obtient = 2 + `
p
suite, ` = a.
1 a
u 0 > 0 et u n+1 = 11u n + 11 .
12 un
Voici les rsultats numriques pour (1, 10)1/12 en partant de u 0 = 1.
u0 = 1
u 1 = 1, 0083333333333333 . . .
u 2 = 1, 0079748433368980 . . .
u 3 = 1, 0079741404315996 . . .
u 4 = 1, 0079741404289038 . . .
16 Zros des fonctions
Toutes les dcimales affiches pour u 4 sont exactes : (1, 10)1/12 = 1, 0079741404289038 . . .
p
3.4. Calcul de lerreur pour 10
Proposition 4
p
1. Soit k tel que u 1 a k. Alors pour tout n 1 :
2n1
p p k
un a 2 a p
2 a
2. Pour a = 10, u 0 = 4, on a :
2n1
p 1
u n 10 8
24
Dmonstration
1
!2n1 2n1
p 1
4
un a 2 4 =8 .
23 24
Zros des fonctions 17
3.5. Algorithme
p
Voici lalgorithme pour le calcul de a. On prcise en entre le rel a 0 dont on veut calculer la
racine et le nombre n ditrations.
Algorithme . newton.py
def racine_carree(a,n):
u=4 # N'importe qu'elle valeur > 0
for i in range(n):
u = 0.5*(u+a/u)
return u
p
En utilisant le module decimal le calcul de u n pour n = 11 donne 1000 dcimales de 10 :
3,
16227766016837933199889354443271853371955513932521
68268575048527925944386392382213442481083793002951
87347284152840055148548856030453880014690519596700
15390334492165717925994065915015347411333948412408
53169295770904715764610443692578790620378086099418
28371711548406328552999118596824564203326961604691
31433612894979189026652954361267617878135006138818
62785804636831349524780311437693346719738195131856
78403231241795402218308045872844614600253577579702
82864402902440797789603454398916334922265261206779
26516760310484366977937569261557205003698949094694
21850007358348844643882731109289109042348054235653
40390727401978654372593964172600130699000095578446
31096267906944183361301813028945417033158077316263
86395193793704654765220632063686587197822049312426
05345411160935697982813245229700079888352375958532
85792513629646865114976752171234595592380393756251
25369855194955325099947038843990336466165470647234
99979613234340302185705218783667634578951073298287
51579452157716521396263244383990184845609357626020
Mini-exercices
p
1. la calculette, calculer les trois premires tapes pour une approximation de 3, sous
p3
forme de nombres rationnels. Idem avec 2.
2. Implmenter la mthode de Newton, tant donnes une fonction f et sa drive f 0 .
3. Calculer une approximation des solutions de lquation x3 + 1 = 3x.
4. Soit a > 0. Comment calculer a1 par une mthode de Newton ?
p
5. Calculer n de sorte que u n 10 10` (avec u 0 = 4, u n+1 = 12 u n + uan , a = 10).
18 Zros des fonctions
Auteurs
2 Algorithmes et mathmatiques
>>> 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
20 Algorithmes et mathmatiques
Travaux pratiques 2
1.
Algorithme . somme-cubes.py (1)
n = 10
somme = 0
for i in range(1,n+1):
somme = somme + i*i*i
print(somme)
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 :
Algorithme . somme-cubes.py (3)
def somme_cubes(n):
somme = 0
for i in range(1,n+1):
somme = somme + i**3
return somme
2
n( n+1)
4. Et enfin on vrifie que pour les premiers entiers S n = 2 , par exemple pour n = 12 :
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.
(0, 1)
(0, 0) (1, 0)
Travaux pratiques 3
Voici le code :
Algorithme . pi-hasard.py
Commentaires :
Un petit calcul prouve que laire de la portion de disque est 4 , laire du carr est 1. Donc la
probabilit de tomber dans le disque est 4 .
Pour tirer un nombre au hasard on utilise une fonction random() qui renvoie un nombre rel
de lintervalle [0, 1[. Bien sr chaque appel de la fonction random() le nombre obtenu est
diffrent !
Cette fonction nest pas connue par dfaut de Python, il faut lui indiquer le nom du module
o elle se trouve. En dbut de fichier on ajoute import random pour le module qui gre
les tirages au hasard. Et pour indiquer quune fonction vient dun module il faut lappeler
Algorithmes et mathmatiques 23
par module.fonction() donc ici random.random() (module et fonction portent ici le mme
nom !).
La boucle est while condition: ... Tant que la condition est vrifie les instructions de la
boucle sont excutes. Ici Tir est le compteur que lon a initialis 0. Ensuite on commence
excuter la boucle. Bien sr la premire chose que lon fait dans la boucle est dincrmenter
le compteur Tir. On 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 .
Mini-exercices
a = bq + r et 0r<b
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.
Algorithme . 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.
Algorithmes et mathmatiques 25
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 correspon-
dant.
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 ].
def chiffres_vers_entier(tab):
N = 0
for i in range(len(tab)):
N = N + tab[i] * (10 ** i)
return N
Expliquons les bases sur les listes (qui sappelle aussi des tableaux)
En Python une liste est prsente entre des crochets. Par exemple pour tab = [4,3,2,1]
alors on accde aux valeurs par tab[i] : tab[0] vaut 4, tab[1] vaut 3, tab[2] vaut 2,
tab[3] vaut 1.
Pour parcourir les lments dun tableau le code est simplement for x in tab, x vaut alors
successivement 4, 3, 2, 1.
La longueur du tableau sobtient par len(tab). Pour notre exemple len([4,3,2,1]) vaut 4.
Pour parcourir toutes les valeurs dun tableau on peut donc aussi crire for i in range(len(tab)),
puis utiliser tab[i], ici i variant ici de 0 3.
La liste vide est seulement note avec deux crochets : []. Elle est utile pour initialiser une
liste.
Pour ajouter un lment une liste tab existante on utilise la fonction append. Par exemple
dfinissons la liste vide tab=[], pour ajouter une valeur la fin de la liste on saisit :
tab.append(4). Maintenant notre liste est [4], elle contient un seul lment. Si on conti-
nue avec tab.append(3). Alors maintenant notre liste a deux lments : [4, 3].
Voici lcriture dun entier en base 10 :
26 Algorithmes et mathmatiques
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.
abs(x) | x|
x ** n xn
p
sqrt(x) x
exp(x) exp x
log(x) ln x logarithme nprien
log(x,10) log x logarithme dcimal
cos(x), sin(x), tan(x) cos x, sin x, tan x en radians
acos(x), asin(x), atan(x) arccos x, arcsin x, arctan x en radians
floor(x) partie entire E(x) :plus grand entier n x (floor = plancher)
ceil(x) plus petit entier n x (ceil = plafond)
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).
Algorithmes et mathmatiques 27
0 1 2 3 4 5 6 7
On numrote les lampes de 0 7. On souhaite contrler cette rampe : afficher toutes les combinai-
sons 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.
N = a n 2n + a n1 2n1 + + a 2 22 + a 1 2 + a 0 et a i {0, 1}
On note alors N = a n a n1 . . . a 1 a 0 b (avec un indice b pour indiquer que cest son criture binaire).
Travaux pratiques 6
1. crire une fonction qui partir dune liste [a 0 , a 1 , . . . , a n ] calcule lentier N correspon-
dant 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.
Algorithme . 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.
Algorithme . binaire.py (2)
def entier_vers_binaire(N):
tab = []
n = floor(log(N,2)) # le nombre de chiffres est n+1
28 Algorithmes et mathmatiques
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
Travaux pratiques 7
1. Faire une boucle qui affiche toutes les combinaisons possibles (pour une taille de rampe
donne).
2. Quelle opration mathmatique lmentaire transforme un nombre binaire a n . . . a 1 a 0 b
en a n . . . a 1 a 0 0 b (dcalage vers la gauche et ajout dun 0 la fin) ?
3. Soit N 0 = a n a n1 . . . a 1 a 0 0 b (une criture avec n + 2 chiffres). Quelle est lcriture binaire
de N 0 (mod 2n+1 ) ? (Cest une criture avec n + 1 chiffres.)
4. En dduire un algorithme qui pour une configuration donne de la rampe, fait permuter
cycliquement (vers la droite) cette configuration. Par exemple [1, 0, 1, 0, 1, 1, 1, 0] devient
[0, 1, 0, 1, 0, 1, 1, 1].
5. Quelle opration mathmatique lmentaire permet de passer dune configuration son
oppose (une lampe teinte sallume, et rciproquement). Par exemple si la configuration
tait [1, 0, 1, 0, 1, 1, 1, 0] alors on veut [0, 1, 0, 1, 0, 0, 0, 1]. (Indication : sur cet exemple
calculer les deux nombres correspondants et trouver la relation qui les lie.)
1. Il sagit dabord dafficher les configurations. Par exemple si lon a 4 lampes alors les configu-
rations sont [0, 0, 0, 0], [1, 0, 0, 0], [0, 1, 0, 0], [1, 1, 0, 0],. . . , [1, 1, 1, 1]. Pour chaque lampe nous
avons deux choix (allum ou teint), il y a n + 1 lampes donc un total de 2n+1 configurations.
Si lon considre ces configurations comme des nombres crits en binaire alors lnumration
ci-dessus correspond compter 0, 1, 2, 3, . . . , 2n+1 1.
Do lalgorithme :
Algorithme . binaire.py (3)
def configurations(n):
for N in range(2**(n+1)):
print(entier_vers_binaire_bis(N,n))
revient sur lcriture un dcalage vers la gauche et ajout dun zro sur le chiffre des units.
Exemple : 19 = 10011b et 2 19 = 38 donc 2 10011b = 100110b .
3. Partant de N = a n a n1 . . . a 1 a 0 b . Notons N 0 = 2N, son criture est N 0 = a n a n1 . . . a 1 a 0 0 b .
Alors N 0 (mod 2n+1 ) scrit exactement a n1 a n2 . . . a 1 a 0 0 b et on ajoute a n qui est le quotient
de N 0 par 2n+1 .
Preuve : N 0 = a n 2n+1 + a n1 2n + + a 0 2. Donc N 0 (mod 2n+1 ) = a n1 2n + + a 0 2. Donc
N 0 (mod 2n+1 ) + a n = a n1 2n + + a 0 2 + a n .
4. Ainsi lcriture en binaire de N 0 (mod 2n+1 ) + a n sobtient comme permutation circulaire de
celle de N. Do lalgorithme :
Algorithme . 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 :
Algorithme . 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)
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,
30 Algorithmes et mathmatiques
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]].
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.
+ x2k+1 x3 x5 x7
(1)k
X
arctan x = = x + +
k=0 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 ?
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
des termes (1)k 2xk+1 est trs trs petit ds que k devient grand. Par exemple si 0 x 10 1
Algorithmes et mathmatiques 31
2 k+1
alors 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
3 5 7
arctan x ' 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.
Mn
M n1
M2
M1
a
i n
i2
i1
O 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
! ! ! (
x0 cos sin x x0 = x cos y sin
0 = cest--dire
y 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
O M
O xn
32 Algorithmes et mathmatiques
Travaux pratiques 9
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 .
Ainsi (
x00 = cos1 x0 = cos1 x cos y sin = x y tan
Autrement dit : ! ! !
x00 1 tan x
=
y00 tan 1 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 ,...
Algorithme . tangente.py (2)
i = 0
while (a > precision): # boucle tant que la precision pas atteinte
while (a < theta[i]): # choix du bon angle theta_i soustraire
i = i+1
a = a - theta[i] # on retire l'angle theta_i et on recommence
Ici precision est la prcision souhait (pour nous 109 ). Et le tableau theta contient les valeurs
des angles i . !
x0
Posons x0 = 1, y0 = 0 et M0 = . Alors on dfinit par rcurrence M k+1 = P( i ) M k o P( ) =
y0
!
1 tan
. Les i sont ceux apparaissant dans la dcomposition de langle en somme de
tan 1
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
y
La valeur xnn est la tangente de la somme des angles i , donc une approximation de tan a.
Le code est maintenant le suivant.
Algorithmes et mathmatiques 33
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] # on retire l'angle theta_i
newx = x - (10**(-i))*y # on calcule le nouveau point
newy = (10**(-i))*x + y
x = newx
y = newy
a = newa
return y/x # on renvoie la tangente
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.
1
Solution : On sait cos2 + sin2 x = 1, donc en divisant par cos2 x on trouve 1 + tan2 x = cos2 x
. On en
dduit que pour 0 x 2 cos x = p 1 2 . On trouve de mme sin x = p tan x 2 .
1+tan x 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 ].
Mini-exercices
4. 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.
Travaux pratiques 11
dcimales.
def euler1(n):
somme = 0
for i in range(n,0,-1):
somme = somme + 1/i
return somme - log(n)
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.
Algorithmes et mathmatiques 35
C
|wn |
e4n
Voici le code :
Algorithme . 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)
Pour obtenir N dcimales il faut rsoudre linquation eC4n 101N . On passe au log pour obtenir
n N ln(10)4 +ln(C ) . 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
35988057672348848677267776646709369470632917467495
14631447249807082480960504014486542836224173997644
92353625350033374293733773767394279259525824709491
60087352039481656708532331517766115286211995015079
84793745085705740029921354786146694029604325421519
05877553526733139925401296742051375413954911168510
28079842348775872050384310939973613725530608893312
36 Algorithmes et mathmatiques
67600172479537836759271351577226102734929139407984
30103417771778088154957066107501016191663340152278
93586796549725203621287922655595366962817638879272
68013243101047650596370394739495763890657296792960
10090151251959509222435014093498712282479497471956
46976318506676129063811051824197444867836380861749
45516989279230187739107294578155431600500218284409
60537724342032854783670151773943987003023703395183
28690001558193988042707411542227819716523011073565
83396734871765049194181230004065469314299929777956
93031005030863034185698032310836916400258929708909
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.
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
Voici le code :
Algorithme . reels.py (1)
Absorption
Travaux pratiques 15
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
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 daf-
fichage (exemple : on calcule avec 10 chiffres aprs la virgule) avec lexactitude du rsultat
(combien de dcimales sont vraiment exactes ?).
Enfin le problme le plus troublant est que les nombres flottants sont stocks en criture binaire
et pas en criture dcimale.
38 Algorithmes et mathmatiques
Travaux pratiques 17
La raison est simple mais nanmoins troublante. Lordinateur ne stocke pas 0, 1, ni 0, 2 en mmoire
mais le nombre en criture binaire qui sen rapproche le plus.
En criture dcimale, il est impossible de coder 1/3 = 0, 3333 . . . avec un nombre fini de chiffres
aprs la virgule. Il en va de mme ici : lordinateur ne peut pas stocker exactement 0, 2. Il stocke un
nombre en criture binaire qui sen rapproche le plus ; lorsquon lui demande dafficher le nombre
stock, il retourne lcriture dcimale qui se rapproche le plus du nombre stock, mais ce nest plus
0, 2, mais un nombre trs trs proche :
0.2000000000000000111022302. . .
Travaux pratiques 18
1
1. Faire une fonction qui calcule la somme S n = 12
+ 212 + 312 + + n12 .
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.
def somme_inverse_carres_tronq(n):
somme = 0
for i in range(1,n+1):
somme = tronquer(somme + tronquer(1/(i*i)))
return somme
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 tron-
que, 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
2
grand 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.
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
f (u )
u 0 = 4) et u n+1 = u n f 0 (unn ) .
2. Pour chacune des trois mthodes, calculer le nombre approximatif ditrations nces-
saires pour obtenir 100 dcimales de la constante dEuler.
k)!]3 An Cn
3. Notons C n = 41n 2kn=0 (k!)[(2
4 (16 n)2 k . La formule de Brent-McMillan affirme = B B2
P
n n
ln n + O( e18n ) 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 ?
1
4. Faire une fonction qui renvoie le terme u n de la suite dfinie par u 0 = 3 et u n+1 = 4u n 1.
Que vaut u 100 ? Faire ltude mathmatique et commenter.
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!
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 :
factorielle(5) = 5 * factorielle(4) = 5 * 4 * factorielle(3) = 5 * 4 * 3 * factorielle(2)
et enfin factorielle(5) = 5 * 4 * 3 * 2 * factorielle(1). Pour factorielle(1) la condi-
tion du if (n==1) est vrifie et alors factorielle(1)=1. Le bilan est donc que factorielle(5) = 5 * 4 * 3 *
cest bien 5!
Une fonction qui lorsque elle sexcute sappelle elle-mme est une fonction rcursive. Il y a une
analogie trs forte avec la rcurrence. Par exemple on peut dfinir la suite des factorielles ainsi :
u1 = 1 et u n = n u n1 si n 2.
def fibonacci(n):
if (n==0) or (n==1):
return 1
else:
return fibonacci(n-1)+fibonacci(n-2)
F0 = 1, F1 = 1 et F n = F n1 + F n2 si n 2.
1 1 2 3 5 8 13 21 34 ...
Travaux pratiques 19
Voici le code pour lalgorithme dEuclide rcursif. Notez quel point le code est succinct et pur !
Algorithme . 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 :
Algorithme . 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)
42 Algorithmes et mathmatiques
if pgcd(a,b)==1:
nbpremiers = nbpremiers + 1
return nbpremiers
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 .
Travaux pratiques 20
1. crire une fonction qui dtecte si un nombre n est premier ou pas en testant sil existe
p
des entiers 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 2 11
7 8 9 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
p
(sinon n = a b > n). Donc il suffit de tester les diviseurs 2 k n. Do lalgorithme :
Algorithmes et mathmatiques 43
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 beau-
coup 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.
2. Pour le crible dEratosthne le plus dur est de trouver le bon codage de linformation.
Algorithme . 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
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).
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 //).
2. crire une version itrative de la suite de Fibonacci.
3. crire une version itrative de lalgorithme dEuclide. Faire une version qui calcule les
coefficients de Bzout.
4. crire une fonction itrative, puis rcursive, qui pour un entier n renvoie la liste de ses
diviseurs. Dessiner une spirale dUlam, dont lintensit de la couleur dpend du nombre
de diviseurs.
5. Une suite de Syracuse est dfinie ainsi : partant dun entier sil est pair on le divise par
deux, sil est impair on le multiplie par 3 et on ajoute 1. On itre ce processus. Quelle
conjecture peut-on faire sur cette suite ?
Algorithmes et mathmatiques 45
1
6. Dessiner le triangle de Pascal 1 1 Ensuite effacer tous les coefficients pairs (ou
1 2 1
mieux : remplacer les coefficients pairs par un carr blanc et les coefficients impairs par
un carr rouge). Quelle figure reconnaissez-vous ?
6.2. Polynmes
Travaux pratiques 21
1. La seule difficult est de grer les indices, en particulier on ne peut appeler un lment
dune liste en dehors des indices o elle est dfinie. Une bonne ide consiste commencer
par dfinir une fonction degre(poly), qui renvoie le degr du polynme (attention au 0 non
significatifs).
Voici le code dans le cas simple o deg A = deg B :
46 Algorithmes et mathmatiques
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
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.
Algorithmes et mathmatiques 47
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.
Algorithme . 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 multi-
plication 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).
P = P1 + P2 X n et Q = Q1 + Q2 X n
Travaux pratiques 22
1. crire une formule qui rduit la multiplication des polynmes P et Q de degrs stricte-
ment infrieurs 2n en multiplications de polynmes de degrs strictement infrieurs
n.
2. Programmer un algorithme rcursif de multiplication qui utilise la formule prcdente.
Quelle est sa complexit ?
3. On peut raffiner cette mthode avec la remarque suivante de Karatsuba : le terme
intermdiaire de P Q scrit
P1 Q 2 + P2 Q 1 = (P1 + P2 ) (Q 1 + Q 2 ) P1 Q 1 P2 Q 2
(P1 + X n P2 ) (Q 1 + X n Q 2 ) = P1 Q 1 + X n (P1 Q 2 + P2 Q 1 ) + X 2n P2 Q 2
def decoupe(P,n):
if (degre(P)<n): return P, [0]
else: return P[0:n], P[n:]
def produit_assez_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_assez_rapide(P1,Q1) # produits en petits degrs
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) # dcalages
R2 = produit_monome(P2Q2,2*n)
return somme(P1Q1,somme(R1,R2)) # 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 rsolu-
tion.
3.
Algorithme . 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
C(n) = 3 C(n/2) + n
15 C (2` ) 2 `
o = 2 . Une mthode de rsolution est de poser ` = 3`
qui vrifie ` = `1 + 3 .
50 Algorithmes et mathmatiques
` 2 k
`+1 !
X 2
` = + 0 = 3 1 +1
k=1 3 3
puis pour n = 2` :
ln 3 ln 3
C(n) = C(2` ) = 3` ` = (3`+1 2`+1 ) + (1 )3` = O(3` ) = O(2` ln 2 ) = O(n ln 2 )
ln 3
La complexit de la multiplication de Karatsuba est donc O(n ln 2 ) ' O(n1.585 ).
Mini-exercices
+ x0 (a n1 + a n x0 ) (mthode de Horner).
3. Comment trouver le maximum dune liste ? Montrer que votre mthode est de com-
plexit 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
3 Cryptographie
1 Le chirement de Csar
2 Le chirement de Vigenre
3 La machine Enigma et les cls secrtes
4 La cryptographie cl publique
5 L'arithmtique pour RSA
6 Le chirement RSA
1. Le chiffrement de Csar
A 7 D 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.
52 Cryptographie
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 .
par
A 7 0 B 7 1 C 7 2 ... Z 7 25
1.3. Modulo
Soit n 2 un entier fix.
Dfinition 1
a b (mod n).
Pour nous n = 26. Ce qui fait que 28 2 (mod 26), car 28 2 est bien divisible par 26. De mme
85 = 3 26 + 7 donc 85 7 (mod 26).
On note Z/26Z lensemble de tous les lments de Z modulo 26. Cet ensemble peut par exemple
tre reprsent par les 26 lments {0, 1, 2, . . . , 25}. En effet, puisquon compte modulo 26 :
0, 1, 2, . . . , 25, puis 26 0, 27 1, 28 2, . . . , 52 0, 53 1, . . .
Cryptographie 53
Plus gnralement Z/nZ contient n lments. Pour un entier a Z quelconque, son reprsentant
dans {0, 1, 2, . . . , n 1} sobtient comme le reste k de la division euclidienne de a par n : a = bn + k.
De sorte que a k (mod n) et 0 k < n.
Ck
Z/26Z Z/26Z
Dk
54 Cryptographie
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 BRUNO
Ck Dk
2 14 20 2 14 20 13 25 5 13 25 5 13 25 5 13 25 5 2 14 20 2 14 20
Exemple 3
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).
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 :
Cryptographie 55
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 :
Algorithme . 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 :
Algorithme . cesar.py (3)
def cesar_chiffre_mot(mot,k):
message_code = [] # Liste vide
for lettre in mot: # Pour chaque lettre
nb = ord(lettre)-65 # Lettre devient nb de 0 25
nb_crypte = cesar_chiffre(nb,k) # Chiffrement de Csar
lettre_crypte = chr(nb_crypte+65) # Retour aux lettres
message_code.append(lettre_crypte) # Ajoute lettre au message
message_code = "".join(message_code) # Revient chaine caractres
return(message_code)
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.
56 Cryptographie
def cesar_attaque(mot):
for k in range(26):
print(cesar_chiffre_mot(mot,-k))
return None
2. Le chiffrement de Vigenre
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 B C D E F G H I J K L M N O P Q R S T U V W X Y Z
F Q B M X I T E P A L W H S D O Z K V G R C N Y J U
Avantage : nous allons voir que lespace des cls est gigantesque et quil nest plus question dnu-
mrer toutes les possibilits.
Inconvnients : la cl retenir est beaucoup plus longue, puisquil faut partager la cl consti-
tue des 26 lettres "FQBMX...". Mais surtout, nous allons voir que finalement ce protocole de
chiffrement est assez simple craquer .
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 nap-
paraissent 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 S A I N T R U L O D
14.69% 8.01% 7.54% 7.18% 6.89% 6.88% 6.49% 6.12% 5.63% 5.29% 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.
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,
un dcalage de n 2 pour la deuxime lettre de chaque bloc,
...
un dcalage de n k pour la k-me et dernire lettre de chaque bloc.
58 Cryptographie
Pour notre exemple, si on choisit comme cl (3, 1, 5, 2) alors pour le premier bloc "CETT" :
un dcalage de 3 pour C donne F,
un dcalage de 1 pour E donne F,
un dcalage de 5 pour le premier T donne Y,
un dcalage de 2 pour le deuxime T donne V.
Ainsi "CETT" de vient "FFYV". Vous remarquez que les deux lettres T ne sont pas cryptes par
la mme lettre et que les deux F ne cryptent pas la mme lettre. On continue ensuite avec le
deuxime bloc...
Mathmatiques
Llment de base nest plus une lettre mais un bloc, cest--dire un regroupement de lettres. La
fonction de chiffrement associe un bloc de longueur k, un autre bloc de longueur k, ce qui donne
en mathmatisant les choses :
(
Z/26Z Z/26Z Z/26Z Z/26Z Z/26Z Z/26Z
C n1 ,n2 ,...,n k :
(x1 , x2 , . . . , xk ) 7 (x1 + n 1 , x2 + n 2 , . . . , xk + n k )
Chacune des composantes de cette fonction est un chiffrement de Csar. La fonction de dchiffre-
ment est juste C n1 ,n2 ,...,n k .
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
mono-alphabtique : 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.
Algorithme . 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)
Cryptographie 59
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
60 Cryptographie
A T T A Q U E L E C H A T E A U
0 19 19 0 16 20 4 11 4 2 7 0 19 4 0 20
4 18 2 0 21 12 18 13 7 11 23 22 19 2 16 9
= 4 11 21 0 11 6 22 24 11 13 4 22 12 6 16 3
E L V A L G W Y L N E W M G Q D
Ce systme appel "masque jetable" ou chiffrement de Vernam est parfait en thorie, mais sa
mise en uvre nest pas pratique du tout ! Tout dabord il faut que la cl soit aussi longue que le
message. Pour un message court cela ne pose pas de problme, mais pour envoyer une image par
exemple cela devient trs lourd. Ensuite, il faut trouver un moyen sr denvoyer la cl secrte
son interlocuteur avant de lui faire parvenir le message. Et il faut recommencer cette opration
chaque message, ou bien se mettre daccord ds le dpart sur un carnet de cls : une longue liste
de cls secrtes.
Pour justifier que ce systme est vraiment inviolable voici une exprience amusante : Alice veut
envoyer le message M ="ATTAQUE LE CHATEAU" Bruno, elle choisit la cl secrte C=[4, 18,
2, 0,...] comme ci-dessus et obtient le message chiffr X ="ELVA..." quelle transmet Bruno.
Alice se fait kidnapper par Chlo, qui veut lobliger dchiffrer son message. Heureusement, Alice
a anticip les soucis : elle a dtruit le message M, la cl secrte C et a cr un faux message M 0 et
une fausse cl secrte C 0 . Alice fournit cette fausse cl secrte C 0 Chlo, qui dchiffre le message
par lopration X C 0 et elle trouve le message bien inoffensif M 0 :
RECETTE DE CUISINE
Alice est innocente !
Comment est-ce possible ? Alice avait au pralable prpar un message neutre M 0 de mme lon-
gueur que M et calcul la fausse cl secrte C 0 = X M 0 . Chlo a obtenu (par la contrainte) X et
C 0 , elle dchiffre le message ainsi
X C 0 = X (X M 0 ) = (X X ) M 0 = M 0
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 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.
Voici, dans ce cas, le processus de chiffrement du mot "BAC", avec la cl de chiffrement "G" :
1. Position initiale. Loprateur tourne lanneau intrieur de sorte que le A extrieur et fixe
soit en face du G intrieur (et donc B en face de W).
62 Cryptographie
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.
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 !
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
6 17 13 5 15 9 23 25 3 11 1 7 19 17 13 5
64 Cryptographie
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. Inconv-
nients : 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 dopra-
tions 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].
M1 = [D 0 k C (G 0 )]
M0 7 [5 6 7 8 k 1 2 3 4]
7 [5 6 7 8 k 2 3 4 1]
7 [5 6 7 8 k 5 4 7 3] = M1
M i+1 = [D i k C (G i )]
M0 7 [5 4 7 3 k 5 6 7 8]
7 [5 4 7 3 k 6 7 8 5]
Cryptographie 65
7 [5 4 7 3 k 9 8 1 7] = M2
4. 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.
Voici le texte original dAuguste Kerckhoffs de 1883 La cryptographie militaire paru dans le
Journal des sciences militaires.
Il traite notamment des enjeux de scurit lors des correspondances :
Il faut distinguer entre un systme dcriture chiffr, imagin pour un change
momentan de lettres entre quelques personnes isoles, et une mthode de cryptogra-
phie 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 maxi-
mum 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.
deux questions ne sont pas du mme ordre de difficult. Si je vous demande de factoriser 1591,
vous aller devoir faire plusieurs tentatives, alors que si je vous avais directement demand de
calculer 37 43 cela ne pose pas de problme.
Pour des entiers de plusieurs centaines de chiffres le problme de factorisation ne peut tre rsolu
en un temps raisonnable, mme pour un ordinateur. Cest ce problme asymtrique qui est la
base de la cryptographie RSA (que nous dtaillerons plus tard) : connatre p et q apporte plus
dinformation utilisable que p q. Mme si en thorie partir de p q on peut retrouver p et q,
en pratique ce sera impossible.
Formalisons ceci avec la notion de complexit. La complexit est le temps de calculs (ou le nombre
doprations lmentaires) ncessaire pour effectuer une opration.
Commenons par la complexit de laddition : disons que calculer la somme de deux chiffres (par
exemple 6 + 8) soit de complexit 1 (par exemple 1 seconde pour un humain, 1 milliseconde pour
un ordinateur). Pour calculer la somme de deux entiers n chiffres, la complexit est dordre
n (exemple : 1234 + 2323, il faut faire 4 additions de chiffres, donc environ 4 secondes pour un
humain).
La multiplication de deux entiers n chiffres est de complexit dordre n2 . Par exemple pour
multiplier 1234 par 2323 il faut faire 16 multiplications de chiffres (chaque chiffre de 1234 est
multiplier par chaque chiffre de 2323).
1
Par contre la meilleure mthode de factorisation connue est de complexit dordre exp(4n 3 ) (cest
moins que exp(n), mais plus que n d pour tout d, lorsque n tend vers +).
Voici un tableau pour avoir une ide de la difficult croissante pour multiplier et factoriser des
nombres n chiffres :
n multiplication factorisation
3 9 320
4 16 572
5 25 934
10 100 5 528
50 2 500 2 510 835
100 10 000 115 681 968
200 40 000 14 423 748 780
f : x 7 x3 (mod 100).
Connaissant x, trouver y = f (x) est facile, cela ncessite deux multiplications et deux divi-
sions.
Cryptographie 67
soit utiliser la trappe secrte : y 7 y7 (mod 100) qui fournit directement le rsultat !
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.)
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 ALICE
Message M Cl C Message M
Message crypt X
Chiffrement C Dchiffrement D
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),
D : x 7 x7 (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.
a p a (mod p)
et sa variante :
Corollaire 1
a p1 1 (mod p)
Nous allons voir une version amliore de ce thorme dans le cas qui nous intresse :
Soient p et q deux nombres premiers distincts et soit n = pq. Pour tout a Z tel que
pgcd(a, n) = 1 alors :
On note (n) = (p 1)(q 1), la fonction dEuler. Lhypothse pgcd(a, n) = 1 quivaut ici ce que
a ne soit divisible ni par p, ni par q. Par exemple pour p = 5, q = 7, n = 35 et (n) = 4 6 = 24. Alors
pour a = 1, 2, 3, 4, 6, 8, 9, 11, 12, 13, 16, 17, 18, ... on a bien a24 1 (mod 35).
Dmonstration
o lon appliquer le petit thorme de Fermat : a p1 1 (mod p), car p ne divise pas a.
Calculons ce mme c mais cette fois modulo q :
o lon appliquer le petit thorme de Fermat : a q1 1 (mod q), car q ne divise pas a.
Conclusion partielle : c 1 (mod p) et c 1 (mod q).
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
b i+1 a i (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
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).
Proposition 5
En dautres termes, trouver un inverse de a modulo n revient calculer les coefficients de Bzout
associs la paire (a, n).
Dmonstration
pgcd(a, n) = 1 u, v Z au + nv = 1
u Z au 1 (mod n)
Voici le code :
Algorithme . 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
511 = 58 52 51 .
i
Calculons donc les 52 (mod 14) :
5 5 (mod 14)
52 25 11 (mod 14)
54 52 52 11 11 121 9 (mod 14)
58 54 54 9 9 81 11 (mod 14)
Nous obtenons donc un calcul de 511 (mod 14) en 5 oprations au lieu de 10 si on avait fait
555.
72 Cryptographie
On obtient alors
P` i
` i
xk = x i =0 k i 2 (x2 )k i .
Y
=
i =0
Par exemple 11 en base 2 scrit (1, 0, 1, 1), donc, comme on la vu :
3 2 1 0
511 = (52 )1 (52 )0 (52 )1 (52 )1 .
Voici un autre exemple : calculons 17154 (mod 100). Tout dabord on dcompose lexposant k = 154
en base 2 : 154 = 128 + 16 + 8 + 2 = 27 + 24 + 23 + 21 , il scrit donc en base 2 : (1, 0, 0, 1, 1, 0, 1, 0).
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)
def puissance(x,k,n):
puiss = 1 # Rsultat
while (k>0):
if k % 2 != 0 : # Si k est impair (i.e. k_i=1)
puiss = (puiss*x) % n
x = x*x % n # Vaut x, x^2, x^4,...
k = k // 2
return(puiss)
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.
6. 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 !
Cryptographie 73
Dans cette section, cest Bruno qui veut envoyer un message secret Alice. La processus se dcom-
pose 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.
Alice effectue, une fois pour toute, les oprations suivantes (en secret) :
elle choisit deux nombres premiers distincts p et q (dans la pratique ce sont de trs grand
nombres, jusqu des centaines de chiffres),
Elle calcule n = p q,
Elle calcule (n) = (p 1) (q 1).
Exemple 1.
p = 5 et q = 17
n = p q = 85
(n) = (p 1) (q 1) = 64
Vous noterez que le calcul de (n) nest possible que si la dcomposition de n sous la forme p q
est connue. Do le caractre secret de (n) mme si n est connu de tous.
Exemple 2.
p = 101 et q = 103
n = p q = 10 403
(n) = (p 1) (q 1) = 10 200
Alice continue :
elle choisit un exposant e tel que pgcd(e, (n)) = 1,
elle calcule linverse d de e module (n) : d e 1 (mod (n)). Ce calcul se fait par lalgo-
rithme dEuclide tendu.
Exemple 1.
Alice choisit par exemple e = 5 et on a bien pgcd(e, (n)) = pgcd(5, 64) = 1,
74 Cryptographie
Alice applique lalgorithme dEuclide tendu pour calculer les coefficients de Bzout corres-
pondant pgcd(e, (n)) = 1. Elle trouve 5 13 + 64 (1) = 1. Donc 5 13 1 (mod 64) et
linverse de e modulo (n) est d = 13.
Exemple 2.
Alice choisit par exemple e = 7 et on a bien pgcd(e, (n)) = pgcd(7, 10 200) = 1,
Lalgorithme dEuclide tendu pour pgcd(e, (n)) = 1 donne 7 (1457) + 10 200 1 = 1. Mais
1457 8743 (mod (n)), donc pour d = 8743 on a d e 1 (mod (n)).
Cl publique
n et e
Exemple 1. n = 85 et e = 5
Exemple 2. n = 10 403 et e = 7
Cl prive
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
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
Message chiffr
x m e (mod n)
m x d (mod n)
Calculons la main 4013 (mod 85) on note que 13 = 8 + 4 + 1, donc 4013 = 408 404 40.
n, e d
? x m e (mod n) ?
m - C - D - m x d (mod n)
Bruno Alice
6.4. Schma
Cls dAlice :
publique : n, e
prive : d
Lemme 1
Ce lemme prouve bien que le message original m de Bruno, chiffr par cl publique dAlice (e, n)
en le message x, peut-tre retrouv par Alice laide de sa cl secrte d.
Dmonstration
Que d soit linverse de e modulo ( n) signifie d e 1 (mod ( n)). Autrement dit, il existe k Z
tel que d e = 1 + k ( n).
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)
( m e )d m (mod n)
Cryptographie 77
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 :
Algorithme . rsa.py (1)
def cle_privee(p,q,e) :
n = p * q
phi = (p-1)*(q-1)
c,d,dd = euclide_etendu(e,phi) # Pgcd et coeff de Bzout
return(d % phi) # Bon reprsentant
Le chiffrement dun message m est possible par tout le monde, connaissant la cl publique (n, e).
Algorithme . rsa.py (2)
def codage_rsa(m,n,e):
return pow(m,e,n)
def decodage_rsa(x,n,d):
return pow(x,d,n)
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 litt-
raires.
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 cryptogra-
phie 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 math-
matiques 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.
78 Cryptographie
Auteurs
Arnaud Bodin
Franois Recher
Exo7
4 La chanette
1 Le cosinus hyperbolique
2 quation de la chanette
3 Longueur d'une chanette
Introduction
Ici ch dsigne
le cosinus hyperbolique, dfini partir de la fonction exponentielle : y(x) =
x x
a
2 e +e
a a , nous y reviendrons.
Le paramtre a dpend de la chanette : on peut carter plus ou moins les mains. Ou, ce qui revient
au mme, si lon garde les mains fixes, on peut prendre des cordes de diffrentes longueurs.
Cest donc une courbe que vous voyez tous les jours : la chane qui pend votre cou ou le fil
lectrique entre deux pylnes. Mais on le retrouve dans des endroits plus surprenants : vous
pouvez voir des chanettes avec des films de savon. Trempez deux cercles mtalliques parallles
dans de leau savonneuse. Il en sort une surface de rvolution dont le profil est une chanette. Enfin,
si vous souhaitez faire une arche qui sappuie sur deux piles alors la forme la plus stable est une
chanette renverse. Gaudi a beaucoup utilis cette forme dans les btiments quil a construits.
80 La chanette
Pour finir sur un bateau, si une voile rectangulaire est maintenue par deux mats horizontaux et
que le vent souffle perpendiculairement alors le profil de la voile est une chanette.
Stop ! Place aux maths : nous allons expliquer comment calculer lquation dune chanette.
1. Le cosinus hyperbolique
1.1. Dfinition
Le cosinus hyperbolique et le sinus hyperbolique sont la partie paire et impaire de lexponen-
tielle :
e x + e x e x e x
ch x = , sh x = .
2 2
ch x
ex
1 1
0 1 0 1
sh x
Proposition 6
Remarque 1
ei x + ei x ei x ei x
cos x = , sin x = .
2 2i
Lanalogie avec la dfinition de ch x et sh x justifie les termes cosinus et sinus. Reste
justifier le terme hyperbolique.
La chanette 81
Mt
sin t
sh t Mt
cos t ch t
Si nous dessinons une courbe paramtre par (x(t) = cos t, y(t) = sin t) alors x(t)2 + y(t)2 =
cos2 t + sin2 t = 1. Donc nous avons affaire un cercle (do le terme circulaire). Par contre si
on dessine une courbe paramtre par (x(t) = ch t, y(t) = sh t). Alors x(t)2 y(t)2 = ch2 t sh2 t =
1. Cest lquation dune branche dhyperbole !
Proposition 7
La fonction x 7 ch x est une bijection de [0, +[ dans [1, +[. Sa bijection rciproque
est note argch x. Donc :
ch argch(x) = x x [1, +[ argch ch(x) = x x [0, +[
x R
sh argsh(x) = x argsh sh(x) = x
sh x
(y = x)
ch x
(y = x) argsh x
argch x
1
0
1
Pour rsoudre une quation diffrentielle nous aurons besoin de la drive de argsh x.
82 La chanette
Proposition 8
1 1
argch0 x = p argsh0 x = p .
x2 1 x2 + 1
Proposition 9
p
argch x = ln x + x2 1 , pour x 1.
p
argsh x = ln x + x2 + 1 , pour x R.
Comme la fonction x 7 ch0 x ne sannule pas sur ]0, +[ alors la fonction argch est drivable sur
]1, +[. On calcule la drive par drivation de lgalit ch(argch x) = x :
argch0 x sh(argch x) = 1
1 1 1
argch0 x = =q =p .
sh(argch x) x2 1
ch2 (argch x) 1
La chanette 83
1 + p x2 1
0 x +1
f ( x) = p =p = argsh0 x.
2
x+ x +1 2
x +1
Comme de plus f (0) = ln(1) = 0 et argsh 0 = 0 (car sh 0 = 0), on en dduit que pour tout x R, f ( x) =
argsh x.
lorsque h tend vers 0. Notons h = dx et d f = f (x + h) f (x) = f (x + dx) f (x) alors le taux dac-
df
croissement vaut dx et comme dx est un nombre aussi petit que lon veut (il est infinitsimal), on
df
identifie ce quotient dx avec la limite lorsque dx 0.
Lavantage de la notation des physiciens est que cela peut correspondre un raisonnement phy-
sique. On peut raisonner sur des petits morceaux (de longueur dx petite mais pas nulle) et en
dduire une relation avec des drives. Cest ce que nous ferons dans le paragraphe 2.3.
Autre avantage de cette notation, il est facile de retenir la formule :
df dy df
= .
dx dx d y
2. quation de la chanette
Soit (O,~i,~j) un repre orthonorm direct, ~j est un vecteur vertical dirig vers le haut (cest--dire
oppos au champ de pesanteur).
Nous dcoupons la chanette en petits morceaux, chaque morceau tant compris entre les abscisses
x et x + dx. Ici dx dsigne donc un rel aussi petit que lon veut. Nous noterons d ` la longueur de
ce petit morceau de chanette.
Trois forces sappliquent notre mini-bout de chanette :
84 La chanette
~ + dx)
T(x
d`
~
P
~
T(x)
x x + dx
Une remarque : pour cette modlisation nous supposons que dx est le mme pour tous les morceaux
de chane. Par contre x varie, et aussi la longueur du morceau de chane entre les abscisses x et
x + dx, qui devrait donc plutt tre note d `(x) au lieu de d `. Le poids dun morceau de chane
dpend lui aussi de x et devrait plutt tre not P(x).
Dcomposons chaque force de tension, en une tension horizontale et une tension verticale :
~ = T h (x)~i T v (x)~j.
T(x)
La convention pour le choix des signes permet davoir des valeurs T h (x) et T v (x) positives.
T h (x)~i
T v (x)~j
~
T(x)
La chanette 85
Comme (~i,~j) est une base, nous reformulons le principe fondamental de la mcanique en deux
quations, correspondant aux forces horizontales et aux forces verticales :
(
T h (x + dx) T h (x) = 0
(4.2)
T v (x + dx) T v (x) P = 0
Lemme 2
T h (x) = T h .
Dmonstration
T h ( x + dx) T h ( x)
= 0.
x + dx x
Ceci est vrai quelque soit llment infinitsimal dx. Ce taux daccroissement tant toujours nul, la
limite lorsque dx tend vers 0 est nulle. Mais la limite est par dfinition la drive T h0 ( x). Bilan :
T h0 ( x) = 0. La fonction T h ( x) est donc une fonction constante comme nous lavions annonc.
d `2 = dx2 + d y2 .
y(x)
d`
dy
dx
Cela conduit : 2 2
d` dy
= 1+ .
dx dx
86 La chanette
Do s
2
d` dy
= 1+ .
dx dx
Nous allons maintenant nous concentrer sur la deuxime quation du principe fondamental (4.2),
le poids tant P = gd ` :
T v (x + dx) T v (x) = gd `.
Thorme 4
Dmonstration
T h (x)~i
(x)
T v (x)~j
~
T(x)
On obtient :
T h ( x) = T ( x) cos ( x) et T v ( x) = T ( x) sin ( x).
y(x)
d`
dy
(x)
dx
La chanette 87
2. quations diffrentielles.
Nous savons que la tension horizontale est constante (lemme 2), donc en drivant lgalit prcdente,
nous avons
T v0 ( x) = T h y00 ( x).
g
q
y00 ( x) = 1 + y0 ( x)2 . (4.4)
Th
T
Soit a la constante a = gh . Posons z( x) = y0 ( x). Cela nous conduit une quation diffrentielle du
p
premier ordre z0 ( x) = a1 1 + z( x)2 ou encore :
z 0 ( x) 1
= .
a
p
1 + z( x)2
x
argsh z( x) = +
a
o est une constante. En composant des deux cts par le sinus hyperbolique :
x
y0 ( x) = z( x) = sh + .
a
Une primitive de sh x tant ch x, il ne reste plus qu intgrer :
x
y( x) = a ch + + .
a
(0, a)
x
Lquation est alors y( x) = a ch a .
88 La chanette
Proposition 10
(x0 , y0 )
(0, a) `
La chanette 89
Dmonstration
Ainsi :
R x0 q
` = 0 1 + sh2 ax dx car ch0 x
a = 1
a sh ax
R x0 q
= ch2 ax dx car 1 + sh2 u = ch2 u
R0x0 x
x x0
= 0 ch a dx = a sh a 0
= a sh xa0 .
( x0 , y0 ) (x0 , y0 )
Proposition 11
`2 h 2
a= .
2h
Dmonstration
Soient ( x0 , y0 ) les coordonnes des points daccroche. Lquation de la chanette tant y = a ch ax , alors
y0 = a ch xa0 qui vaut aussi y0 = a + h.
Quant la longueur elle vaut 2` = 2a sh xa0 . Nous avons donc les quations :
x0
(
` = a sh a
x0
h = a ch a a
90 La chanette
`2 h 2
Ainsi a = .
2h
Proposition 12
pour t > 0.
Dmonstration
x y
Nous connaissons lquation cartsienne y = a ch , qui est quivalente argcha a = ax . Utilisons la
p
forme logarithmique de la fonction argch : argch u = ln u + u2 1 (pour u 1).
Nous obtenons : s !
y y 2 x
ln + 1 = .
a a a
Nous cherchons maintenant une paramtrisation ( x( t), y( t)) de la chanette, posons x( t) = a ln( t) (ce qui
est toujours possible car ln est une bijection de ]0, +[ dans R). Alors lquation prcdente conduit
(aprs simplification des ln) : s
y( t ) y( t ) 2
+ 1 = t,
a a
ou encore s
y( t ) 2 y( t )
1 = t
a a
ce qui implique en levant au carr :
2 2
y( t ) y( t ) y( t)
1 = t2 + 2t
a a a
y( t) t2 +1 a
t + 1t .
do a = 2t , et donc y( t) = 2
Proposition 13
~ h (x0 , y0 )
T
~v
T
h
~
T
`
`2 h 2
T h = a g = g.
2h
Le tension verticale au point (x0 , y0 ) est :
x0 `
T v = T h sh = Th .
a a
La tension totale au point (x0 , y0 ) est :
q x0 a+h
T= T h2 + T v2 = T h ch = Th .
a a
Dmonstration
3.5. Exercices
On se donne deux poteaux distants dune longueur 2x0 fixe et dune hauteur suffisante.
Parmi toutes les chanettes passant par les sommets de ces poteaux, on cherche celle qui a les
forces de tensions minimales.
Nous savons que la tension totale (voir la proposition 13) vaut
x
T x (a) = a g ch .
a
Pour une chanette donne, la tension est donc maximale au point daccroche (en x = x0 ) car
le cosinus hyperbolique est une fonction croissante sur [0, +[. Pour un a fix, la tension
maximale est donc T x0 (a). Notre problme, x0 tant fix, est de trouver le a qui minimise
T x0 (a).
( x0 , y0 ) (x0 , y0 )
~x
T 0
1. Considrations physiques : Que vaut la tension si la chanette est rectiligne (la longueur
La chanette 93
Nous allons calculer que la courbe du cble dun pont suspendu est une parabole.
Soit le tablier dun pont de longueur L et de masse totale M. Un gros cble est accroch
entre deux pylnes. ce cble sont accrochs un grand nombre de petits cbles de suspension
verticaux reliant le gros cble au tablier.
Cbles de supension
Cble
Pylne
Tablier
Nous allons calculer lquation y(x) du cble. On sinspirera pour les premires questions des
calculs sur la chanette.
1. Quelles sont les forces qui sappliquent une portion de cble dont labscisse est entre x
et x + dx ?
2. crire lquation du principe fondamental de la mcanique, appliqu cette portion.
3. Montrer que la tension horizontale est indpendante de x.
4. Montrer que la tension verticale vrifie lquation diffrentielle : T v0 (x) = T h y00 (x).
5. Dans toute la suite nous supposerons que la masse du cble est ngligeable devant celle
du tablier. Cela revient supposer que le poids P(x) du cble est ngligeable devant la
charge C(x) du tablier. Nous posons donc P(x) = 0. Montrer que le principe fondamental
de la mcanique scrit alors :
M
T h y00 (x) = g.
L
6. Quelle est lquation y(x) du cble ?
94 La chanette
7. Calculer une quation du cble du Golden Bridge (San Francisco). Le tablier mesure
1280 mtres de long, les pylnes ont une hauteur de 160 mtres (au-dessus du tablier)
et le cble descend jusquau tablier (au milieu du pont).
Auteurs
Arnaud Bodin
Relu par Laura Desideri.
Photos : fdecomite, soapbubble.dk, N. Jamal, G. Sivills, M. Gunn.
Exo7
5 La rgle et le compas
Vous avez votre disposition une rgle et un compas et bien sr du papier et un crayon ! Avec si
peu de matriel souvre vous un monde merveilleux rempli de gomtrie et dalgbre.
C
B
B
A I
A
B0
D
96 La rgle et le compas
Si A, B sont deux points donns du plan, alors on peut construire la mdiatrice de [AB].
Pour cela, tracer le cercle centr en A passant par B et aussi le cercle centr en B passant
par A. Ces deux cercles sintersectent en deux points C, D. Les points C, D appartiennent
la mdiatrice de [AB]. Avec la rgle on trace la droite (CD) qui est la mdiatrice de [AB].
En particulier cela permet de construire le milieu I du segment [AB]. En effet, cest linter-
section de la droite (AB) et de la mdiatrice (CD) que lon vient de construire.
Si A, B, C sont trois points donns alors on peut construire la parallle la droite (AB)
passant par C. Tout dabord construire le milieu I de [AC]. Puis construire D le symtrique
de B par rapport I. La figure ABCD est un paralllogramme, donc la droite (CD) est
bien la parallle la droite (AB) passant par C.
D
C
C
A B
B
Il est peut-tre temps dexpliquer ce que lon est autoris faire. Voici les rgles du jeu : partez
de points sur une feuille. Vous pouvez maintenant tracer dautres points, partir de cercles et de
droites en respectant les conditions suivantes :
Une remarque importante : la rgle est une rgle simple, qui nest pas gradue.
Convention pour les couleurs : les points donns lavance sont les points bleus. Les construc-
tions se font en rouge (rouge ple pour les constructions qui viennent en premier, rouge vif
pour les constructions qui viennent en dernier).
A A0
En conservant lcartement du compas, nous pouvons plus facilement construire les paral-
llogrammes, avec seulement deux traits de compas. Donnons-nous trois points A, B, C. On
mesure lcartement [AB], on trace le cercle centr en C de rayon AB. Puis on mesure lcar-
tement [BC] et on trace le cercle centr en A de rayon BC. Ces deux cercles se recoupent en
deux points, dont lun est D, tel que ABCD est un paralllogramme.
B
98 La rgle et le compas
1. Tracer une droite D quelconque, passant par A, autre que la droite (AB).
2. Prendre un cartement quelconque du compas. Sur la droite D et en partant de A, tracer n
segments de mme longueur. On obtient des points A 1 , A 2 , . . . , A n .
3. Tracer la droite (A n B). Tracer les parallles cette droite passant par A i . Ces droites re-
coupent le segment [AB] en des points B1 , B2 , . . . , B n1 qui dcoupent lintervalle [AB] en n
segments gaux.
A5
A4
A3
A2
A1 A1
A B A B A B
A5 A5
A4 A4
A3 A3
A2 A2
A1 A1
A B A B1 B2 B3 B4 B A B
Voyons maintenant comment le thorme de Pythagore va nous permettre de faire apparatre des
racines carres. Supposons que lon parte dun segment de longueur 1. Il est facile de construire
p
un segment de longueur 2 : cest la longueur de la diagonale du carr de ct 1. Repartons du
p
segment diagonal de longueur 2 : on construit un triangle rectangle avec un ct de longueur
p
1, et lhypotnuse a alors pour longueur 3 (voir le calcul plus bas). Repartant de ce segment, on
p p
construit un escargot avec des segments de longueurs 4, 5...
1 1
1
1
p p
p 4 3
5
p
1 p 2 1
6
1 p
7 1
p
1 1 8
1 p
p 9
p 4 p p
3 3 10
p p p 1
2 1 2 1 2 1
1
1 1 1
La rgle et le compas 99
Tout ceci se justifie par le thorme de Pythagore : dans un triangle rectangle ayant un ct de
p
longueur ` et un autre de longueur 1, lhypotnuse est de longueur `2 + 1. En partant de `1 = 1,
q p q p p p
on trouve `2 = `21 + 1 = 2, puis `3 = `22 + 1 = 3, `4 = 4 = 2, et plus gnralement `n = n.
p
`2 + 1
1
Voici maintenant trois questions qui datent de la Grce antique et qui vont nous occuper le reste
du chapitre.
C
A A
p
a 2
a
p
a 2
a
S = a2 S = 2a2
Posons nous la question dans lespace : tant donn un cube, peut-on construire un second cube
dont le volume est le double de celui du premier ? Si le premier cube a ses cts de longueur a,
p
3
alors le second doit avoir ses cts de longueur a 2. La question se formule alors de la manire
suivante :
p
3
a a 2
V = a3 V = 2a3
p
r
p
r
r
S = r2 S = r2
p
Cela revient construire un segment de longueur la rgle et au compas, partir dun segment
de longueur 1.
O I
0. P C i
1. ou P (AB) (A 0 B0 ) avec A, B, A 0 , B0 C i ,
2. ou P (AB) C (A 0 , A 0 B0 ) avec A, B, A 0 , B0 C i ,
B P
B
B
A0
A0 B0
P P
A
P0
P0
B0
A A0 B0
A
Voici la premire tape. Partant de C 0 (en bleu gauche), on peut tracer une droite et deux cercles
(au milieu), ce qui donne pour C 1 quatre points supplmentaires (en rouge droite).
102 La rgle et le compas
O I O I O I
Pour C 2 on repartirait de tous les points (rouges ou bleus) de C 1 , et on tracerait tous les cercles ou
droites possibles (il y en a beaucoup !), et les points dintersection formeraient lensemble C 2 .
Dfinition 2
Attention ! Mme si deux points A, B sont constructibles et que lon peut tracer la droite (AB),
pour autant les points de (AB) ne sont pas tous constructibles. Seuls les points dintersection de
(AB) avec dautres objets construits sont constructibles.
Dterminer les points constructibles C ou dterminer les nombres constructibles C R sont deux
problmes quivalents. En effet, si (x, y) est un point constructible alors par projection sur laxe
des abscisses nous obtenons le rel constructible x, et de mme pour y projection sur laxe des
ordonnes, puis report sur laxe des abscisses. Rciproquement on peut passer de deux nombres
constructibles x, y R un point constructible (x, y) dans le plan. Voici comment : partant du point
(y, 0) on construit (0, y) sur laxe des ordonnes par un coup de compas en reportant y. Une fois
que (x, 0) et (0, y) sont construits, il est facile de construire (x, y).
(0, y) (x, y)
0 y x
Proposition 14
Dmonstration
1. La construction pour le rel x + x0 est facile en utilisant le report du compas (on reporte la
0
longueur x0 partir de x). Une autre mthode est de construire dabord le milieu x+2x puis le
symtrique de 0 par rapport ce milieu : cest x + x0 .
La somme de deux nombres complexes z + z0 correspond la construction dun paralllogramme
de sommets 0, z, z0 , z + z0 : les points daffixes 0, z, z0 tant supposs constructibles, on construit
un paralllogramme de sorte que z + z0 soit le quatrime sommet.
z + z0
z0
2. Loppos du rel x (resp. du complexe z) sobtient comme symtrique par rapport lorigine :
tracez la droite passant par 0 et x (resp. z) ; tracez le cercle de centre 0 passant par x (resp. z) ;
ce cercle recoupe la droite en x (resp. z).
x 0 x
3. Commenons par le produit de deux nombres rels x x0 . On suppose construits les points ( x, 0)
et (0, x0 ) (dessin de gauche). On trace la droite D passant par ( x, 0) et (0, 1). On construit ensuite
la rgle et au compas la droite D 0 parallle D et passant par (0, x0 ). Le thorme de Thals
prouve que D 0 recoupe laxe des abscisses en ( x x0 , 0).
104 La rgle et le compas
x0
x0
1 1
x x x0 x/x0 x
ei
0 0
ei(+ ) ei
ei
ei
0
+ 0
0 0
Maintenant si z = ei et z0 = 0 ei alors z z0 = ( 0 ) ei(+ ) . Le rel 0 est constructible comme
0
nous lavons vu au-dessus. Il reste construire le nombre complexe ei(+ ) , qui correspond la
somme de deux angles et 0 . Cela se fait simplement, partir du cercle unit, en reportant au
compas la mesure dun angle partir de lextrmit de lautre.
Pour le quotient la mthode est similaire.
Corollaire 2
N CR Z CR Q CR
Autrement dit, tous les rationnels (et en particulier tous les entiers) sont des nombres rels
constructibles.
Puisque 1 est un nombre constructible alors 2 = 1 + 1 est constructible, mais alors 3 = 2 + 1 est
constructible et par rcurrence tout entier n 0 est un lment de C R .
Comme tout entier n 0 est constructible alors n lest aussi ; donc tous les entiers n Z sont
constructibles.
p p
Enfin pour q Q, comme les entiers p, q sont constructibles, alors le quotient q est constructible
et ainsi Q C R .
Nous allons voir que C R contient davantage de nombres que les rationnels.
La rgle et le compas 105
Proposition 15
p
Si x 0 est un nombre constructible, alors x est constructible.
Remarques :
p
1. La rciproque est vraie. En effet si x0 = x est un nombre constructible, alors par la proposi-
p p
tion 14 : x0 x0 est constructible. Or x0 x0 = x x = x, donc x est constructible.
2. On peut en dduire aussi que si z C est constructible alors les racines carres (complexes)
de z sont constructibles. On utilise pour cela la racine carre du module et la bissection de
largument comme on la vue au paragraphe 1.5.
p p
3. En particulier 2, 3, . . . sont des nombres constructibles (comme on lavait vu en premire
partie).
Dmonstration
1 0 x1 x
2
Soient les nombres constructibles 0, 1, x placs sur laxe des abscisses. Traons le cercle dont le
diamtre est [1, x] (cela revient construire le centre du cercle x2 1 ; voir la proposition 14). Ce cercle
recoupe laxe des ordonnes en y 0.
a p b
y= x
1 x
p
Soit construit un cercle de rayon r, donc daire r 2 . Que soit constructible quivaut
p
constructible. Construire un segment de longueur r, correspond un carr daire r 2 ,
donc de mme aire que le cercle initial. Nous aurions construit un carr de mme aire que le
cercle ! On aurait rsolu la quadrature du cercle.
Remarquons que construire un angle gomtrique de mesure est quivalent construire
le nombre rel cos (voir la figure de gauche). Partons dun angle gomtrique , cest--dire
partons dun rel cos constructible. Construire cos 3 est quivalent construire un angle
gomtrique de mesure 3 . On aurait rsolu la trisection des angles.
cos
cos cos 3
Q CR Q R
o
La rgle et le compas 107
Cest un sous-ensemble de R, qui contient par exemple 0, 1, 13 et tous les lments de Q, mais aussi
p p
2 (qui nest pas rationnel !), 21 23 2.
Voici quelques proprits :
p p p p p
Soient a + b 2 et a0 + b0 2 deux lments de Q( 2). Alors leur somme (a + b 2) + (a0 + b0 2)
p p p
est encore un lment de Q( 2). De mme (a + b 2) Q( 2).
p p p p p
Plus surprenant, si a + b 2, a0 + b0 2 Q( 2) alors (a + b 2) (a0 + b0 2) = aa0 + 2bb0 + (ab0 +
p p p
a0 b) 2 est aussi un lment de Q( 2). Enfin linverse dun lment non nul a + b 2 est
1p
p p
= a2 12b2 (a b 2) : cest encore un lment de Q( 2).
a+ b 2 p
Ces proprits font de Q( 2) un corps. Comme ce corps contient Q on parle dune extension de Q.
p
De plus, il est tendu avec un lment du type : on parle alors dune extension quadratique.
p
Notez que, mme si Q, nest gnralement pas un lment de Q.
est un corps. On vrifie comme ci-dessus que la somme et le produit de deux lments restent dans
p
K( ), ainsi que loppos et linverse.
Cela permet de construire de nouveaux corps : partant de K 0 = Q, on choisit un lment, disons
p p p
0 = 2 et on obtient le corps plus gros K 1 = Q( 2). Si on prend 1 = 3 alors 3 Q( 2) et donc
p
K 2 = K 1 ( 3) est un nouveau corps (qui contient K 1 ). Le corps K 2 est :
p p p n p p p p o
K 2 = K 1 ( 3) = Q( 2)( 3) = a + b 2 + c 3 + d 2 3 | a, b, c, d Q .
p p p
On pourrait continuer avec 2 = 11 et exprimer chaque lment de Q( 2)( 3)( 11) comme une
p p p p p p p p p p p p
somme de 8 lments a 1 + a 2 2 + a 3 3 + a 4 11 + a 5 2 3 + a 6 2 11 + a 7 3 11 + a 8 2 3 11
avec les a i Q.
p p p p p p p
En partant de K 1 = Q( 2), on aurait pu considrer 1 = 1+ 2 et K 2 = K 1 ( 1 + 2) = Q( p
2)( 1 + 2).
p p
Chaque lment de K 2 peut scrire comme une somme de 4 lments a + b 2 + c 1 + 2 +
p p p
d 2 1 + 2.
p
Une proprit. Il faut noter que chaque lment de Q( 2) est racine dun polynme de degr au
p
plus 2 coefficients dans Q. Par exemple 3 + 2 est annul par P(X ) = (X 3)2 2 = X 2 6X + 7. Les
108 La rgle et le compas
nombres qui sont annuls par un polynme coefficients rationnels sont les nombres algbriques.
p
Plus gnralement, si K est un corps et K, alors tout lment de K( ) est annul par un
p p
polynme de degr 1 ou 2 coefficients dans K. On en dduit que chaque lment de Q( 2)( 3)
p p p
(ou de Q( 2)( 1 + 2)) est racine dun polynme de Q[X ] de degr 1, 2 ou 4. Et chaque lment
p p p
de Q( 2)( 3)( 11) est racine dun polynme de Q[X ] de degr 1, 2, 4 ou 8, etc.
Nous allons maintenant reprendre ces exemples dune manire plus thorique.
3.2. Corps
Un corps est un ensemble sur lequel sont dfinies deux oprations : une addition et une multipli-
cation.
Dfinition 3
Un corps (K, +, ) est un ensemble K muni des deux oprations + et , qui vrifient :
0. + et sont des lois de composition interne, cest dire x + y K et x y K (pour tout
x, y K).
1. (K, +) est un groupe commutatif, cest--dire :
Il existe 0 K tel que 0 + x = x (pour tout x K).
Pour tout x K il existe x tel que x + ( x) = 0.
+ est associative : (x + y) + z = x + (y + z) (pour tout x, y, z K).
x + y = y + x (pour tout x, y K).
2. (K \ {0}, ) est un groupe commutatif, cest--dire :
Il existe 1 K \ {0} tel que 1 x = x (pour tout x K).
Pour tout x K \ {0}, il existe x1 tel que x x1 = 1.
est associative : (x y) z = x (y z) (pour tout x, y, z K \ {0}).
x y = y x (pour tout x, y K \ {0}).
3. est distributive par rapport + : (x + y) z = x z + y z (pour tout x, y, z K).
nombres complexes).
Par contre a + b | a, b Q nest pas un corps (o = 3, 14 . . .). (Cest une consquence du
fait que nest pas un nombre algbrique comme on le verra plus loin.)
Proposition 16
Proposition 17
Dfinition 4
L est appel une extension de K. Si la dimension de cet espace vectoriel est finie, alors on
lappelle le degr de lextension, et on notera :
[L : K] = dimK L.
Proposition 18
Si K, L, M sont trois corps avec K L M et si les extensions ont un degr fini alors :
[M : K] = [M : L] [L : K].
Exemple 4
p p p p
Q( 2) est une extension de Q. De plus, comme Q( 2) = a + b 2 | a, b Q , alors Q( 2)
p
est un espace vectoriel (sur Q) de dimension 2 : en effet (1, 2) en est une base. Attention :
p p
ici 1 est un vecteur et 2 est un autre vecteur. Le fait que 2 Q se traduit en : ces
deux vecteurs sont linairement indpendants sur Q. Cest un peu droutant au dbut !
C est une extension de degr 2 de R car tout lment de C scrit a + ib. Donc les vecteurs
1 et i forment une base de C, vu comme un espace vectoriel sur R.
p p p p p p p p p
Notons Q( 2, 3) = Q( 2)( 3) = a + b 3 | a, b Q( 2) . Alors Q Q( 2) Q( 2, 3).
p p
Calculer le degr des extensions. Expliciter une base sur Q de Q( 2, 3).
Pour x R, on note Q(x) le plus petit corps contenant Q et x : cest le corps engendr par x. Cest
p
cohrent avec la notation pour les extensions quadratiques Q( ), qui est bien le plus petit corps
p
contenant .
p
3 1
Par exemple, si x = 2 = 2 3 , alors il nest pas dur de calculer que
p
3
n p
3
p
3 2
o
Q( 2) = a + b 2 + c 2 | a, b, c Q .
p 2
En effet Q( 2) contient x, x2 , x3 , . . . mais aussi 1x , x12 , . . . Mais comme x3 = 2 Q et 1x = x2 , alors
3
p
a + bx + cx2 , avec a, b, c Q, engendrent tous les lments de Q(x). Conclusion : [Q( 2) : Q] = 3.
3
110 La rgle et le compas
Proposition 19
Q est un corps.
Dmonstration
Laddition et la multiplication dfinies sur Q sont celles du corps (R, +, ). Ainsi beaucoup de proprits
dcoulent du fait que lensemble des rels est un corps (on parle de sous-corps).
La premire chose que lon doit dmontrer, cest que + et sont des lois de composition interne, cest-
-dire que si x et y sont des nombres rels algbriques alors x + y et x y le sont aussi. Ce sera prouv
dans le corollaire 3.
1. (Q, +) est un groupe commutatif, car :
0 Q (prendre P ( X ) = X ) et 0 + x = x (pour tout x Q).
Si x Q alors x Q (si P ( X ) est un polynme qui annule x alors P ( X ) annule x).
+ est associative : cela dcoule de lassociativit sur R.
x + y = y + x : idem.
2. (Q \ {0}, ) est un groupe commutatif, car :
1 Q \ {0} et 1 x = x (pour tout x Q \ {0}).
Si x Q \ {0} alors x1 Q \ {0} : en effet, si P ( X ) est un polynme de degr n annulant x, alors
X n P ( X1 ) est un polynme annulant 1x .
est associative : cela dcoule de lassociativit sur R \ {0}.
x y = y x : idem.
3. est distributive par rapport + : cela dcoule de la distributivit sur R.
Si x Q est un nombre algbrique, alors le plus petit degr, parmi tous les degrs des polynmes P
Q[X ] tels que P(x) = 0, est le degr algbrique de x. Par exemple, calculons le degr algbrique
p
de 2 : un polynme annulant ce nombre est P(X ) = X 2 2 et il nest pas possible den trouver
p p
de degr 1, donc le degr algbrique de 2 vaut 2. Plus gnralement avec Q est de degr
p p
algbrique gal 1 ou 2 (de degr algbrique 1 si Q, de degr 2 sinon). Par contre 2 est de
3
degr 3, car il est annul par P(X ) = X 3 2 mais pas par des polynmes de degr plus petit.
Proposition 20
Dmonstration
1. Soit L une extension finie de Q, et soit n = [L : Q]. Fixons x L. Les n + 1 lments (1, x, x2 , . . . , x n )
forment une famille de n + 1 vecteurs dans un espace vectoriel de dimension n. Donc cette famille
est lie. Il existe donc une combinaison linaire nulle non triviale, cest--dire il existe a i Q non
tous nuls tels que ni=0 a i x i = 0. Si lon dfinit P ( X ) = ni=0 a i X i , alors P ( X ) Q[ X ], P ( X ) nest
P P
pas le polynme nul et P ( x) = 0. Cest exactement dire que x est un nombre algbrique.
La rgle et le compas 111
2. Soit P ( X ) = ni=0 a i X i non nul qui vrifie P ( x) = 0. En cartant le le cas trivial x = 0, on peut donc
P
supposer que a 0 6= 0 et a n 6= 0. Alors x n = a1n ni=01 a i x i et 1x = a10 ni=1 a i x i1 . Ce qui prouve que
P P
Corollaire 3
Dmonstration
Comme x est un nombre algbrique alors L = Q( x) est une extension finie de K = Q. Posons M =
Q( x, y) = Q( x) ( y). Comme y est un nombre algbrique alors M est une extension finie de Q( x). Par la
Un nombre rel x est constructible si et seulement sil existe des extensions quadratiques
Q = K0 K1 K r
telles que x K r .
Chacune des extensions est quadratique, cest--dire [K i+1 : K i ] = 2. Autrement dit, chaque exten-
p
sion est une extension quadratique de la prcdente : K i+1 = K i ( i ) pour un certain i K i . Donc
en partant de K 0 = Q, les extensions sont :
p p p
Q Q( 0 ) Q( 0 )( 1 )
112 La rgle et le compas
Dmonstration
Il y a un sens facile : comme on sait construire les racines carres des nombres constructibles (voir la
proposition 15) alors on sait construire tout lment dune extension quadratique K 1 = Q( 0 ), puis
p
Passons au sens difficile. Rappelons-nous que les points constructibles sont construits par tapes C 0 ,
C 1 , C 2 ,. . .
Lensemble C j+1 sobtient partir de C j en ajoutant les intersections des droites et des cercles que lon
peut tracer partir de C j . Nous allons voir que ce passage correspond une extension quadratique.
Soit donc K le plus petit corps contenant les coordonnes des points de C j . Nous considrons P un
point de C j+1 . Ce point P est lintersection de deux objets (deux droites ; une droite et un cercle ; deux
cercles). Distinguons les cas :
P est lintersection de deux droites. Ces droites passent par des points de C j donc elles ont
pour quations ax + b y = c et a0 x + b0 y = c0 et il est important de noter que lon peut prendre
a, b, c, a0 , b0 , c0 comme tant des lments de K . Par exemple une quation de la droite passant
y y
par A ( x A , yA ) et B( xB , yB ) (avec x A , yA , xB , yB K ) est y = xB x A ( x x A ) + yA , ce qui donne bien
B A
une quation coefficients dans K . Les coordonnes de P sont donc
cb0 c0 b ac0 a0 c
, .
ab0 a0 b ab0 a0 b
Comme K est un corps alors labscisse et lordonne de ce P sont encore dans K . Dans ce cas il
ny a pas besoin dextension : le plus petit corps contenant les coordonnes des points de C j et
de P est K .
P appartient lintersection dune droite et dun cercle. Notons lquation de la droite ax + b y = c
avec a, b, c K et ( x x0 )2 + ( y y0 )2 = r 2 lquation du cercle. On note que x0 , y0 , r 2 (mais pas
ncessairement r ) sont des lments de K car les coordonnes du centre et dun point du cercle
sont dans K . Il reste calculer les intersections de la droite et du cercle : en posant
= 2 x0 a3 b y0 + 2 y0 a2 cb b2 y0 2 a2 + b2 r 2 a2 + 2 a3 x0 c a4 x0 2 a2 c2 + a4 r 2 K,
b 1
2 c 2 2
p c ax
x= x 0 ab + y0 a + cb ( a + b )+ et y= ,
a a2 + b 2 b b
b 1 c p c ax0
x0 = 2 2
x0 ab + y0 a2 + cb (a2 + b2 ) et y0 = .
a a +b b b
p
Les coordonnes sont bien de la forme + avec , K et cest le mme K pour x, y, x0 , y0 .
p
Donc les coordonnes de P sont bien dans lextension quadratique K ( ).
P appartient lintersection de deux cercles. On trouve aussi deux points ( x, y), ( x0 , y0 ) et x, y, x0 , y0
p
sont aussi de la forme + pour un certain K fix et , K . Les formules sont plus
longues crire et on se contentera ici de faire un exemple (voir juste aprs).
On pourrait donner un autre argument : lintersection du cercle C centr en O et du cercle C 0
centr en O 0 est aussi lintersection du cercle C avec la mdiatrice de [OO 0 ]. (Exercice : justifier
que cette mdiatrice est constructible sans tendre le corps.) On se ramne donc au cas de
lintersection dun cercle et dune droite.
La rgle et le compas 113
C0
O0
O
En rsum, dans tous les cas, les coordonnes de P sont dans une extension quadratique du corps K ,
qui contient les coefficients qui servent construire P . Par rcurrence, cela donne le rsultat souhait.
Exemple 5
Donnons les extensions ncessaires dans chacun des trois cas de la preuve sur un exemple
concret.
1. P est lintersection de deux droites (AB) et (A 0 B0 ) avec par exemple A(0, 1), B(1, 1),
A 0 (0, 2), B0 (1, 1) dont les coordonnes sont dans K = Q. Les quations sont 2x + y = 1
et 3x y = 2 ; le point dintersection P a pour coordonnes ( 35 , 15 ), donc labscisse et
lordonne sont dans Q. Il ny a pas besoin dtendre le corps.
A B0
A0
1 p 1 p 1 p 1 p
2 29 , 1 + 2 29 , 2 + 29 , 1 2 29 .
5 5 5 5
Donc si on pose = 29 (qui est bien un rationnel) alors les coordonnes des points
p
dintersection sont de la forme + (, Q), cest--dire appartiennent lextension
p
quadratique Q( 29).
114 La rgle et le compas
B0 A A0
P0
3. Soient le cercle C ((1, 0), 2) (qui a pour centre A(1, 0) et passe par B(1, 0)) et le cercle
p
C ((2, 1), 5) (qui a pour centre A 0 (2, 1) et passe par B0 (0, 0)). Les quations sont (x + 1)2 +
y2 = 4, (x 2)2 + (y 1)2 = 5. Les deux points dintersection sont :
1 p 3 p 1 p 3 p
7 79 , 3 + 79 , 7 + 79 , 3 79 .
20 20 20 20
Encore une fois, pour le rationnel = 79, les abscisses et ordonnes des points dinter-
p
section sont de la forme + avec , Q ; lextension quadratique qui convient est
p
donc Q( 79).
A0
A
B0 B
P0
4.2. Corollaires
La consquence la plus importante du thorme de Wantzel est donne par lnonc suivant. Cest
ce rsultat que lon utilisera dans la pratique.
La rgle et le compas 115
Corollaire 4
Tout nombre rel constructible est un nombre algbrique dont le degr algbrique est de la
forme 2n , n 0.
Dmonstration
Soit x un nombre constructible. Par le thorme de Wantzel, il existe des extensions quadratiques
Q = K 0 K 1 K r telles que x K r . Donc x appartient une extension de Q de degr fini. Ainsi,
par la proposition 20, x est un nombre algbrique.
On sait de plus que [K i+1 : K i ] = 2, donc par la proposition 18, nous avons [K r : Q] = 2r . Il nous reste en
dduire le degr algbrique [Q( x) : Q]. Comme Q( x) K r , alors nous avons toujours par la proposition
18 que : [K r : Q( x)] [Q( x) : Q] = [K r : Q] = 2r . Donc [Q( x) : Q] divise 2r et est donc de la forme 2n .
Voici une autre application plus thorique du thorme de Wantzel, qui caractrise les nombres
constructibles.
Corollaire 5
C R est le plus petit sous-corps de R stable par racine carre, cest--dire tel que :
p
(x C R et x 0) x C R ,
si K est un autre sous-corps de R stable par racine carre alors C R K.
Corollaire 6
1. Si un nombre rel x est constructible alors x est un nombre algbrique. Cest--dire quil
existe un polynme P Q[X ] tel que P(x) = 0.
2. De plus le degr algbrique de x est de la forme 2n , n 0. Cest--dire que le plus
petit degr, parmi tous les degrs des polynmes P Q[X ] vrifiant P(x) = 0, est une
puissance de 2.
Thorme 6
p
3
2 nest pas un nombre constructible.
Dmonstration
p
3
2 est une racine du polynme P ( X ) = X 3 2. Ce polynme est unitaire et irrductible dans Q[ X ],
p
3
donc 2 est un nombre algbrique de degr 3. Ainsi son degr algbrique nest pas de la forme 2n .
p
3
Bilan : 2 nest pas constructible.
Cest une reformulation du thorme suivant, d Ferdinand von Lindemann (en 1882) :
Thorme 7
p
Comme nest pas constructible, alors nest pas constructible non plus (cest la contrapose de
x C R = x2 C R ).
Nous ne ferons pas ici la dmonstration que nest pas un nombre algbrique, mais cest une
dmonstration qui nest pas si difficile et abordable en premire anne.
Plus prcisment nous allons exhiber un angle que lon ne peut pas couper en trois.
La rgle et le compas 117
Thorme 8
Langle 3 est constructible mais ne peut pas tre coup en trois car cos 9 nest pas un nombre
constructible.
Bien sr langle 3 est constructible car cos 3 = 12 . La preuve de la non constructibilit de langle 9
fait lobjet dun exercice : cos 9 est un nombre algbrique de degr algbrique 3, donc il nest pas
constructible.
3
9
cos 1 cos
3 =2 9
La trisection nest donc pas possible en gnral, mais attention, pour certains angles particuliers
cest possible : par exemple les angles ou 2 !
Auteurs
Arnaud Bodin.
Relu par Vianney Combet.
118 La rgle et le compas
Exo7
6 Leons de choses
aux cours et aux td, doivent fournir un travail personnel consquent : une heure de cours
correspond une heure de travail personnel en plus ! Ainsi le chapitre Nombres complexes cest
plus de 30 heures de travail en tout et pas seulement 3 heures de visionnage.
Retenez donc le facteur 10 : Une vido de 12 minutes cest 120 minutes de travail.
Voici deux livres papiers : Algbre et Analyse de Franois Liret, Dominique Martinais aux ditions
Dunod.
Deux livres qui recouvrent le programme de premire anne.
Adapts aux tudiants de luniversit.
Un peu cher !
Leons de choses 121
Voici un cours de premire anne accessible en ligne : Cours concis de mathmatiques Premire
anne de Pierre Guillot.
Cours concis et complet (370 pages).
Adapt aux tudiants de luniversit.
Gratuit !
Et un livre accessible gratuitement en ligne Cours de mathmatiques Math Sup (attention gros
fichier : 11 Mo) dAlain Soyeur, Franois Capaces, Emmanuel Vieillard-Baron.
Cours trs complet (1200 pages !).
Adapt aux lves des classes prpas.
Gratuit !
2. Alphabet grec
alpha nu
beta xi
gamma o omicron
delta pi
epsilon , % rho
zeta sigma
eta tau
theta upsilon
iota , phi
kappa chi
lambda psi
mu omega
On rencontre aussi nabla , loprateur de drive partielle (dites d rond), et aussi la premire
lettre de lalphabet hbreu aleph .
122 Leons de choses
Pour crire des mathmatiques, il existe un langage pratique et universel, le langage LATEX (pro-
nonc [latek]). Il est utile pour rdiger des textes contenant des formules, mais aussi accept sur
certains blogs et vous permet dcrire des maths dans un courriel ou un texto.
Une formule scrit entre deux dollars $\pi^2$ qui donne 2 ou entre double dollars si lon veut la
centrer sur une nouvelle ligne ; $$\lim u_n = +\infty$$ affichera :
lim u n = +
Les exposants sobtiennent avec la commande ^ et les indices avec _ : a2 scrit a^2 ; u n scrit
u_n ; 2i scrit \alpha_i^2. Les accolades { } permettent de grouper du texte : 2^{10} pour 210 ;
a_{i,j} pour a i, j .
Il y a ensuite toute une liste de commandes (qui commencent par \) dont voici les plus utiles :
p
\sqrt racine a \sqrt{a}
p p
1+ 2 \sqrt{1+\sqrt{2}}
p
3
x \sqrt[3]{x}
a
\frac fraction \frac{a}{b}
b
3
\frac{\pi^3}{12}
12
1
\frac{1}{2 + \frac{3}{4}}
2 + 34
1
n \gamma^{\frac{1}{n}}
lim x0+ f (x) < \lim_{x \to 0^+} f(x) < \epsilon
n 1
\sum \sum_{i=1}^n \frac{1}{i}
X
somme
i =1 i
aE a \in E
f :EF f : E \to F
AE A \subset E
+ +\infty
P = Q P \implies Q
a0 a \le 0
P Q P \iff Q
a>0 a > 0
\forall
a1 a \ge 1
\exists
\delta
\cup
\Delta
\cap
Pour (beaucoup) plus de dtails, consultez le manuel Une courte ( ?) introduction LATEX.
3.5. Mini-exercices
crire en LATEX toutes ces formules (qui par ailleurs sont vraies !).
p p ab
1. a b = p p
a+ b
+
X 1 2
2. 2
=
n=1 n 6
Z +R
2 p
3. lim e t dt =
R + R
4. > 0 0 (| x x0 | < = | ln(x) ln(x0 )| < )
+
X 1
4 2 1 1
5. k 8k + 1
=
k=0 16 8k + 4 8k + 5 8k + 6
124 Leons de choses
(0, 1)
p p
12 , 23 1
2, 2
3
p p p p
22 , 22
2
2 , 2
2
2
2
p 3 3 p
23 , 21 3
90
3 1
2 ,2
4 4
120 60
5
6 135 45 6
150 30
(1, 0) (1, 0)
180 360 2 x
210 330
7 11
6 225 315 6
p 240 300 p
5 7
270
23 , 21 4 4
3 1
2 , 2
4 5
3 3
p p 3 p p
22 , 22 2 2
2 , 2
2
p p
12 , 23 1
2 , 2
3
(0, 1)
Voici le cercle trigonomtrique (de rayon 1), le sens de lecture est linverse du sens des aiguilles
dune montre. Les angles remarquables sont marqus de 0 2 (en radian) et de 0 360 . Les
coordonnes des points correspondant ces angles sont aussi indiques.
Leons de choses 125
T
1
M
sin x
tan x
x
x
O cos x 1
Le point M a pour coordonnes (cos x, sin x). La droite (OM) coupe la droite dquation (x = 1) en T,
lordonne du point T est tan x.
cos2 x + sin2 x = 1
cos(x + 2) = cos x
sin(x + 2) = sin x
cos( x) = cos x
cos( + x) = cos x cos( x) = cos x cos( x) = sin x
2
sin( + x) = sin x sin( x) = sin x sin( x) = cos x
2
126 Leons de choses
sin( x) sin x
sin x
cos( + x) + x x
x x
cos x cos( x) cos x
sin( + x)
sin(
2 x)
sin x
2 x
x
cos(
2 x)
cos x
x 0
6 4 3 2
p p
3 2 1
cos x 1 0
2 2 2
p p
1 2 3
sin x 0 1
2 2 2
1 p
tan x 0 p 1 3
3
(0, 1) p
1 3
2, 2
p p
2 2
2 2 , 2
3
p
90
3 1
4 2 ,2
60
45
6
30
(1, 0)
0 0
Leons de choses 127
La fonction cosinus est priodique de priode 2 et elle paire (donc symtrique par rapport laxe
des ordonnes). La fonction sinus est aussi priodique de priode de 2 mais elle impaire (donc
symtrique par rapport lorigine).
y
+1
cos x
x
sin x
0 2 3
y
+1
sin x x
0
2 2
1 cos x
sin x
tan x =
cos x
y tan x
+1
0 x
2
2
3
2
1
128 Leons de choses
cos0 x = sin x
sin0 x = cos x
1
tan0 x = 1 + tan2 x =
cos2 x
On en dduit immdiatement :
Il est bon de connatre par cur les formules suivantes (faire a = b dans les formules dadditions) :
cos 2a = 2 cos2 a 1
= 1 2 sin2 a
= cos2 a sin2 a
sin 2a = 2 sin a cos a
2 tan a
tan 2a =
1 tan2 a
1
cos a cos b = cos(a + b) + cos(a b)
2
1
sin a sin b = cos(a b) cos(a + b)
2
1
sin a cos b = sin(a + b) + sin(a b)
2
Leons de choses 129
Enfin les formules de la tangente de larc moiti permettent dexprimer sinus, cosinus et tangente
en fonction de tan 2x .
cos x 1 t 2
= 1+ t 2
x
2t
Avec t = tan on a sin x = 1+ t 2
2
2t
tan x
= 1 t 2
Ces formules sont utiles pour le calcul de certaines intgrales par changement de variable, en
2dt
utilisant en plus la relation dx = .
1 + t2
4.5. Mini-exercices
1
1. Montrer que 1 + tan2 x = cos2 x
.
2. Montrer la formule daddition de tan(a + b).
3. Prouver la formule pour cos a cos b.
4. Prouver la formule pour cos p + cos q.
2 tan 2x
5. Prouver la formule : sin x = .
1 + (tan 2x )2
pp
6. Montrer que cos 8 = 21
2 + 2. Calculer cos 16
, cos 32 ,. . .
7. Exprimer cos(3x) en fonction cos x ; sin(3x) en fonction sin x ; tan(3x) en fonction tan x.
130 Leons de choses
ch2 x sh2 x = 1
2 tan a
tan 2a =
1 tan2 a
ch 2a = 2 ch2 a 1
= 1 + 2 sh2 a
= ch2 a + sh2 a
1 sh 2a = 2 sh a ch a
cos a cos b = cos(a + b) + cos(a b)
2
1 2 th a
sin a sin b = cos(a b) cos(a + b) th 2a =
2 1 + th2 a
1
sin a cos b = sin(a + b) + sin(a b)
2
Leons de choses 131
p+q pq
ch p + ch q = 2 ch ch
2 2
1 p+q pq
ch a ch b = ch(a + b) + ch(a b) ch p ch q = 2 sh sh
2 2 2
1 p+q pq
sh a sh b = ch(a + b) ch(a b) sh p + sh q = 2 sh ch
2 2 2
1 pq p+q
sh a ch b = sh(a + b) + sh(a b) sh p sh q = 2 sh ch
2 2 2
132 Leons de choses
1 t 2 1+ t 2
cos x = 1+ t 2
ch x = 1 t 2
x
2t x
2t
avec t = tan on a sin x = 1+ t 2
avec t = th on a sh x = 1 t 2
2 2
2t 2t
tan x
= th x
=
1 t 2 1+ t 2
1 1
Arccos0 x = p (| x| < 1) Argch0 x = p (x > 1)
1 x2 x2 1
1 1
Arcsin0 x = p (| x| < 1) Argsh0 x = p
1 x2 x2 + 1
1 1
Arctan0 x = Argth0 x = (| x| < 1)
1 + x2 1 x2
Leons de choses 133
x2 x4 x2 n n x2 k
+ (1)n + o(x2n+1 ) = (1)k + o(x2n+1 )
X
cos x = 1 +
2! 4! (2n)! k=0 (2k)!
x3 x5 x2n+1 n x2k+1
+ (1)n + o(x2n+2 ) = (1)k + o(x2n+2 )
X
sin x = x +
3! 5! (2n + 1)! k=0 (2k + 1)!
x3 2 5 17 7
tan x = x + + x + x + o(x8 )
3 15 315
x2 x4 x2 n n x2 k
+ o(x2n+1 ) = + o(x2n+1 )
X
ch x = 1 + + ++
2! 4! (2n)! k=0 (2k)!
x3 x5 x2n+1 n x2k+1
+ o(x2n+2 ) = + o(x2n+2 )
X
sh x = x + + ++
3! 5! (2n + 1)! k=0 (2k + 1)!
x3 2 5 17 7
th x = x + x x + o(x8 )
3 15 315
x2 x3 xn n xk
+ (1)n1 + o(x n ) = (1)k+1 + o(x n )
X
ln (1 + x) = x +
2 3 n k=1 k
!
( 1) ( 1) ( n + 1) n
n n
2
x k + o(x n )
X
(1 + x) = 1 + x + x ++ x + o(x ) =
2! n! k=0 k
1 n
= 1 x + x2 + (1)n x n + o(x n ) = (1)k x k + o(x n )
X
1+ x k=0
1 n
= 1 + x + x2 + + x n + o(x n ) = x k + o(x n )
X
1 x k=0
p x 1 1 1 3 5 (2n 3) n
1 + x = 1 + x2 + (1)n1 x + o(x n )
2 8 2n n!
1 x 3 1 3 5 (2n 1) n
p = 1 + x2 + (1)n x + o(x n )
1+ x 2 8 2n n!
1 x3 1 3 x5 1 3 5 (2n 1) x2n+1
arccos x = x + o(x2n+2 )
2 2 3 24 5 2 4 6 (2n) 2n + 1
1 x3 1 3 x5 1 3 5 (2n 1) x2n+1
arcsin x = x + + ++ + o(x2n+2 )
2 3 24 5 2 4 6 (2n) 2n + 1
x3 x5 x2n+1
arctan x = x + + + (1)n + o(x2n+2 )
3 5 2n + 1
134 Leons de choses
7. Formulaire : primitives
Primitives usuelles
C dsigne une constante arbitraire. Les intervalles sont prciser.
e t
Z
e t dt = +C ( C )
t+1 dt
Z Z
= ln | t| + C
t dt = +C ( 6= 1)
+1 t
dt 1 1 + t
Z
dt
Z
= ln +C
= Arctan t + C 1 t2 2 1 t
1 + t2
dt
Z p
p = ln t + t2 + + C
Z
dt t2 +
p = Arcsin t + C
1 t2
Z
ch t dt = sh t + C
Z
cos t dt = sin t + C Z
sh t dt = ch t + C
Z
sin t dt = cos t + C Z
dt
= th t + C
ch2 t
dt
Z
= tan t + C
cos2 t dt
Z
= coth t + C
sh2 t
dt
Z
= cotan t + C
sin2 t dt
Z
= 2Arctan e t + C
Z
dt
t
ch t
= ln tan + + C
cos t 2 4
dt t
Z
Z
dt
t = ln th + C
sh t 2
= ln tan + C
sin t 2
Z
th t dt = ln (ch t) + C
Z
tan t dt = ln |cos t| + C
Z Z
cotan t dt = ln |sin t| + C coth t dt = ln |sh t| + C
Les auteurs
Les auteurs des chapitres sont cits la fin de chaque chapitre.
Les exercices en vidos sont de Arnaud Bodin et La Blanc-Centi (universit Lille 1).