0% ont trouvé ce document utile (0 vote)
37 vues9 pages

Correction de TP1

Le document présente des algorithmes et des codes Python pour diverses opérations mathématiques, y compris la représentation d'entiers dans différentes bases, la division euclidienne, le calcul du PGCD et des coefficients de Bézout, ainsi que la résolution d'équations diophantiennes. Il aborde également des méthodes pour tester la primalité d'un entier et pour décomposer un entier en facteurs premiers. Chaque algorithme est accompagné d'exemples d'utilisation en Python.

Transféré par

smart progrmer
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
37 vues9 pages

Correction de TP1

Le document présente des algorithmes et des codes Python pour diverses opérations mathématiques, y compris la représentation d'entiers dans différentes bases, la division euclidienne, le calcul du PGCD et des coefficients de Bézout, ainsi que la résolution d'équations diophantiennes. Il aborde également des méthodes pour tester la primalité d'un entier et pour décomposer un entier en facteurs premiers. Chaque algorithme est accompagné d'exemples d'utilisation en Python.

Transféré par

smart progrmer
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Correction de la série de TP 1

Exercice 1.
Algorithme : Représentation d’un entier a dans une base g
Entrées : a (entier positif), g (base entière > 1)
Sorties : representation (liste des chiffres), k (nombre de chiffres)

Algorithm 1 Représenter un entier a dans une base g


1: if g ≤ 1 then
2: Afficher une erreur "Base invalide".
3: end if
4: if a < 0 then
5: Afficher une erreur "Entier invalide".
6: end if
7: if a = 0 then
8: k←1
9: representation ← [0]
10: return representation, k
11: else
12: k ← ⌊logg (a)⌋ + 1
13: representation ← []
14: end if
15: while a > 0 do
16: reste ← a mod g
17: Ajouter reste au début de representation.
18: a ← ⌊a/g⌋
19: end while
20: return representation, k

Code Python : Représentation d’un entier dans une base

1 import math
2

3 def representer_base (a , g ) :
4 # V r i f i c a t i o n des conditions sur les e n t r e s
5 if g <= 1:
6 raise ValueError ( " La base doit tre sup rieure 1. " )
7 if a < 0:
8 raise ValueError ( " L ’ entier convertir doit tre positif . " )
9

10 # Cas particulier : si a est 0


11 if a == 0:
12 return [0] , 1
13

1
14 # Calcul de k
15 k = math . floor ( math . log (a , g ) ) + 1
16

17 # Trouver les coefficients a_i


18 representation = []
19 while a > 0:
20 reste = a % g
21 representation . insert (0 , reste ) # Ajouter au d b u t
22 a //= g
23

24 return representation , k
25

26 # Exemple d ’ utilisation
27 a = 345
28 g = 10
29 representation , k = representer_base (a , g )
30 print ( f " R e p r s e n t a t i o n de { a } en base { g } : { representation } " )
31 print ( f " Nombre de chiffres ( k ) : { k } " )
Listing 1 – Fonction Python pour représenter un entier a dans une base g

exercice 2.
1. Algorithme : Division euclidienne d’un entier a par un entier b
Entrées : - a : un entier (positif ou négatif). - b : un entier non nul.
Sorties : - q : le quotient de la division euclidienne (q = ⌊a/b⌋). - r : le reste de la division
euclidienne (r = a − b · q).

Algorithm 2 Calcul de la division euclidienne


Require: b ̸= 0
Ensure: Retourne q, r
1: if b = 0 then
2: Afficher une erreur "Division par zéro".
3: Arrêter l’algorithme.
4: end if
5: q ← ⌊a/b⌋ ▷ Calcul du quotient entier.
6: r ← a − b · q ▷ Calcul du reste.
7: return q, r

2
Code Python : Division euclidienne

1 def divisio n _ e u c l i d i e n n e (a , b ) :
2 # V r i f i c a t i o n de l ’ e n t r e
3 if b == 0:
4 raise ValueError ( " Division par z r o non permise . " )
5

6 # Calcul du quotient et du reste


7 q = a // b # Quotient entier
8 r = a % b # Reste
9

10 return q , r
11

12 # Exemple d ’ utilisation
13 a = 17
14 b = 5
15 quotient , reste = d i v i s i o n _ e u c l i d i e n n e (a , b )
16 print ( f " Division euclidienne de { a } par { b } : " )
17 print ( f " Quotient : { quotient } , Reste : { reste } " )
Listing 2 – Fonction Python pour calculer la division euclidienne

2. Algorithme : Calcul du PGCD et des coefficients de Bézout


