Python

Exercices de programmation en Python

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 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).

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.

Inverser des matrices rationnelles avec Python

Si une matrice carrée inversible A est à coefficients entiers (ou plus généralement rationnels), alors son inverse est à coefficients rationnels.
Avec Python, le calcul de l’inverse de A provoque un passage en mode float.
Dans ce cas, retrouver l’expression exacte (sous forme de rationnels) de A^{-1}.

Euler 034

Le nombre {145} est la somme des factorielles de ses chifres: {145 = 1! + 4! + 5! = 1 + 24 + 120}.
Trouver tous les entiers {n} ({n\ge1}) qui ont cette propriété.

Euler 033

Trouver les couples {(n,d)} avec {n \lt d}, s’écrivant {n=xy} et {d=yz} en base 10, et telle que {\dfrac{n}{d}=\dfrac{xy}{yz}=\dfrac{x}{z}} (exemple {\dfrac{19}{95}=\dfrac{1}{5}}). On ne retiendra pas les solutions où {x=y}, qui sont considérées comme évidentes.

Euler 032

L’égalité {39\cdot186=7254} exprime {n=7254} en utilisant une fois et une seule tous les chiffres de {1} à {9}. Trouver la somme des entiers {n} qui ont cette propriété de {7254}, donc qui peuvent s’écrire {n=pq}, où la représentation décimale de {n,p,q} fait apparaître une fois et une seule chaque chiffre de {1} à {9}.

Euler 031

Soit {p} une liste {[p_{0},p_{1},\ldots,p_{n-1}]} de valeurs faciales de pièces, triée dans l’ordre croissant. De combien de façons peut-on payer une somme {s} avec des pièces de la valeur faciale indiquée dans la liste {p}? Indication: avec {s=200} et {p=[1,2,5,10,20,50,100,200]} le résultat est {73682}.

Euler 030

Donner la liste des entiers positifs qui sont égaux à la somme des puissances cinquièmes de leurs chiffres. Indication: on considère que 1 n’est pas solution, et la somme des solutions vaut alors 443839.

Euler 029

Combien l’ensemble des {a^{b}} avec {a,b} entiers, {2\le a,b \lt N} comporte-t-il d’entiers distincts?
Indication: si {N=100}, on trouve {945}.

Euler 026

On dira que les répresentations décimales de {1/2=0.5} et {1/5=0.2} sont finies car elles aboutissent à une répétition de décimales nulles.
En revanche, celle de {1/7} est infinie: elle s’écrit s’écrit {1/7=0.\overline{142857}}, en notant {\overline{142857}} la répétition indéfinie des chifres {142857}: on exprimera cette situation en disant que le développement de {1/7} est ultimement périodique de période {6}.
Problème: on se donne un entier {N > 2}. Pour quelle valeur de {d}, avec {2\le d \lt N}, la période ultime de {1/d} est-elle la plus élevée?

Euler 025

La suite de Fibonacci est définie par {F_{0}=0}, {F_{1}=1} et{F_{n+2}=F_{n+1}+F_{n}} pour {n} de {\mathbb{N}}.
Quel est l’indice du plus petit {F_{n}} comportant {N\ge2} chiffres?

Euler 024

Former la {N}-ième permutation de « 0123456789 » dans l’ordre lexicographique
(réponse: « 2783915460 » si {N=1000000})

Euler 023

Un nombre abondant est un entier {n\ge1} dont la somme des diviseurs (y compris {n} lui-même) vérifie {\sigma(n) > 2n}. On peut montrer que tout entier plus grand que 28123 peut s’écrire comme somme de deux nombres abondants (non nécessairement distincts).
Calculer la somme de tous les entiers positifs qui ne peuvent pas s’écrire comme la somme de deux nombres abondants (non nécessairement distincts).

Euler 022

Using euler022.txt, a 46K text file containing over five-thousand first names, begin by sorting it into alphabetical order.
Then working out the alphabetical value for each name, multiply this value by its alphabetical position in the list to obtain a name score.
For example, when the list is sorted into alphabetical order, COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list.
So, COLIN would obtain a score of 938\times 53 = 49714.
What is the total of all the name scores in the file?

Euler 021

Soit {d(n)} la somme des diviseurs {k} de {n}, avec {1\le k \lt n}.
Deux entiers positifs {a} et {b} sont dits amiables si {d(a)=b}, {d(b)=a} et {a\ne b}.
Par exemple, les diviseurs stricts de {220} sont {1}, {2}, {4}, {5}, {10}, {11}, {20}, {22}, {44}, {55} et {110}, donc {d(220) = 284}. Les diviseurs stricts de {284} sont {1}, {2}, {4}, {71} et {142}, donc {d(284) = 220}: les deux entiers {220} et {284} sont donc amiables. Calculer la somme de toutes les paires de nombres amiables strictement inférieurs à {N}.

