Exercice 2 (4 points) et prolongement — dans l’esprit de la principale 2026 (épreuve commune) et des contrôles 2017 et 2022 de la section Sciences de l’informatique
Partie A — épreuve commune : questions 1 et 2 sur le modèle de l’exercice de 4 points, questions 3 à 5 en prolongement
Soient Fact(n) et Puiss(x, n) deux fonctions déjà écrites, qui retournent respectivement le factoriel de n, noté n! (avec 0! = 1), et (avec ), où n est un entier positif ou nul et x un réel. Leurs entêtes sont :
Fonction Fact (n : Entier) : Entier
Fonction Puiss (x : Réel, n : Entier) : RéelOn considère la fonction f définie sur par si et . On admet que, pour tout réel x (en radians) :
Dans tout l’exercice, les fonctions Fact et Puiss seront utilisées sans être développées, et chaque algorithme sera accompagné de son tableau de déclaration des objets (Objet, Type/Nature, Rôle).
- Valider chacune des propositions suivantes en mettant la lettre V si elle est correcte ou la lettre F sinon. Justifier chaque réponse F.
- Le terme de rang k de la série s’obtient par
Puiss(x, 2 * k) / Fact(2 * k + 1), multiplié par 1 si k est pair et par −1 si k est impair. - Les m premiers termes de la série sont ceux des rangs k = 1, 2, …, m.
- Pour x = 0, additionner les termes calculés avec Puiss et Fact provoque une division par zéro, comme le calcul de Sin(x) / x.
- Le terme de rang 2 est égal à .
- Le terme de rang k de la série s’obtient par
- Écrire l’algorithme d’une fonction CalculF(x : Réel, m : Entier) : Réel qui retourne une approximation de f(x) égale à la somme des m premiers termes de cette série (m ≥ 1).
- Donner les valeurs successives de k, du terme ajouté et de la somme pour CalculF(1, 4) (valeurs arrondies à 10⁻⁶ près), puis la valeur retournée. La comparer à .
- On ne fixe plus le nombre de termes. Écrire l’algorithme d’une fonction CalculF2(x : Réel, epsilon : Réel) : Réel qui ajoute les termes successifs de la série et s’arrête dès que deux sommes successives diffèrent de moins de epsilon (epsilon > 0).
- Pour x = 2 et epsilon = 10⁻³, dresser le tableau des sommes successives calculées par CalculF2, puis donner le nombre de termes additionnés et la valeur retournée.
Partie B — prolongement, section Sciences de l’informatique
Deux nombres premiers sont dits cousins lorsqu’ils diffèrent de 4, comme 3 et 7 ou 13 et 17. On admet que la série des inverses des couples (p, p + 4) de nombres premiers cousins converge ; on note C sa somme :
C = (1/3 + 1/7) + (1/7 + 1/11) + (1/13 + 1/17) + (1/19 + 1/23) + (1/37 + 1/41) + …
On dispose de la fonction Premier(n), déjà écrite, qui retourne Vrai si l’entier n est premier et Faux sinon (1 n’est pas premier) ; elle sera utilisée sans être développée :
Fonction Premier (n : Entier) : Booléen- Donner les deux couples de nombres premiers cousins qui suivent (37, 41).
- Écrire l’algorithme d’une fonction Cousins(epsilon : Réel) : Réel qui retourne une valeur approchée de C : on ajoute les couples les uns après les autres, du plus petit p au plus grand, et l’on s’arrête dès que l’ajout d’un couple fait varier la somme de moins de epsilon.
- Pour epsilon = 0,05, donner les couples ajoutés, la somme après chaque ajout et la valeur retournée.
Un camarade propose la version suivante de la fonction Cousins :
Fonction Cousins (epsilon : Réel) : Réel
DEBUT
s ← 0
p ← 1
Répéter
p ← p + 2
ancien ← s
Si Premier(p) Et Premier(p + 4) Alors
s ← s + 1 / p + 1 / (p + 4)
FinSi
Jusqu'à Abs(s - ancien) < epsilon
Retourner s
FIN4. Que retourne cette version pour epsilon = 0,05 ? Justifier, puis corriger l’algorithme du camarade sans lui ajouter de second Répéter.
Voir la correction commentéeAprès avoir posé votre démarche
A.1 Idée : lire sur la formule l’exposant, le factoriel et le signe du terme de rang k, puis tester les cas limites k = 0 et x = 0.
| Proposition | a | b | c | d |
|---|---|---|---|---|
| Réponse | V | F | F | V |
a) V — le terme de rang k est : Puiss(x, 2 * k) donne , Fact(2 * k + 1) donne et vaut 1 pour k pair, −1 pour k impair. L’exposant (2k) et l’entier du factoriel (2k + 1) ne sont pas les mêmes : c’est ce qui distingue cette série de celle de sin x.
b) F — le premier terme, 1, est celui du rang k = 0 : les m premiers termes sont ceux des rangs 0 à m − 1. Avec les rangs 1 à m, on oublierait le 1 et l’on ajouterait un terme de trop.
c) F — le seul diviseur est Fact(2k + 1), qui vaut au moins 1. Pour x = 0, Puiss(0, 0) = 1 et Puiss(0, 2k) = 0 pour k ≥ 1 : la somme vaut 1 = f(0). C’est Sin(x) / x qui divise par zéro ; la série ne le fait jamais.
d) V — pour k = 2 : .
A.2 Idée : m termes connus d’avance, donc une boucle Pour sur les rangs 0 à m − 1 ; le signe alterne grâce à une variable multipliée par −1 à chaque tour.
Fonction CalculF (x : Réel, m : Entier) : Réel
DEBUT
s ← 0
signe ← 1
Pour k de 0 à m - 1 Faire
t ← Puiss(x, 2 * k) / Fact(2 * k + 1)
s ← s + signe * t
signe ← -signe
Fin Pour
Retourner s
FIN| Objet | Type/Nature | Rôle |
|---|---|---|
| s | Réel | Somme des termes déjà ajoutés |
| t | Réel | Valeur absolue du terme de rang k |
| signe | Entier | 1 ou −1 selon la parité du rang |
| k | Entier | Rang du terme |
| Fact | Fonction | Calcule (2k + 1)! |
| Puiss | Fonction | Calcule |
t et s sont des Réel même si Fact retourne un Entier : la division / donne un réel. x et m sont déclarés dans l’entête ; Fact et Puiss figurent dans le tableau avec la nature Fonction, sans être réécrites.
A.3 Appel CalculF(1, 4) : la boucle parcourt les rangs 0 à 3.
| k | terme ajouté | s |
|---|---|---|
| 0 | 1,000000 | 1,000000 |
| 1 | −0,166667 | 0,833333 |
| 2 | 0,008333 | 0,841667 |
| 3 | −0,000198 | 0,841468 |
On retourne . L’écart avec sin 1 ≈ 0,841471 vaut environ 2,7 × 10⁻⁶, moins que le premier terme négligé, 1/9! ≈ 2,8 × 10⁻⁶.
A.4 Idée : le nombre de tours n’est plus connu, donc Répéter … Jusqu’à. On mémorise la somme juste avant d’ajouter le terme ; le test compare les deux dernières sommes.
Fonction CalculF2 (x, epsilon : Réel) : Réel
DEBUT
s ← 0
signe ← 1
k ← 0
Répéter
ancien ← s
t ← Puiss(x, 2 * k) / Fact(2 * k + 1)
s ← s + signe * t
signe ← -signe
k ← k + 1
Jusqu'à Abs(s - ancien) < epsilon
Retourner s
FIN| Objet | Type/Nature | Rôle |
|---|---|---|
| s | Réel | Somme courante |
| ancien | Réel | Somme avant le dernier ajout |
| t | Réel | Valeur absolue du terme de rang k |
| signe | Entier | 1 ou −1 selon la parité du rang |
| k | Entier | Rang du terme |
| Fact | Fonction | Calcule (2k + 1)! |
| Puiss | Fonction | Calcule |
Deux sommes successives diffèrent exactement du terme ajouté : la condition revient à s’arrêter dès que le terme ajouté est, en valeur absolue, inférieur à epsilon. Avec Répéter, le premier terme est toujours ajouté avant le premier test ; une boucle Tant que Abs(s − ancien) ≥ epsilon, partie de s = ancien = 0, ne ferait aucun tour.
A.5 Pour x = 2 et epsilon = 10⁻³ :
| k | terme ajouté | s | Abs(s − ancien) |
|---|---|---|---|
| 0 | 1,000000 | 1,000000 | 1,000000 |
| 1 | −0,666667 | 0,333333 | 0,666667 |
| 2 | 0,133333 | 0,466667 | 0,133333 |
| 3 | −0,012698 | 0,453968 | 0,012698 |
| 4 | 0,000705 | 0,454674 | 0,000705 |
Au rang 4, l’écart 0,000705 est inférieur à 10⁻³ : arrêt. La fonction additionne 5 termes (rangs 0 à 4) et retourne , pour f(2) = sin(2) / 2 ≈ 0,454649.
B.1 Idée : tester les impairs p qui suivent 37 — p et p + 4 doivent être premiers tous les deux. 39 n’est pas premier et 41 + 4 = 45 non plus ; 43 et 47 le sont : (43, 47). Ensuite, les premiers 47, 53, 59 et 61 donnent 51 = 3 × 17, 57 = 3 × 19, 63 et 65, qui ne sont pas premiers ; 67 et 71 le sont : (67, 71).
B.2 Idée : deux boucles emboîtées — la boucle intérieure cherche le couple suivant, la boucle extérieure mémorise la somme, ajoute le couple, puis teste : chaque tour extérieur ajoute exactement un couple.
Fonction Cousins (epsilon : Réel) : Réel
DEBUT
s ← 0
p ← 1
Répéter
Répéter
p ← p + 2
Jusqu'à Premier(p) Et Premier(p + 4)
ancien ← s
s ← s + 1 / p + 1 / (p + 4)
Jusqu'à Abs(s - ancien) < epsilon
Retourner s
FIN| Objet | Type/Nature | Rôle |
|---|---|---|
| s | Réel | Somme des couples déjà ajoutés |
| ancien | Réel | Somme avant le dernier ajout |
| p | Entier | Plus petit nombre du couple testé |
| Premier | Fonction | Teste si un entier est premier |
p part de 1 et avance de 2 : seuls les impairs sont testés, ce qui suffit puisque 2 et 6 ne forment pas un couple. Le premier couple trouvé est (3, 7).
B.3 Pour epsilon = 0,05 :
| Couple | 1/p + 1/(p + 4) | s |
|---|---|---|
| (3, 7) | 0,476190 | 0,476190 |
| (7, 11) | 0,233766 | 0,709957 |
| (13, 17) | 0,135747 | 0,845703 |
| (19, 23) | 0,096110 | 0,941813 |
| (37, 41) | 0,051417 | 0,993230 |
| (43, 47) | 0,044532 | 1,037763 |
L’ajout de (43, 47) fait varier la somme de 0,044532 < 0,05 : arrêt. On retourne , après six couples. Ce n’est pas C à 0,05 près : le test ne mesure que le dernier couple ajouté, et la somme continue de croître lentement — on obtient ≈ 1,196 pour epsilon = 10⁻² et ≈ 1,408 pour epsilon = 10⁻⁴.
B.4 Idée : suivre la version du camarade tour par tour, en regardant ce que vaut s − ancien quand rien n’est ajouté. Tour 1 : p = 3, ancien = 0, (3, 7) est un couple et s = 10/21 ≈ 0,476190 ; l’écart dépasse 0,05, on continue. Tour 2 : p = 5, ancien = s, 9 n’est pas premier, rien n’est ajouté : s − ancien = 0 < 0,05 et la boucle s’arrête. Cette version retourne , la valeur du seul premier couple.
Correction : ne mémoriser la somme que lorsqu’un couple est ajouté, en plaçant ancien ← s à l’intérieur du Si, juste avant l’addition. Aux tours sans couple, s − ancien reste égal au dernier couple ajouté et le test ne se déclenche pas à tort. Pour que ce test soit défini dès le premier tour, même si le premier p testé ne donnait pas de couple, on initialise ancien avant la boucle :
s ← 0
p ← 1
ancien ← -1
Répéter
p ← p + 2
Si Premier(p) Et Premier(p + 4) Alors
ancien ← s
s ← s + 1 / p + 1 / (p + 4)
FinSi
Jusqu'à Abs(s - ancien) < epsilonCette version retourne les mêmes valeurs que celle de la question B.2.