Vous êtes sur la page 1sur 5

1er octobre 2022 DS n° 1 (1 heure) Informatique commune

Le sujet est recto-verso.


L’utilisation de la calculatrice est interdite.
Le langage de programmation à utiliser est obligatoirement Python.

Dans les exercices 1 et 2, on ne demande pas d’écrire de fonctions.


Exercice 1 Calculs
Les questions de cet exercice sont indépendantes.
a) Que renvoient respectivement les instructions 2*3 et 2**3 ?
b) Qu’affiche 24%2 == 0 ? Justifier brièvement.
Écrire les instructions permettant de réaliser la/les calcul(s) suivant(s) :
c) Soient x et y deux variables contenant chacune un nombre.
Écrire un script qui affiche le plus grand des deux nombres.
d) On donne trois chaînes de caractères s1, s2 et s3.
Afficher la chaîne de caractères obtenue par concaténation de s1, s2 et s3.
Par exemple, si s1 contient ’Au’, s2 contient ’ ’ et s3 contient ’revoir’, on demande
d’afficher ’Au revoir’.
Exercice 2 Boucle sous condition
a) Soit la suite (un ) définie par u0 = 0 et pour tout n > 0 par un = 3n + n − 1. On admet que
cette suite est croissante.
Écrire un programme qui affiche la valeur du plus petit entier n0 tel que, pour tout n ≥ n0 ,
on ait un ≥ 1015 .
b) Écrire un programme qui affiche le plus grand entier naturel n tel que
12 + 22 + ... + n2 ≤ 26 042

Exercice 3 Tableaux de type list


Dans cet exercice, t désigne un tableau de type list contenant des entiers.
a) Écrire une fonction sup(t, x) qui parcourt le tableau t pour vérifier s’il existe un élément
de t supérieur ou égal à x. Si tel est le cas, la fonction renvoie True, sinon elle renvoie
False.
Par exemple, sup([13, 35, 79, 1113, 1517], 1113) renvoie True et
sup([13, 35, 79, 1113, 1517], 1600) renvoie False.
b) Écrire une fonction produit(t) qui renvoie le produit des éléments de t.
c) Écrire une fonction occurrence(t, x) qui renvoie le nombre de fois qu’apparaît x dans t.
d) Écrire une fonction uns(n) qui renvoie un tableau de type list contenant n fois l’entier 1.
Par exemple, uns(4) renvoie [1, 1, 1, 1].
Exercice 4 Sur les sommes de diviseurs
a) Soit n un entier naturel non nul.
Écrire une fonction somme_diviseurs(n) qui renvoie la somme des diviseurs de n.
Par exemple, somme_diviseurs(1) renvoie 1 et somme_diviseurs(24) renvoie 60.
b) Soit n un entier naturel non nul.
Écrire une fonction plus_grande_somme_diviseurs(n) qui renvoie le tuple constitué de :
— la plus grande somme des diviseurs d’un entier k vérifiant k ∈ J1, nK,
— la valeur de k correspondant à cette somme la plus élevée.
Par exemple, plus_grande_somme_diviseurs(28) renvoie (60, 24).

Lycée Michelet - CPGE 1re année 1


1er octobre 2022 DS n° 1 (1 heure) Informatique commune

