Aller au contenu

Mathématiques (spécialité) · PremièreÉpreuve anticipée de mathématiques

Algorithmes sur les suites : exercices corrigés de 1re spécialité

Publié le 6 novembre 2026 · Mis à jour le 6 novembre 2026 · Signaler une erreur

L'essentiel

  • Une suite se programme avec une boucle for quand le nombre de termes est connu, avec une boucle while quand on cherche un seuil.
  • Pour une suite récurrente, on met à jour une variable ; pour garder tous les termes, on les range dans une liste.
  • Une compréhension de liste construit en une ligne les termes d'une suite définie par une formule explicite.
  • Dans un seuil, la condition du while est la négation de ce qu'on cherche, et le compteur donne le rang cherché.
  • Toujours contrôler l'algorithme en calculant à la main les deux ou trois premiers termes.

Comment utiliser ces exercices

Un algorithme est une suite finie d'instructions, sans ambiguïté, qui permet de résoudre toute une famille de problèmes.4 Appliqué aux suites, il sert à calculer un terme, à fabriquer la liste des premiers termes ou à trouver à partir de quel rang une suite franchit une valeur donnée. Les programmes de la voie générale placent d'ailleurs les suites parmi les thèmes où l'on modélise et où l'on représente des situations.1

Ces exercices supposent que tu sais déjà manipuler une liste en Python et écrire une compréhension de liste. Ils sont classés par difficulté croissante : les trois premiers (niveau 1) travaillent le calcul de termes, les suivants (niveau 2) introduisent les seuils et la détection d'une nature de suite, les derniers (niveau 3) combinent plusieurs idées.

Les exercices

Exercice 1 Calculer un terme avec une boucle for

★☆☆Environ 8 min

On considère la suite (un)(u_n) définie par u0=5u_0 = 5 et, pour tout entier naturel nn, un+1=un+3u_{n+1} = u_n + 3.

On propose le script suivant, dont une ligne est à compléter :

u = 5
for i in range(10):
    u = ...
print(u)
  1. Quelle instruction doit remplacer les points de suspension ?
  2. Quelle valeur le script affiche-t-il ?
  3. Quel terme de la suite cette valeur représente-t-elle ?
Indice 1

Chaque passage dans la boucle fait passer d'un terme au suivant.

Indice 2

Compte le nombre de passages dans la boucle : range(10) en donne dix.

Voir la correction pas à pas
  1. On lit la relation de récurrence : pour passer d'un terme au suivant, on ajoute 3. L'instruction est donc u = u + 3.

  2. On compte les passages : range(10) répète la boucle dix fois, en partant de u0u_0. Après le premier passage, u vaut u1u_1 ; après le dixième, u vaut u10u_{10}.

  3. On vérifie avec les premiers termes : u1=8u_1 = 8, u2=11u_2 = 11, u3=14u_3 = 14. On ajoute 3 à chaque passage, donc après dix passages on a ajouté 10×3=3010 \times 3 = 30 au terme de départ.

  4. On calcule : u10=5+30=35u_{10} = 5 + 30 = 35. Le script affiche 35.

La suite est arithmétique de raison 3, donc un=5+3nu_n = 5 + 3n et u10=35u_{10} = 35. Le nombre de tours de boucle est égal au rang visé quand on part de u0u_0.

Exercice 2 Construire la liste des premiers termes

★☆☆Environ 10 min

On considère la suite (un)(u_n) définie par u0=3u_0 = 3 et un+1=2un−1u_{n+1} = 2u_n - 1.

  1. Écris un script Python qui construit la liste L contenant u0,u1,…,u7u_0, u_1, \dots, u_7 en utilisant L.append.
  2. Donne les huit termes de cette liste.
  3. Quelle est la valeur de u7u_7 ?
Indice 1

Commence par L = [3], puis ajoute à chaque tour un terme calculé à partir du dernier élément de la liste, L[-1].