Entrées : - a et b : deux entiers.
Sorties : - PGCD(a, b) : le plus grand commun diviseur de a et b. - u et v : les coefficients associés
dans le théorème de Bézout, c’est-à-dire u et v tels que :

PGCD(a, b) = u · a + v · b

Algorithm 3 Calcul du PGCD et des coefficients de Bézout


1: Initialiser r0 ← a, r1 ← b, u0 ← 1, u1 ← 0, v0 ← 0, v1 ← 1
2: while r1 ̸= 0 do
3: Calculer q ← ⌊r0 /r1 ⌋
4: Mettre à jour r0 ← r1 , r1 ← r0 − q · r1
5: Mettre à jour u0 ← u1 , u1 ← u0 − q · u1
6: Mettre à jour v0 ← v1 , v1 ← v0 − q · v1
7: end while
8: return r0 , u0 , v0

3
Code Python : Calcul du PGCD et des coefficients de Bézout

1 def pgcd_et_bezout (a , b ) :
2 # Initialisation des valeurs
3 r0 , r1 = a , b
4 u0 , u1 = 1 , 0
5 v0 , v1 = 0 , 1
6

7 # Algorithme d ’ Euclide tendu


8 while r1 != 0:
9 # Calcul du quotient
10 q = r0 // r1
11

12 # Mise jour des restes


13 r0 , r1 = r1 , r0 - q * r1
14

15 # Mise jour des coefficients de B z o u t


16 u0 , u1 = u1 , u0 - q * u1
17 v0 , v1 = v1 , v0 - q * v1
18

19 # Retourner le PGCD et les coefficients de B z o u t


20 return r0 , u0 , v0
21

22 # Exemple d ’ utilisation
23 a = 56
24 b = 15
25 pgcd , u , v = pgcd_et_bezout (a , b )
26 print ( f " PGCD ({ a } , { b }) = { pgcd } " )
27 print ( f " Coefficients de B z o u t : u = { u } , v = { v } " )
Listing 3 – Fonction Python pour calculer le PGCD et les coefficients de Bézout

Exercice 3. Algorithme pour trouver toutes les solutions de l’équation diophan-


tienne ax + by = n
Entrées : - a, b, n : trois entiers donnés.
Sorties : - Solutions paramétriques sous forme de x = x0 + k · db , y = y0 − k · ad , où k est un
entier quelconque.

Algorithm 4 Trouver toutes les solutions de ax + by = n


1: Calculer PGCD(a, b) = d en utilisant l’algorithme d’Euclide étendu
2: if d ne divise pas n then
3: return "Pas de solution"
4: else
5: Calculer la solution particulière x0 = u · nd , y0 = v · nd
6: Retourner les solutions paramétriques : x = x0 + k · db , y = y0 − k · a
d
7: end if

4
Code Python : Trouver toutes les solutions de l’équation diophantienne

1 def pgcd_et_bezout (a , b ) :
2 # Initialisation des valeurs
3 r0 , r1 = a , b
4 u0 , u1 = 1 , 0
5 v0 , v1 = 0 , 1
6

7 # Algorithme d ’ Euclide tendu


8 while r1 != 0:
9 q = r0 // r1
10 r0 , r1 = r1 , r0 - q * r1
11 u0 , u1 = u1 , u0 - q * u1
12 v0 , v1 = v1 , v0 - q * v1
13

14 return r0 , u0 , v0 # PGCD , u , v
15

16 def t r o u v e r _ s o l u t i o n s _ d i o p h a n t i e n n e s (a , b , n ) :
17 # Calcul du PGCD et des coefficients de B z o u t
18 d , u , v = pgcd_et_bezout (a , b )
19

20 # V r i f i e r si le PGCD divise n
21 if n % d != 0:
22 return " Pas de solution " # Aucune solution si PGCD ne divise n
23

