{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exemples de courbes elliptiques\n",
    "### (notebook sageMath)\n",
    "\n",
    "$$y^2=x^3+x-1$$\n",
    "\n",
    "sur ${\\mathbb Z}/19{\\mathbb Z}$.\n",
    "\n",
    "Les paramètres sont\n",
    "$$y^2 + a_1 xy + a_3 y = x^3 + a_2 x^2 + a_4 x + a_6.$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "p =19; a=1; b=-1\n",
    "E = EllipticCurve([GF(p)(0), 0,0,a,b])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "Graphics object consisting of 1 graphics primitive"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "E.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "19"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "E.order()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Additive abelian group isomorphic to Z/19 embedded in Abelian group of points on Elliptic Curve defined by y^2 = x^3 + x + 18 over Finite Field of size 19"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "E.abelian_group()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((13 : 9 : 1),)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "E.gens()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "g = _[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(0 : 1 : 0) (13 : 9 : 1) (18 : 4 : 1) (8 : 5 : 1) (7 : 11 : 1) (16 : 11 : 1) (1 : 18 : 1) (2 : 16 : 1) (11 : 7 : 1) (15 : 8 : 1) (15 : 11 : 1) (11 : 12 : 1) (2 : 3 : 1) (1 : 1 : 1) (16 : 8 : 1) (7 : 8 : 1) (8 : 14 : 1) (18 : 15 : 1) (13 : 10 : 1) (0 : 1 : 0) "
     ]
    }
   ],
   "source": [
    "for i in range(20): print (i*g, end=' ')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### La même, avec $p=107$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "q =107; a=1; b=-1\n",
    "F = EllipticCurve([GF(q)(0), 0,0,a,b])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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DB06NHUUSdJymDBh2W3Vji5d4vQaZVQw5c0zTZKkojvhBLjmmri99trw/POw1lppM0ltOBBcklQefvlL2HNP+PBDOPxwCyZVJs80SZKkWld9Y5okSZJSsWiSJEnKg0WTJElSHiyaJBXM5Mlw773w7rupk0hS4Vk0SSqI556LExgecABsvjk89VTqRJJUWBZNkgriyithxoy4PWsWXH552jySVGgWTZIKok+fZbclqdJZNEkqiB/8ALbdNm5vtRWce27SOJJUcM4ILqkg1lorLo3xySfQu3fqNJJUeJ5pklRQFkySqpVFk7QMY8bAkCGw8cZw7bWp00iSUnLtOWkZ1lkHpkyJ2yHACy/E8TqSpKpSfWvPNTQ0MHjwYIYOHZo6impAU1OuYALIMnjnnXR5JElpeaZJWoYjj4Q//zlub7RRnMCxX7+kkSRJhZfXmSavnpOW4cYb4aCD4qSNX/mKBZMk1TLPNEmSpFrnmSZJUvX605/grbfgi1+M6x5KxVZRA8ElSQI4+2z46ldh1CjYYQd45ZXUiVQLLJokSRWn9QINgNmz4c4702VR7bBoUlHMnw8PPRQnh1RxjR8P990H06alTrJk770H994LkyalTqJqMnBg+/agQWlyqLZYNKng5s+H/faDffaJp81HjkydqHr95S9xLMf++8M228DkyakTtffiizHfAQfA5pvDo4+mTqRqcd11cOCBsNlmcN55cNhhqROpFnj1nAruwQfh85/PtUOAxkbo3j1dpmq13XZxkdxWF14Yx3iUi+OPh1//OtceNgxuvTVdHklaiuqbEVyVoU+f9u0ePaCL12kWRcf3umM7tY6L95ZDvqlT49lQSVpeFk0quB12gDPOiGeYevaE66+Hzp1Tp6pOP/85rLtu3N5/f/j2t9Pm6WjUKNh++7i9+eZwwQXpssybBwcfDKutBmutZVehpOVn95yKZu5c6NrVgqnYsgzmzIFevVInWbrZs9Pn+81v4FvfyrW33jouwCxJOLmlUltlldQJakMI6QuST1MO+Rob27fnzEmTQ1LlsntOUk04+ujYRQhxjN2556bNI6nyeKZJUk3o3z/OG/bcc3EcWMd5fiTp01RU0dTQ0EBDQwPNzc2po0iqQL16we67p04hqVI5EFwr7dFH4aqroF+/OMncWmulTiRJ0nJxILiK76234qXurYNqn3vOpVMk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/49XUvH16AHrrptrd+7sfD+f5t134Z574kdVh5oqmh54ADbfPA5c3GKL9mcvytXw4TByJGy2WZzN/Be/SJelsRH23BP23ReGDIELLijN666+Otx6axwEP2QI3HZb++46SaVxxx2wyy6w5ZZwww2w6aapE5WvMWNg8GA48MD4d2cFZ8pRmampq+cOOCCeZWr1//4fXHllwTJWvdtug2HDcu1VVolX1Di5pSS1N3x4nGOv1VFHwY03psujT+XVcx316dO+7dmK5dPx/evd24JJkpakd+/27XL4e/Pxx665urJqqmi6+OI4SSLEU8ynnZY2T6XZZx/43/+NhVKfPvC736VOJEnl6Uc/ikMKIM4zl3KR3MbG+Pt79dXj9C0O4F9xNdU912r27MUnaVP+5s6N0wCUYjZwSapk5fD35uqr4TvfybV33DHOVK52qm/B3kJJ/Q1c6Vy+RJLyUw5/bxobl91W/jxXICX25puwxx6w0UZw3nmp00iqNl//em7Zqa5d03YVVrqa7J6Tyskuu7RfMf7OO+Hgg9PlkVR9PvkkrltaX+/8WktRfd1zDQ0NNDQ00NzcnDqKVDBvv92+7Wznkgqtd+/aXLu00DzTJCV25plwySVxe9VV4dln/U9Qkkqs+s40SdXo4othhx3gnXfgC1+wYJKkcmXRJJWBww9PnUCS9GksmsrMs8/GBR632CKuNafyM38+/Pa3MG0aHH00rLde6kSqNdOnw3XXxUVzjztu8dmnJRWHY5rKyJNPxgVx582L7Z/+FE49NW0mLe7II+HPf47b66wD//kPrLFG0kiqIU1NMHQovPRSbO+0Ezz6aCygJK0w156rNLfdliuYIPeHWeVj4UL4619z7cmT4bHH0uVR7XnllVzBBPGfrUmT0uWRaolFUxlpnXys1aBBS3/s9Olw333w2mtFjaQOOnWKk1AurS0V2zrrQI8euXZdXVxTTFLxWTSVkeOOg9NPh802g8MOg5//fMmPmzIlLgS5//5x7NOf/lTSmDXvttvifCdbbgnXXhsX45RKZc014ZZb4u+A7beH2293TJNUKo5pqkAXXwxnnZVrb701vPBCujySJFU4xzRVqz59lt2WJKlazZwJc+akeW2Lpgp03HG5tcnWWQeuvjptHkmSSuHss+M4vr594f/+r/Svb/dcBZszJw4IDXmdVJQkqXKNHRvHkrbq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\n",
      "text/plain": [
       "Graphics object consisting of 1 graphics primitive"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Additive abelian group isomorphic to Z/111 embedded in Abelian group of points on Elliptic Curve defined by y^2 = x^3 + x + 106 over Finite Field of size 107"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F.abelian_group()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((98 : 44 : 1),)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F.gens()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "La courbe\n",
    "$$y^2=x^3+x$$\n",
    "modulo 23 (exemple du cours)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "p =23; a=1; b=0\n",
    "E = EllipticCurve([GF(p)(0), 0,0,a,b])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "Graphics object consisting of 1 graphics primitive"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "E.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "24"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "E.order()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "g = E.gens()[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Additive abelian group isomorphic to Z/24 embedded in Abelian group of points on Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 23"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "E.abelian_group()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(17 : 13 : 1)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(0 : 1 : 0),\n",
       " (17 : 13 : 1),\n",
       " (16 : 8 : 1),\n",
       " (15 : 20 : 1),\n",
       " (9 : 5 : 1),\n",
       " (21 : 6 : 1),\n",
       " (1 : 5 : 1),\n",
       " (11 : 13 : 1),\n",
       " (18 : 10 : 1),\n",
       " (20 : 19 : 1),\n",
       " (13 : 18 : 1),\n",
       " (19 : 1 : 1),\n",
       " (0 : 0 : 1),\n",
       " (19 : 22 : 1),\n",
       " (13 : 5 : 1),\n",
       " (20 : 4 : 1),\n",
       " (18 : 13 : 1),\n",
       " (11 : 10 : 1),\n",
       " (1 : 18 : 1),\n",
       " (21 : 17 : 1),\n",
       " (9 : 18 : 1),\n",
       " (15 : 3 : 1),\n",
       " (16 : 15 : 1),\n",
       " (17 : 10 : 1),\n",
       " (0 : 1 : 0)]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[i*g for i in range(25)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "SageMath 9.4",
   "language": "sage",
   "name": "sagemath"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