Indice 2

Il faut sept ajouts pour passer de la liste [u0][u_0] à la liste [u0,…,u7][u_0, \dots, u_7].

Voir la correction pas à pas
  1. On initialise la liste avec le premier terme : L = [3].

  2. On écrit la boucle : for i in range(7): L.append(2 * L[-1] - 1). Sept passages ajoutent u1u_1 à u7u_7 derrière u0u_0.

  3. On calcule à la main pour contrôler : u1=2×3−1=5u_1 = 2 \times 3 - 1 = 5, u2=9u_2 = 9, u3=17u_3 = 17, u4=33u_4 = 33, u5=65u_5 = 65, u6=129u_6 = 129, u7=257u_7 = 257.

  4. On lit le résultat : L vaut [3, 5, 9, 17, 33, 65, 129, 257] et u7=257u_7 = 257.

On remarque que un−1u_n - 1 double à chaque rang : un=2n+1+1u_n = 2^{n+1} + 1, ce qui donne u7=28+1=257u_7 = 2^8 + 1 = 257. Garder la liste complète permet ensuite de repérer des régularités.

Exercice 3 Somme de termes avec une compréhension de liste

★☆☆Environ 8 min

Pour tout entier naturel nn, on pose un=3n+2u_n = 3n + 2.

  1. Écris en une seule ligne une compréhension de liste qui donne [u0,u1,…,u9][u_0, u_1, \dots, u_9].
  2. Écris l'instruction qui calcule la somme S=u0+u1+⋯+u9S = u_0 + u_1 + \dots + u_9.
  3. Calcule SS et vérifie ton résultat par une formule.
Indice 1

La formule est explicite : pas besoin de mémoriser le terme précédent, on remplace directement nn.

Indice 2

La fonction sum additionne tous les éléments d'une liste.

Voir la correction pas à pas
  1. On écrit la liste : [3 * n + 2 for n in range(10)]. La variable n prend les valeurs de 0 à 9.

  2. On additionne : S = sum([3 * n + 2 for n in range(10)]).

  3. On calcule à la main : les termes vont de u0=2u_0 = 2 à u9=29u_9 = 29 et forment une suite arithmétique de dix termes.

  4. On applique la formule « nombre de termes × (premier + dernier) ÷ 2 » : S=10×(2+29)÷2=155S = 10 \times (2 + 29) \div 2 = 155. Le script et la formule concordent.

Une compréhension de liste convient dès que la suite est donnée par une formule explicite. Le contrôle par une formule est un bon réflexe : si les deux résultats diffèrent, le décalage de range est le premier suspect.

Exercice 4 Premier rang où des billes dépassent un seuil

★★☆Environ 15 min

On construit des motifs avec des billes. Le premier motif utilise 2 billes, le deuxième 6, le troisième 12, le quatrième 20.3 On note unu_n le nombre de billes du motif numéro nn, avec n⩾1n \geqslant 1.

  1. Vérifie que la formule un=n(n+1)u_n = n(n+1) est cohérente avec les quatre motifs donnés.
  2. Écris un algorithme qui détermine le plus petit rang nn tel que un>500u_n > 500.
  3. Quelle valeur de nn obtient-on ?
Indice 1

Un problème de seuil se résout naturellement avec une boucle while, qu'on arrête dès que la condition est atteinte.3

Indice 2

La condition de la boucle est le contraire de ce qu'on cherche : on continue tant que un⩽500u_n \leqslant 500.

Voir la correction pas à pas
  1. On teste la formule : 1×2=21 \times 2 = 2, 2×3=62 \times 3 = 6, 3×4=123 \times 4 = 12, 4×5=204 \times 5 = 20. Les quatre valeurs correspondent.

  2. On initialise : n = 1.

  3. On écrit la boucle : while n * (n + 1) <= 500: n = n + 1. Tant que le nombre de billes ne dépasse pas 500, on passe au motif suivant.

  4. On lit le résultat : à la sortie de la boucle, n est le premier rang pour lequel n(n+1)>500n(n+1) > 500.

  5. On contrôle à la main autour du seuil : 21×22=46221 \times 22 = 462, qui est inférieur à 500, et 22×23=50622 \times 23 = 506, qui est supérieur à 500. Le rang cherché est 22.

