{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "99d4322b",
   "metadata": {},
   "source": [
    "# Feuille d'exercices 5\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "```{admonition} Objectifs\n",
    "* Introduction à Sagemath\n",
    "* Calcul exact : entiers, rationnels, complexes\n",
    "* Notions sur le calcul symbolique\n",
    "* Notion de méthode et de classe\n",
    "```\n",
    "\n",
    "\n",
    "## Exercice 1. Manipulation élémentaire d'entiers, de rationnels et de complexes\n",
    "\n",
    "\n",
    "**Question 1.** Donner la valeur exacte des quantités suivantes :\n",
    "- $12!$\n",
    "- le rationnel $\\frac{8778}{4557}$\n",
    "- le plus petit nombre premier supérieur à $2^{20}$\n",
    "- $\\cos(2\\pi/5)$\n",
    "- la partie réelle de $3 e^{7 i \\pi/12}$\n",
    "- l'argument de $1+i$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "00fdf152",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "93f417f0",
   "metadata": {},
   "source": [
    "**Question 2.** Écrire une fonction `plus_petit_module(liste)` qui prend en entrée une liste `liste` de nombres complexes, et qui retourne le nombre complexe de plus petit module de cette liste. Si la liste est vide, la fonction devra **afficher** un texte d'erreur, puis **retourner** le mot-clef `None`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ce46e1a0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7266d955",
   "metadata": {},
   "source": [
    "## Exercice 2.  Somme de binomiaux\n",
    "\n",
    "\n",
    "**Question 1.** Écrire une fonction `somme_newton(n)` qui prend en entrée un entier `n` et qui retourne  la valeur de la somme \n",
    "\n",
    "$$\\sum_{k=0}^n \\binom{n}{k}.$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "feea8d60",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bed94719",
   "metadata": {},
   "source": [
    "**Question 2.** Vérifier que pour tout $n$ compris entre $0$ et $100$, l'égalité  $\\sum_{k=0}^n \\binom{n}{k} = 2^n$ est bien vérifiée."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7fc479c7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "629d2113",
   "metadata": {},
   "source": [
    "**Question 3.** Écrire une fonction `somme_binomiaux(n)` qui prend en entrée un entier `n` et qui retourne la valeur de la somme \n",
    "\n",
    "$$\n",
    "\\sum_{k=0}^n \\frac{(-1)^k}{k+1} \\binom{n}{k}.\n",
    "$$\n",
    "\n",
    "Puis, calculer plusieurs valeurs de cette somme, émettre une conjecture, puis la \"vérifier\" sur les valeurs de $n$ comprises en $0$ et $100$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "61b569fd",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5749353f",
   "metadata": {},
   "source": [
    "## Exercice 3. Double boucle\n",
    "\n",
    "\n",
    "Dans cet exercice, on considère une liste $L = (L_0, \\dots, L_{n-1})$ de rationnels distincts, de longueur $n \\ge 2$.\n",
    "\n",
    "\n",
    "\n",
    "**Question 1.** Écrire une fonction `produit_differences(L)`, qui prend en entrée la liste `L` de rationnels, et qui retourne la valeur du produit\n",
    "\n",
    "$$\n",
    "\\prod_{0 \\le i < j \\le n-1} \\frac{1}{L_j-L_i}\\,.\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "623da699",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "92a23e32",
   "metadata": {},
   "source": [
    "**Question 2.** Écrire une fonction `plus_proches(L)`, qui prend en entrée la liste `L` de rationnels, et qui retourne la paire $(a, b)$ de rationnels les plus proches parmi toutes les paires d'éléments de la liste `L`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aa12e46b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d687713",
   "metadata": {},
   "source": [
    "## Exercice 4.  Triplets pythagoriciens\n",
    "\n",
    "\n",
    "Un **triplet pythagoricien** est un triplet $(p, q, r) \\in \\mathbb{N}^3$ tel que $p^2 + q^2 = r^2$. Observons que, si $(p, q, r)$ est un triplet pythagoricien, alors $p \\le r$ et $q \\le r$.\n",
    "\n",
    "\n",
    "**Question 1.** Écrire une fonction `trouve_triplets(r)`, qui prend entrée un entier naturel `r`, et qui retourne la liste de toutes les paires $(p, q)$ telles que $(p, q, r)$ forme un triplet pythagorien."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4901708a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73b5af14",
   "metadata": {},
   "source": [
    "Tout triplet pythagoricien peut être associé à un point du cercle unité dont les coordonnées sont des rationnels. En effet, \n",
    "\n",
    "$$p^2 + q^2 = r^ 2 \\iff (p/r)^2 + (q/r)^2 = 1 \\iff (p/r, q/r) \\, \\text{ est un point rationnel du cercle unité } $$\n",
    "\n",
    "Par ailleurs, si $(\\alpha, \\beta) \\in \\mathbb{Q}^2$ est sur le cercle unité, alors en écrivant $\\alpha = a/n$ et $\\beta = b/n$ sur le même dénominateur $n$, on obtient un triplet pythagoricien $(a, b, n)$.\n",
    "\n",
    "\n",
    "**Question 2.** Écrire une fonction `triplet_vers_point(t, r)` qui transforme un triplet pythagoricien formé de `t=(p,q)` et `r`, en un point du cercle unité (donné comme un couple de rationnels).\n",
    "\n",
    "Pour s'assurer que les valeurs obtenues sont bien des rationnels, on effectuera une **conversion de type** des éléments de `t` vers la classe des entiers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3499d286",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "583fd206",
   "metadata": {},
   "source": [
    "**Question 3.** Déduire de la question précédente une fonction `trouve_points_rationnels(r_max)`, qui prend entrée un entier naturel `r_max`, et qui retourne la liste de tous les points rationnels $(x, y)$ du cercle unité, dont un dénominateur commun est $r \\le r_{max}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "69ff5db1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a050a1e1",
   "metadata": {},
   "source": [
    "**Question 4 (optionnelle).** Éliminer les éventuels doublons (éléments répétés plusieurs fois) de la liste précédente pour obtenir une liste d'éléments distincts."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "93661ddb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f520fc9d",
   "metadata": {},
   "source": [
    "## Exercice 5. Transformations complexes\n",
    "\n",
    "\n",
    "**Question 1 :** Créer la liste `L` des nombres complexes $(1, i, -1, -i)$. Puis, exécutez l'instruction `polygon(L).show()`. Qu'observez-vous ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b7aafbe2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04eac250",
   "metadata": {},
   "source": [
    "**Question 2 :** En adaptant l'instruction de la question précédente, tracer un triangle équilatéral, un pentagone régulier, puis un polygone régulier à $27$ côtés."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d5ddf7c1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee61e661",
   "metadata": {},
   "source": [
    "**Question 3 :** Effectuer les instructions suivantes :\n",
    "1. Construire `T`, la liste de points correspondant à un triangle équilatéral de côté $1$, dont la base est horizontale, et dont le point \"en bas à gauche\" a pour coordonnées complexes $z = 1$.\n",
    "2. Construire `M`, la liste des points de `T` sur lesquels on a appliqué la transformation complexe $z \\mapsto -2z$. \n",
    "3. Exécuter les $2$ instructions suivantes :\n",
    "```\n",
    "figure1 = polygon(T, color=\"blue\") + polygon(M, color=\"red\")\n",
    "figure1.show()\n",
    "```\n",
    "Quelle transformation géométrique a-t-on opérée sur le triangle bleu ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "27b5a40f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "872036f9",
   "metadata": {},
   "source": [
    "**Question 4 (avancée) :** Appliquer successivement (11 fois) la transformation complexe $z \\mapsto e^{-i\\pi/6} z$ à tous les points de la liste `T` de la question 2, puis tracer la figure qui contient ces 11 transformations. Quelle transformation géométrique a-t-on opéré ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6dacb283",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86b224c1",
   "metadata": {},
   "source": [
    "<!-- ## Exercice... Cribre d'Eratosthène.  -->\n",
    "\n",
    "<!-- **Question 1.** Écrire une fonction `est_premier(n)` qui prend en entrée un entier `n`, et qui retourne `True` si l'entier `n` est un nombre premier, et `False` sinon. Votre fonction **n'utilisera pas** la méthode `is_prime()` de Sagemath. -->\n",
    "\n",
    "\n",
    "<!-- **Question 2.**  -->"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Sagemath",
   "language": "python",
   "name": "sagemath"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