24 # Calculer la solution p a r t i c u l i r e
25 x0 = u * ( n // d )
26 y0 = v * ( n // d )
27

28 # Toutes les solutions : x = x0 + k * ( b / d ) , y = y0 - k * ( a / d )


29 def solutions ( k ) :
30 x = x0 + k * ( b // d )
31 y = y0 - k * ( a // d )
32 return x , y
33

34 return solutions
Listing 4 – Fonction Python pour trouver toutes les solutions de ax + by = n

Exercice 4.
1. Algorithme pour tester si un entier n est premier
Entrées : - n : un entier.
Sortie : - Vrai si n est premier, sinon faux.

5
Algorithm 5 Tester si un entier n est premier
1: if n ≤ 1 then
2: return Non premier
3: end if

4: for p = 2 to ⌊ n⌋ do
5: if n mod p = 0 then
6: return Non premier
7: end if
8: end for
9: return Premier

Code Python : Tester si un entier n est premier

1 import math
2

3 def est_premier ( n ) :
4 # Cas particulier : n <= 1 n ’ est pas premier
5 if n <= 1:
6 return False
7

8 # V r i f i c a t i o n de la d i v i s i b i l i t par tous les entiers de 2


sqrt ( n )
9 for p in range (2 , int ( math . sqrt ( n ) ) + 1) :
10 if n % p == 0:
11 return False # n est divisible par p , donc non premier
12

13 return True # n n ’ est divisible par aucun nombre de 2 sqrt ( n ) ,


donc premier
14

15 # Exemple d ’ utilisation
16 n = 29
17 if est_premier ( n ) :
18 print ( f " { n } est premier . " )
19 else :
20 print ( f " { n } n ’ est pas premier . " )
Listing 5 – Fonction Python pour tester si un entier n est premier

2. Algorithme du Crible d’Ératosthène


Entrée : Un entier n.
Sortie : Liste des nombres premiers inférieurs ou égaux à n.

6
Algorithm 6 Crible d’Ératosthène pour trouver tous les nombres premiers jusqu’à n
1: Créer une liste is_prime de taille n + 1, initialisée à True.
2: Définir is_prime[0] = False et is_prime[1] = False.

3: for p = 2 to ⌊ n⌋ do
4: if is_prime[p] = True then
5: for k = p2 to n step p do
6: is_prime[k] = False
7: end for
8: end if
9: end for
10: Retourner la liste des indices i où is_prime[i] = True.

Code Python : Crible d’Ératosthène

1 import math
2

3 def crible_e ra to st he ne ( n ) :
4 # C r e r une liste pour marquer les nombres premiers
5 is_prime = [ True ] * ( n + 1)
6 is_prime [0] = is_prime [1] = False # 0 et 1 ne sont pas premiers
7

8 # Crible d ’ ratosthne
9 for p in range (2 , int ( math . sqrt ( n ) ) + 1) :
10 if is_prime [ p ]: # Si p est un nombre premier
11 for multiple in range ( p * p , n + 1 , p ) : # Marquer les
multiples de p
12 is_prime [ multiple ] = False
13

14 # Renvoyer les nombres premiers


15 primes = [ i for i in range (2 , n + 1) if is_prime [ i ]]
16 return primes
17

18 # Exemple d ’ utilisation
19 n = 30
20 print ( f " Les nombres premiers i n f r i e u r s ou gaux { n } sont : {
crible_e ra to st he ne ( n ) } " )
Listing 6 – Fonction Python pour appliquer le Crible d’Ératosthène

Exercice 5.
Algorithme pour décomposer un entier en produit de ses facteurs premiers
Entrée : Un entier n.
Sortie : Liste des facteurs premiers de n et leurs puissances respectives.

7
Algorithm 7 Décomposer un entier n en produit de ses facteurs premiers
1: Créer une liste factors vide pour les facteurs premiers.
2: Créer une liste exponents vide pour les puissances des facteurs.

3: for i = 2 to ⌊ n⌋ do
4: exponent = 0
5: while n % i == 0 do
6: n = n // i
7: exponent += 1
8: end while
9: if exponent > 0 then
10: Ajouter i à la liste factors
11: Ajouter exponent à la liste exponents
12: end if
13: end for
14: if n > 1 then
15: Ajouter n à la liste factors
16: Ajouter 1 à la liste exponents
17: end if
18: Retourner les listes factors et exponents

Code Python : Décomposition d’un entier en produit de ses facteurs premiers

1 def decomposeur ( n ) :
2 factors = [] # Liste pour les facteurs premiers
3 exponents = [] # Liste pour les puissances des facteurs
4

5 # D c o m p o s e r les facteurs premiers jusqu ’ la racine c a r r e de n


6 i = 2
7 while i * i <= n :
8 exponent = 0
9 while n % i == 0: # Si i divise n
10 n //= i
11 exponent += 1
12 if exponent > 0:
13 factors . append ( i ) # Ajouter le facteur premier
14 exponents . append ( exponent ) # Ajouter sa puissance
15 i += 1
16

17 # Si n est encore plus grand que 1 , c ’ est un facteur premier


18 if n > 1:
19 factors . append ( n )
20 exponents . append (1)
21

22 return factors , exponents


23

24 # Exemple d ’ utilisation
25 n = 60

8
26 factors , exponents = decomposeur ( n )
27 print ( f " D c o m p o s i t i o n de { n } : " )
28 for i in range ( len ( factors ) ) :
29 print ( f " { factors [ i ]}^{ exponents [ i ]} " )
Listing 7 – Fonction Python pour décomposer un entier en facteurs premiers

Vous aimerez peut-être aussi