c) Un entier naturel n non nul est dit parfait lorsque la somme de ses diviseurs est égale à 2n.
Écrire une fonction parfait(n) qui renvoie le booléen True si n est parfait, et False dans
le cas contraire.
Par exemple, parfait(6) renvoie True ; parfait(28) renvoie True ; parfait(24) renvoie
False.
d) Soit b un entier naturel non nul.
Écrire une fonction liste_parfait(b) qui renvoie la liste des entiers naturels parfaits de
l’intervalle J1, bK.
Par exemple, liste_parfait(1000) renvoie [6, 28, 496].
Exercice 5 Fractions égyptiennes
On considère une fraction ab telle que a ∈ N, b ∈ N∗ et 0 < ab < 1 ("fraction propre").
L’objectif est de la décomposer en somme de fractions de la forme d1 (avec d ≥ 1).
8 1 1 1805 1
Par exemple, 15
= 2
+ 30
ou 1806
= 2
+ 31 + 17 + 1
43
ou trivialement 2
4
= 12 .
La décomposition n’est en général pas unique : nous proposons un algorithme dit « glouton »
pour réaliser une telle décomposition.
Dans cet exercice, nous supposons avoir déjà importé la fonction ceil qui calcule la valeur entière
directement supérieure à un nombre décimal (par exemple, ceil(3.2) renvoie 4). On l’a fait par
l’instruction : from math import ceil
a) Écrire une fonction simplifie(a, b), avec a supposé non nul et a < b, qui, si b est un
multiple de a, divise par a respectivement le numérateur et le dénominateur de ab , puis
renvoie le tuple des nouvelles valeurs du numérateur et du dénominateur. Par défaut, on
renvoie a et b.
Par exemple, simplifie(3, 9) renvoie (1, 3) et simplifie(1, 3) renvoie (1, 3).
a
Dans toute la suite de l’énoncé, « simplifier » la fraction b
signifie diviser son numérateur et son
dénominateur par a.
La décomposition en fractions égyptiennes que nous adoptons, repose sur le calcul suivant :
si c est le plus grand entier non nul tel que 1c ≤ ab < c−1 1
(donc c = ⌈b/a⌉, valeur entière
a 1 ac−b
directement supérieure à b/a), alors b = c + bc .
Si b n’est pas un multiple de a, alors 1 ≤ ac − b < a : on peut itérer la décomposition en fractions
égyptienne avec ac−b
bc
et constater que celle-ci va s’achever avec un numérateur égal à 1.

b) Écrire une fonction prochaine_fraction(a, b, c) qui, à partir des valeurs de a, b, c


calcule le numérateur ac − b et le dénominateur bc de la prochaine fraction à décomposer,
les simplifient, et renvoie le tuple formé du numérateur et du dénominateur.
Par exemple, prochaine_fraction(1805, 1806, ceil(1806/1805) renvoie (1804, 3612).
c) Les numérateurs d’une décomposition en fractions égyptiennes étant tous égaux à 1, on
souhaite uniquement recueillir une liste des dénominateurs de la décomposition.
Écrire une fonction decomposition_egyptienne(a, b) qui, tout d’abord simplifie a et b,
puis réalise itérativement la décomposition égyptienne de la fraction ab simplifiée.
Par exemple, decomposition_egyptienne(1805, 1806) renvoie [2, 3, 7, 43] et
decomposition_egyptienne(2, 4) renvoie [2].
d) Soit une fraction ab avec a et b deux entiers naturels non nuls quelconques, donc éventuel-
lement a > b. Elle se décompose sous la forme n + pq où n ∈ N et 0 < pq < 1.
Écrire une fonction decomposition_egyptienne_generale(a, b) qui renvoie le tuple
formé de n et de la décomposition égyptienne de la fraction pq = ab − n.
Par exemple, decomposition_egyptienne_generale(19, 8) renvoie (2, [3, 24]), ce
qui signifie que 19
8
= 2 + 13 + 24
1
.

Lycée Michelet - CPGE 1re année 2


1er octobre 2022 DS n° 1 (1 heure) Informatique commune

Corrigé
Exercice 1 Calculs
a) 2*3 renvoie 2 × 3 = 6 et 2**3 renvoie 23 = 8 ?
b) 24%2 renvoie le reste de la division euclidienne de 24 par 2.
L’instruction 24%2 == 0 teste donc si 24 est pair.
Comme c’est le cas, l’instruction 24%2 == 0 renvoie True.
c)
6 if x >= y :
7 print ( x )
8 else :
9 print ( y )

d) Dans le shell : s1 + s2 + s3
Dans l’éditeur de programme : print(s1 + s2 + s3)
Exercice 2 Boucle sous condition
a)
14 n = 0
15 u = 0
16 while u < 10**15:
17 n = n + 1
18 u = 3** n + n - 1
19 print ( n ) # 32

b)
22 n = 1
23 somme = 1
24 while somme <= 26042:
25 n = n + 1
26 somme = somme + n **2
27 print (n -1) # 42

Exercice 3 Tableaux de type list


a)
30 def sup (t , x ) :
31 n = len ( t )
32 for i in range ( n ) :
33 if t [ i ] >= x :
34 return True
35 return False
36
37 t = [13 , 35 , 79 , 1113 , 1517]; x = 1113; assert sup (t , x ) == True
38 t = [13 , 35 , 79 , 1113 , 1517]; x = 1600; assert sup (t , x ) == False

