Python

Exercices corrigés utilisant le langage Python

Limite de fonctions inverses

(Oral Centrale 2018)
On pose : {\forall\,n\in\mathbb{N}^{*},\;A_{n}:x\mapsto\displaystyle\sum\limits_{k=1}^{n}\dfrac{x^{k}}{k}}.
Montrer que : {\forall\,y\in\mathbb{R}^{+},\;\exists\,!\,x\in\mathbb{R}^{+},\;A_{n}(x)=y}.
On note {x=f_{n}(y)}. Tracer des fonctions {f_n}.
Montrer que la suite {(f_n)_{n\ge1}} converge simplement sur {\mathbb{R}^+} vers {f\colon x\mapsto1-\text{e}^{-x}}.

Nombres de Bell

(Oral Centrale 2018)
On pose {u_{0}=1} et : {\forall\,n\in\mathbb{N},\;u_{n+1}=\displaystyle\sum\limits_{k=0}^{n}\dbinom{n}{k}u_{k}}.
Écrire une fonction Python calculant {u_n}.
Conjecturer la valeur de {\dfrac{1}{\text{e}}\displaystyle\sum\limits_{k\ge 0}\dfrac{k^{n}}{k!}}.
Prouver cette conjecture. Calculer {f(x)=\displaystyle\sum\dfrac{u_{n}}{n!}x^n}.

Un jeton et quatre cases

(Oral Centrale 2018)
Un jeton se déplace aléatoirement sur quatre cases, selon un protocole particulier.
On demande une simulation de l’expérience avec Python.
On diagonalise la matrice de transition, pour étudier la probabilité que le jeton se trouve sur telle ou telle case à la date {n} quand {n\to+\infty}

Étude d’un temps d’attente

(Oral Centrale)
Soit {(X_{i})_{i\in \mathbb{N}^{\ast}}} des v.a.r. indépendantes de même loi : {\mathbb{P}(X_{i}=1)=p} ; {\mathbb{P}(X_{i}=2)=1\!-\!p}.
Soit Y_k le temps d’attente de X_1+\cdots+X_n\ge k.
On étudie la loi de Y_k et son espérance.

Recherche de rep-units

On admet que tout {n\in\mathbb{N}} impair non multiple de {5} a un multiple {N} ne s’écrivant (en base {10}) qu’avec des {1}. L’objet de cet exercice est de programmer la recherche de N, et d’étudier pour quelles valeurs de n l’entier N a une longueur record

Élimination de jetons sur un cercle

(Oral Ensam)
On dispose en cercle {n} jetons numérotés de {0} à {n- 1} (comme sur le cadran d’une horloge). On retire le jeton numéro {0}, puis un sur deux en parcourant le cercle jusqu’à ce qu’il ne reste plus qu’un seul jeton. On étudie ici le numéro du dernier jeton restant.

Jetons bicolores

(Oral Ensam)
Soit n jetons bleus/blancs sur une table (b faces bleues visibles). On en prend deux jetons au hasard. Si le 2nd est d’une couleur différente du 1er, on le retourne. On étudie le nombre {X_{k}} de faces bleues après {k} étapes, et la loi-limite de X_k quand k\to+\infty

Des milliers de décimales de π

Soit x=\displaystyle\sum_{k=0}^{+\infty}p_k\,u_k, où {u_k=\dfrac{(k!)^2\,2^{k}}{(2k+1)!}}.
Ce développement est dit régulier si {\begin{cases}\forall k\ge1,\; 0\le p_k\le 2k\\\forall n\ge1,\;\exists m\ge n, p_m\lt 2k\end{cases}}On étudie la convergence de ces développements, et un algorithme réduisant (par reports de retenues) à sa forme régulière le développement de 10^nx, avec n\in\mathbb{N}. On en déduit une fonction Python donnant des milliers de décimales de \pi.

Des milliers de décimales de e

On utilise les notations de l’article précédent (« Base de numération factorielle »).
Connaissant la représentation factorielle d’un réel x, et pour tout entier n, on étudie un algorithme donnant la décomposition factorielle de 10^n x.
Application: on programme le calcul de milliers de décimales de e.

Base de numération factorielle

On montre que tout réel x s’écrit de façon unique x=\displaystyle\sum_{n=1}^{+\infty}\dfrac{b_n}{n!} où {b_1\in\mathbb{Z}}, {b_n\in[\![0,n-1]\!]} pour {n\ge2}, et où pour tout {n\ge1}, il existe {m\ge n} tel que {b_m\lt n-1}.
Avec Python, et des schémas de Horner, on programme les conversions entre cette représentation « factorielle » et la représentation décimale.

Le théorème chinois

Soit {n_1,n_2,\ldots,n_r} dans {\mathbb{N}^*}, premiers entre eux deux à deux. Soit {N=\displaystyle\prod\limits_{k=1}^{r}n_k}.
Il existe un unique x\in[\![0,N-1]\!] tel que x\equiv n_j\mod n_j pour tout j.
Ce résultat est communément appelé théorème chinois. L’objet de cet article est de programmer le calcul de x en Python (deux méthodes).

Coefficients de Bézout