Le motif numéro 22 est le premier à demander plus de 500 billes, avec 506 billes. Ici le compteur n sert à la fois de variable de boucle et de réponse.

Exercice 5 Capital placé et seuil

★★☆Environ 15 min

Un capital de 1000 euros est placé à intérêts composés : chaque année, il augmente de 3 %. On note cnc_n le capital après nn années, avec c0=1000c_0 = 1000.

  1. Exprime cn+1c_{n+1} en fonction de cnc_n.
  2. Écris un algorithme qui renvoie le nombre d'années nécessaires pour que le capital dépasse 1200 euros.
  3. Quel nombre d'années obtient-on ?
Indice 1

Augmenter de 3 % revient à multiplier par 1,03.

Indice 2

Utilise deux variables : le capital c et le nombre d'années n, toutes deux mises à jour dans la boucle.

Voir la correction pas à pas
  1. On traduit la hausse : cn+1=1,03×cnc_{n+1} = 1{,}03 \times c_n. La suite est géométrique de raison 1,03.

  2. On initialise : c = 1000 et n = 0.

  3. On écrit la boucle : while c <= 1200: c = c * 1.03 puis n = n + 1 à l'intérieur de la boucle.

  4. On suit les valeurs à la main : c1=1030c_1 = 1030, c2≈1060,9c_2 \approx 1060{,}9, c3≈1092,7c_3 \approx 1092{,}7, c4≈1125,5c_4 \approx 1125{,}5, c5≈1159,3c_5 \approx 1159{,}3, c6≈1194,1c_6 \approx 1194{,}1, c7≈1229,9c_7 \approx 1229{,}9.

  5. Le capital passe au-dessus de 1200 euros au septième passage : le script affiche n = 7.

Il faut 7 ans. Après 6 ans, le capital (environ 1194 euros) reste juste sous le seuil : c'est typiquement le cas où une estimation « à vue » se trompe d'un rang et où l'algorithme protège de l'erreur. Une activité de ce type existe aussi avec des mensualités de prêt : on y demande un algorithme qui détermine le nombre de mensualités.3

Exercice 6 Repérer une suite géométrique par programme

★★☆Environ 15 min

On dispose de trois listes de nombres :

A = [2, 6, 18, 54]
B = [1, 4, 9, 16]
C = [5, 5, 5, 5]
  1. Écris une fonction est_geometrique(L) qui renvoie True si le quotient de deux termes consécutifs est constant, et False sinon (les listes ne contiennent aucun zéro).
  2. Que renvoie-t-elle pour A, B et C ?
  3. Quelle est la raison de la suite dont les termes sont ceux de A ?
Indice 1

Calcule le quotient L[1] / L[0], puis compare-le à tous les autres quotients L[i+1] / L[i].

Indice 2

Les calculs avec des nombres décimaux peuvent produire de petites erreurs d'arrondi ; ici, avec des entiers simples, la comparaison directe suffit, mais on peut aussi comparer les produits en croix.

Voir la correction pas à pas
  1. On mémorise le premier quotient : q = L[1] / L[0].

  2. On parcourt la liste : for i in range(1, len(L) - 1): if L[i+1] / L[i] != q: return False. Dès qu'un quotient diffère, on peut conclure.

  3. Si la boucle va jusqu'au bout sans rien renvoyer, on termine par return True.

  4. Pour A : 6/2=36/2 = 3, 18/6=318/6 = 3, 54/18=354/18 = 3 ; la fonction renvoie True. Pour B : 4/1=44/1 = 4 mais 9/4=2,259/4 = 2{,}25 ; elle renvoie False. Pour C : tous les quotients valent 1 ; elle renvoie True.

  5. La raison de la suite associée à A est le quotient commun : 54/18=354 / 18 = 3.