b)
41 def produit ( t ) :
42 n = len ( t )
43 prod = 1
44 for i in range ( n ) :
45 prod = prod * t [ i ]
46 return prod
47
48 t = [1 , 2 , 3 , 4]; assert produit ( t ) == 24

Lycée Michelet - CPGE 1re année 3


1er octobre 2022 DS n° 1 (1 heure) Informatique commune

c)
51 def occurrence (t , x ) :
52 n = len ( t )
53 nbre = 0
54 for i in range ( n ) :
55 if t [ i ] == x :
56 nbre = nbre + 1
57 return nbre
58
59 t = [1 , 2 , 3 , 4]
60 assert occurrence (t , 0) == 0; assert occurrence (t , 1) == 1
61 t = [1 , 2 , 1 , 1]; assert occurrence (t , 1) == 3

d)
64 def uns ( n ) :
65 t = []
66 for i in range ( n ) :
67 t . append (1)
68 return t
69

70 # ou
71 def uns ( n ) :
72 return [1 for _ in range ( n ) ]
73
74 assert uns (4) == [1 , 1 , 1 , 1]

Exercice 4 Sur les sommes de diviseurs


a)
77 def somme_diviseurs ( n ) :
78 somme = 0
79 for i in range (1 , n +1) :
80 if n % i == 0:
81 somme = somme + i # ou somme += i
82 return somme
83

84 n = 1; assert somme_diviseurs ( n ) == 1
85 n = 24; assert somme_diviseurs ( n ) == 60

b)
88 def p l u s _ g r a n d e _ s o m m e _ d i v i s e u r s ( n ) :
89 somme_max = 0
90 k_max = 0
91 for k in range (1 , n +1) :
92 s = somme_diviseurs ( k )
93 if s > somme_max :
94 somme_max = s
95 k_max = k
96 return somme_max , k_max
97
98 assert p l u s _ g r a n d e _ s o m m e _ d i v i s e u r s (24) == (60 , 24)

c)
101 def parfait ( n ) :
102 return somme_diviseurs ( n ) == 2* n

Lycée Michelet - CPGE 1re année 4


1er octobre 2022 DS n° 1 (1 heure) Informatique commune

d)
105 def liste_parfait ( b ) :
106 t = []
107 for i in range (1 , b +1) :
108 if parfait ( i ) :
109 t . append ( i )
110 return t
111
112 assert liste_parfait (1000) == [6 , 28 , 496]

Exercice 5 Fractions égyptiennes


a)
115 from math import ceil
116

117 def simplifie (a , b ) :


118 asimple , bsimple = a , b
119 if b % a == 0:
120 bsimple = b // a
121 asimple = 1
122 return asimple , bsimple
123
124 a , b = 3 , 9; assert simplifie (a , b ) == (1 , 3)
125 a , b = 1 , 3; assert simplifie (a , b ) == (1 , 3)

b)
128 def pr oc ha in e_ fra ct io n (a , b , c ) :
129 afrac = a *c - b
130 bfrac = b * c
131 afracsimple , bfracsimple = simplifie ( afrac , bfrac )
132 return afracsimple , bfracsimple
133
134 a , b , c = 1805 , 1806 , ceil (1806/1805) ; assert pr oc ha in e_ fr ac ti on (a , b ,
c ) == (1804 , 3612)

c)
137 def d e co m p o s i t i o n _ e g y p t i e n n e (a , b ) :
138 L = []
139 asimple , bsimple = simplifie (a , b )
140 while asimple != 1 :
141 c = ceil ( bsimple / asimple )
142 L . append ( c )
143 asimple , bsimple = pr oc ha in e_ fr ac ti on ( asimple , bsimple , c )
144 L . append ( bsimple )
145 return L
146
147 a , b = 1805 , 1806; assert d e c o m p o s i t i o n _ e g y p t i e n n e (a , b ) == [2 , 3 , 7 ,
43]
148 a , b = 2 , 4; assert d e c o m p o s i t i o n _ e g y p t i e n n e (a , b ) == [2]

d)
152 def d e c o m p o s i t i o n _ e g y p t i e n n e _ g e n e r a l e (a , b ) :
153 return a // b , d e c o m p o s i t i o n _ e g y p t i e n n e ( a %b , b )
154

155 assert d e c o m p o s i t i o n _ e g y p t i e n n e _ g e n e r a l e (19 , 8) == (2 , [3 , 24])

Lycée Michelet - CPGE 1re année 5

Vous aimerez peut-être aussi