Euler 020

Quelle est la somme des chiffres de la représentation décimale de l’entier {N!} (factorielle {N})?
Indication: pour {N=100}, la réponse est 648.

Euler 019

You are given the following information: 1 Jan 1900 was a Monday: thirty days has September, April, June and November. All the rest have thirty-one, saving February alone, which has twenty-eight, rain or shine, and on leap years, twenty-nine. A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400. How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?

Euler 018

On considère une pyramide triangulaire d’entiers. On part du sommet du triangle, et on progresse jusqu’à la ligne du bas, en progressant à chaque étape, soit vers la gauche, soit vers la droite. Quelle est la somme maximum des valeurs correspondant aux différentes routes possibles?

Euler 017

If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total. If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?
NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of « and » when writing out numbers is in compliance with British usage.

Euler 016

Écrire une fonction donnant la somme des chiffres de la représentation décimale de {2^{N}}, avec {N} dans {\mathbb{N}}.

Euler 015

Soit {N} un entier positif. Si on part du coin en haut à gauche d’une grille de {N\times N} points, et si les seuls déplacements autorisés sont d’un point vers la droite ou vers le bas, combien y a-t-il de routes possibles jusqu’au coin en bas à droite?

Euler 014

La suite de Collatz {(u_{n})_{n\ge1}} est définie par la donnée de {u_{0}} dans {\mathbb{N}^{*}} et par les relations: {u_{n}=u_n/2} si {n} est pair, et {u_{n}=3u_n+1} si {n} impair.
Une conjecture célèbre affirme qu’une telle suite finit toujours par retomber sur {1}.
Par exemple, si {u_{0}=13}, on obtient {13\to40\to20\to10\to5 16\to8\to4\to2\to1}.
Quel nombre initial {u_{0}}, avec {u_{0} \le N} (où {N\ge1} est donné) donne la plus longue séquence avant de revenir à {1}?

Euler 013

Un fichier texte contient 100 lignes de nombres de cinquante chiffres.
Calculer les dix premiers chiffres de la somme de ces cent nombres.

Euler 012

On note {T_{n}=\dfrac{n(n+1)}{2}} (les {T_{n}} sont appelés nombres triangulaires). Quel est le plus petit nombre triangulaire ayant plus de {N} diviseurs, avec {N\ge1} donné?

Euler 011

Dans une grille de {n\times n} entiers, quel est le produit maximum de quatre nombres adjacents (dans une direction quelconque: verticale, diagonale, ou horizontale)?

Euler 010

Soit {N\ge3} un entier.
Trouver la somme des entiers premiers strictement inférieurs à {N}.

Euler 009

Soit {s} un entier strictement positif.
Trouver les triplets {(a,b,c)} tels que: {0 \lt a \lt b \lt c}, {a^{2}+b^{2}=c^{2}} et {a+b+c=s}.
Pour chacun d’eux, préciser la valeur de {abc}.

Euler 008

Le fichier nombre.txt contient un entier de 1000 chiffres (écrit en vingt lignes de 50 chiffres). Trouver le plus grand produit de cinq chiffres consécutifs de cet entier.

Euler 007

Soit {n} dans {\mathbb{N}^{*}}.
Écrire une fonction renvoyant le {n}-ième nombre premier.

Euler 006

Soit n dans \mathbb{N}^*. Écrire une fonction calculant {\displaystyle\Bigl(\sum_{k=1}^{n}k\Bigr)^{2}-\displaystyle\sum_{k=1}^{n}k^{2}}.

Euler 005

Soit N un entier strictement positif. Quel est le plus petit entier strictement positif et divisible par tous les entiers de 1 à N?

Euler 004

Un entier naturel (écrit en base 10) est un palindrome s’il se lit à l’identique de gauche à droite et de droite à gauche. L’entier 9009=91\times 99 est le plus grand palindrome à s’écrire comme le produit de deux entiers à deux chiffres. On demande de trouver le plus grand palindrome égal au produit de deux entiers à trois chiffres.

Euler 003

Soit N dans \mathbb{N}, avec N\ge2.
Écrire une fonction donnant le plus grand facteur premier de N.

Euler 002

Chaque terme de la suite de Fibonacci est obtenu en ajoutant les deux termes précédents.
Les premiers termes sont:
F_{0}=0,\;F_{1}=1,\;F_{2}=1,\;F_{3}=2,\;F_{4}=3,\;F_{5}=5,\;F_{6}=8,\;F_{7}=13,\cdots
On demande d’écrire une fonction qui renvoie la somme des F_{n} qui sont pairs et strictement inférieurs à un entier naturel N donné.