Une suite constante comme C est géométrique de raison 1 (et aussi arithmétique de raison 0). L'algorithme ne prouve pas qu'une suite infinie est géométrique : il vérifie seulement les termes de la liste, ce qui permet de formuler une conjecture à démontrer ensuite.

Exercice 7 Première somme qui dépasse mille

★★★Environ 20 min

Pour tout entier naturel kk, on pose uk=3k+2u_k = 3k + 2 et, pour tout entier naturel nn, Sn=u0+u1+⋯+unS_n = u_0 + u_1 + \dots + u_n.

  1. Écris un algorithme qui détermine le plus petit entier nn tel que Sn>1000S_n > 1000.
  2. Montre que Sn=3n(n+1)2+2(n+1)S_n = \dfrac{3n(n+1)}{2} + 2(n+1).
  3. Utilise cette formule pour vérifier la valeur de nn trouvée par l'algorithme.
Indice 1

Utilise deux variables qui évoluent ensemble : la somme S et l'indice n.

Indice 2

Pour la formule, la somme des entiers de 1 à nn vaut n(n+1)2\dfrac{n(n+1)}{2}, et il y a n+1n+1 termes dans SnS_n.

Voir la correction pas à pas
  1. On initialise avec le premier terme : n = 0, S = 2 (c'est u0u_0).

  2. On écrit la boucle : while S <= 1000: n = n + 1 puis S = S + 3 * n + 2. On ajoute le terme de rang nn après avoir augmenté nn.

  3. Pour la formule, on sépare la somme : Sn=3(0+1+⋯+n)+2(n+1)=3n(n+1)2+2(n+1)S_n = 3(0 + 1 + \dots + n) + 2(n+1) = \dfrac{3n(n+1)}{2} + 2(n+1).

  4. On teste autour du seuil : pour n=24n = 24, S24=3×24×252+2×25=900+50=950S_{24} = \dfrac{3 \times 24 \times 25}{2} + 2 \times 25 = 900 + 50 = 950, qui est inférieur à 1000.

  5. Pour n=25n = 25, S25=3×25×262+2×26=975+52=1027S_{25} = \dfrac{3 \times 25 \times 26}{2} + 2 \times 26 = 975 + 52 = 1027, qui est supérieur à 1000. L'algorithme s'arrête donc sur n=25n = 25.

Le plus petit rang est n=25n = 25, avec S25=1027S_{25} = 1027. L'algorithme fonctionne même quand on ne connaît pas de formule, tandis que la formule sert à confirmer le résultat et à justifier qu'il est le plus petit : S24<1000<S25S_{24} < 1000 < S_{25}.

Exercice 8 Rapprochement d'une valeur limite

★★★Environ 20 min

On considère la suite (un)(u_n) définie par u0=20u_0 = 20 et un+1=0,5 un+4u_{n+1} = 0{,}5\,u_n + 4.

  1. Calcule u1u_1, u2u_2 et u3u_3 à la main.
  2. On pose vn=un−8v_n = u_n - 8. Montre que (vn)(v_n) est géométrique et donne son terme général.
  3. Écris un algorithme qui renvoie le plus petit rang nn tel que ∣un−8∣<0,01|u_n - 8| < 0{,}01, puis donne ce rang.
Indice 1

Pour la question 2, calcule vn+1v_{n+1} en remplaçant un+1u_{n+1} par son expression et factorise.

Indice 2

Pour la question 3, la condition de la boucle while utilise abs(u - 8) >= 0.01.

Voir la correction pas à pas
  1. On calcule : u1=0,5×20+4=14u_1 = 0{,}5 \times 20 + 4 = 14, u2=0,5×14+4=11u_2 = 0{,}5 \times 14 + 4 = 11, u3=0,5×11+4=9,5u_3 = 0{,}5 \times 11 + 4 = 9{,}5. Les termes diminuent et semblent se rapprocher de 8.

  2. On calcule vn+1=un+1−8=0,5 un+4−8=0,5 un−4=0,5 (un−8)=0,5 vnv_{n+1} = u_{n+1} - 8 = 0{,}5\,u_n + 4 - 8 = 0{,}5\,u_n - 4 = 0{,}5\,(u_n - 8) = 0{,}5\,v_n.

  3. On en déduit que (vn)(v_n) est géométrique de raison 0,5 et de premier terme v0=12v_0 = 12, donc vn=12×0,5nv_n = 12 \times 0{,}5^n et un=8+12×0,5nu_n = 8 + 12 \times 0{,}5^n.

  4. On écrit l'algorithme : u = 20, n = 0, puis while abs(u - 8) >= 0.01: u = 0.5 * u + 4 et n = n + 1.

  5. On cherche à la main : ∣un−8∣=12/2n|u_n - 8| = 12 / 2^n. Pour n=10n = 10, cela vaut 12/1024≈0,011712/1024 \approx 0{,}0117, qui n'est pas inférieur à 0,01. Pour n=11n = 11, cela vaut 12/2048≈0,005912/2048 \approx 0{,}0059, qui est inférieur à 0,01. Le rang cherché est 11.

Le rang est n=11n = 11. La condition équivalente 2n>12002^n > 1200 montre pourquoi : 210=10242^{10} = 1024 est trop petit, 211=20482^{11} = 2048 suffit. Transformer une suite récurrente en suite géométrique auxiliaire permet de confirmer ce que l'algorithme découvre par essais.

Les questions qu'on se pose

Quand utiliser une boucle for et quand utiliser une boucle while pour une suite ?

Utilise for quand l'énoncé fixe le nombre de termes à calculer : « calculer u10u_{10} », « donner les huit premiers termes ». Utilise while quand on cherche un seuil, c'est-à-dire un rang qu'on ne connaît pas à l'avance : « le plus petit nn tel que un>500u_n > 500 ». Dans le second cas, on écrit comme condition le contraire de ce qu'on cherche, et on incrémente un compteur dans la boucle.

Pourquoi mon algorithme donne-t-il un rang trop grand ou trop petit d'une unité ?

C'est presque toujours un problème d'initialisation ou d'ordre des instructions. Vérifie trois choses : le compteur démarre-t-il au bon rang (0 ou 1) ? Mets-tu à jour le terme avant ou après avoir augmenté le compteur ? La comparaison est-elle stricte (>) ou large (>=) comme dans l'énoncé ? Le plus sûr est de tester l'algorithme sur un seuil dont tu connais la réponse, par exemple un seuil entre u2u_2 et u3u_3 calculés à la main.

Un algorithme peut-il remplacer une démonstration sur les suites ?

Non. Un algorithme calcule un nombre fini de termes : il permet de conjecturer (une suite semble géométrique, semble croissante, semble converger) ou de trouver un seuil, mais il ne prouve pas une propriété valable pour tous les rangs. À l'épreuve, on te demande souvent les deux : l'algorithme pour explorer, puis un raisonnement (calcul de un+1−unu_{n+1} - u_n, d'un quotient, ou récurrence) pour justifier.

Sources

  1. Programmes et ressources en mathématiques — voie générale et technologique, Éduscol. Consulté le 6 novembre 2026.
  2. Algorithmique et programmation — Informer et accompagner, Éduscol. Consulté le 6 novembre 2026.
  3. Modéliser et Représenter — Ressource académique, Ressources Académiques. Consulté le 6 novembre 2026.
  4. Algorithme, Wikipédia. Consulté le 6 novembre 2026.
  5. Algorithme D*, Wikipédia. Consulté le 6 novembre 2026.

Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page