Soient {m,n} dans {\mathbb{N}^*}, avec {m\wedge n=1}.
Il existe une infinité de {(u,v)\in\mathbb{Z}^2} tel que {um+vn=1}.
Il existe en particulier un couple {(u,v)} unique tel que {\left|u\right|\le n/2} et {\left|v\right|\le m/2}.
L’objet de cet article est de programmer deux méthodes (l’une itérative, l’autre récursive) de calcul des deux entiers u et v.

Le problème des n reines

Le problème des huit reines est bien connu.
On se propose ici de programmer avec Python (et de visualiser avec le package turtle) la recherche des solutions au problème plus général des n reines (placées sur un échiquier n×n de telle sorte qu’aucune d’elle ne soit en prise avec une autre).

Le parcours du cavalier

On demande de programmer et visualiser (en Python, avec le package turtle) le parcours d’un cavalier sur un échiquier. À partir d’une position initiale du cavalier, on s’attachera à décrire des trajectoires explorant la totalité de l’échiquier en passant une fois et une seule sur chaque case (voir l’article de Wikipedia). On pourra généraliser à des échiquiers de tailles différentes et/ou modifiés pour rendre certaines de leurs cases inaccessibles.

Le collectionneur, épisode 1

Pour doper ses ventes, une marque de chocolat cache dans chaque tablette (et de façon équiprobable) l’une des N figurines d’une collection. On considère ici l’expérience (aléatoire!) vécue par un client cherchant compulsivement à compléter sa collection.
On note {X} le nombre de tablettes à acheter pour compléter l’album. Dans cet épisode, on calcule la loi de X, son espérance, sa variance.

L’urne d’Ehrenfest, épisode 2

On reprend les notations et résultats de l’épisode 1.
On forme ici la matrice de transition associée à ce processus de Markov, et on l’interprète comme celle d’un endomorphisme \varphi de {\mathbb{R}_{N}[X]} dans la base canonique.
Si {t\mapsto G_{n}(t)} est la fonction génératrice de {X_{n}}, on voit que {G_{n+1}=\varphi(G_{n})}.
On retrouve alors la relation {\text{E}(X_{n+1})=1+\Bigl(1-\dfrac{2}{N}\Bigr)\text{E}(X_{n})}.

Le dernier non effacé

On écrit à la suite tous les entiers de {1} jusqu’à {2017}. On les efface de {3} en {3} : d’abord {1}, puis {4}, puis {7}, etc. On recommence sur la liste restante 2,3,5,6,8,9,11,\ldots et ainsi de suite. Quel est le dernier nombre affiché, et au bout de combien d’itérations? Illustrer tout cela avec Python.

La dernière moyenne

On écrit une liste de n nombres réels. On en efface deux, pris au hasard, pour les remplacer par leur demi-somme. On répète cette opération jusqu’à ce qu’il reste un seul réel X. Quelle est la valeur minimum possible pour X? Illustrer avec Python.

Répétitions de 0

Soit A une matrice à coefficients égaux à 0 ou 1.
On demande d’écrire une fonction Python (utilisant Numpy), prenant en argument une telle matrice, et renvoyant le plus grand nombre de zéros consécutifs dans A (horizontalement, verticalement, ou en diagonale montante ou descendante).

Matrices bistochastiques, épisode 9

Soit {B_{n}\in\mathcal{M}_n(\mathbb{R})} la matrice de terme général {(b_{i,j})_{1\le i,j\le n}} définie par:
{\begin{cases}b_{i,i+1}=b_{i+1,i}=\dfrac{1}{2}\text{\ si }1\le i\lt n\\b_{1,1}=b_{n,n}=\dfrac{1}{2},\text{\ et\ }b_{i,j}=0\text{\ dans les autres cas}\end{cases}}On diagonalise B_n, on étudie la limite de ses puissances, et on illustre les résultats avec l’aide du langage Python.

Matrices bistochastiques, épisode 1

Soit {A=(a_{i,j})_{0\le i,j\le n-1}} dans {\mathcal{M}_{n}(\mathbb{R})}.
On dit que A est {\mu}–magique si la somme de chaque ligne et de chaque colonne vaut {\mu}.
On dit que {A} est bistochastique si A est {1}-magique et si les {a_{i,j}} sont positifs ou nuls.
On note {\mathcal{B}_n(\mathbb{R})} l’ensemble des matrices bistochastiques d’ordre n.
On note {\mathcal{P}_n(\mathbb{R})\subset\,\mathcal{B}_n(\mathbb{R})} l’ensemble des matrices de permutations {P_{\sigma}} d’ordre n.
On illustre ici ces notions avec Python.

La comète de Goldbach

La conjecture de Goldbach affirme que tout entier pair {n\ge4} peut s’écrire comme la somme de deux entiers premiers. On appelle comète de Goldbach le nuage des points {(k,g(k))}, où {k} décrit les entiers pairs dans un certain intervalle {[4,n]} et où {g(k)} désigne le nombre de façons d’écrire {k} comme la somme de deux nombres premiers. Dans cet article, on écrit les fonctions Python utiles pour produire le tracé de cette comète.