{ "cells": [ { "cell_type": "markdown", "id": "321635e3-2819-4920-938d-8fcf7e7ab7b3", "metadata": {}, "source": [ "# Elliptic Curves Examples" ] }, { "cell_type": "code", "execution_count": 5, "id": "f9896e88-e2de-43bc-8d2f-7606e5d54819", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 2 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Define the elliptic curve y^2 = x^3 + Ax + B\n", "A = -2\n", "B = 1\n", "E = EllipticCurve([A, B])\n", "\n", "# Plot the elliptic curve over the real numbers\n", "plot(E, xmin=-3, xmax=3, ymin=-3, ymax=3).show()" ] }, { "cell_type": "code", "execution_count": 6, "id": "6fda6f05-90ff-42fc-af2f-c7957405d637", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Torsion points: [(0 : -1 : 1), (0 : 1 : 0), (0 : 1 : 1), (1 : 0 : 1)]\n" ] } ], "source": [ "# Calculate torsion points\n", "torsion_points = E.torsion_points()\n", "print(\"Torsion points:\", torsion_points)" ] }, { "cell_type": "code", "execution_count": 3, "id": "08b3bc80-90ef-4f54-9212-bd5db0cac016", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Generators of the group of rational points: [(1 : 1 : 1)]\n" ] } ], "source": [ "# Find generators of the group of rational points\n", "generators = E.gens()\n", "print(\"Generators of the group of rational points:\", generators)" ] }, { "cell_type": "markdown", "id": "b5a75591-2a52-43a5-ab0b-d2b1ce696a67", "metadata": {}, "source": [ "----" ] }, { "cell_type": "markdown", "id": "fafe7788-e143-4aec-b511-708a9c2d4c7c", "metadata": {}, "source": [ "### Drawing Points and their sum\n", "\n", "\n", "\n", "\n", "The following code shows how to draw two points P,Q together with their sum R=P+Q and a line between P,Q" ] }, { "cell_type": "code", "execution_count": 20, "id": "fb6792c4-e256-4bf1-b29b-ff946e7b244a", "metadata": {}, "outputs": [ { "data": { "image/png": "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P368PvroI3Xs2NF0HMCjMKoDkKv+6PIcM2fO1LPPPuvW5+A4grwTFxenzp0765VXXtH48eNNxwGshEuuAPBMFKe8kZiYqCZNmqh169b64osv5O/vbzoSYCW8qg4A8LMff/xRjz76qOrUqaPZs2dTmoBbRHECAC93/vx5tWvXTkWKFNGyZctUuHBh05EAj8XmcADwYg6HQ48//rhOnTqlhIQElS5d2nQkwKNRnADASzmdTj311FPavn274uPjFRYWZjoS4PEoTgDghVwul/r27avY2FgtWbJEDz/8sOlIgFegOAGAFxoxYoSmT5+uzz77jLOagFzE5nAA8DLjxo3T6NGjNX78ePXo0cN0HMCrUJwAwIvMnDlTr732mkaMGKFBgwaZjgN4HYoTAHiJmJgY9enTRy+88IJGjRplOg7glShOAOAFVq5cqW7duumJJ57QpEmT/vDSNwBuD8UJADxcfHy8Hn/8cbVr105z5szhVHAgD1GcAMCDrV+/Xp06ddIjjzyiBQsWqECBAqYjAV6N4gTAMux2u2rWrKmIiAjTUTzCxo0b1aFDBzVt2lSLFi1SYGCg6UiA17O5XC537+v2HQHgdqSnpys4OFhpaWkqVqyY6TiWtGXLFrVt21YPPvigli1bpkKFCpmOBHg6tzYGsuIEAB4mPj5erVu3VsOGDRUbG0tpAvIRxQkAPMjSpUvVoUMHNW/eXCtWrFDhwoVNRwJ8CsUJADzE559/rq5du+qxxx7T0qVLWWkCDKA4AYAHmDRpknr06KFevXppzpw5vHoOMITiBAAWN2bMGPXr10+DBg1SdHQ05zQBBlGcAMCinE6nXn75Zb3++ut666239MEHH3AiOGBYgOkAAID/denSJT355JNauXKlpkyZohdffNF0JACiOAGA5Zw4cUKPPvqoDh06pLi4OLVt29Z0JAD/QXECfJTL5dLx48d19OhRnT59WqdPn9b58+d19epVZWZmKjMzUy6XS4ULF1bRokVVtGhRhYaGqmzZsipbtqwqVaqkggULmv4yvM7evXv16KOPKjs7W1u3btV9991nOhKA61CcAB+QnZ2tAwcOKCEhQV9++aW++eYbHTp0SJcuXbp2nwIFCqh48eK64447VKBAARUoUEA2m02XL19WRkaGMjIylJWVde3+NptNlSpVUrVq1VStWjVVr15d999/v+rWraui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\n", "text/plain": [ "Graphics object consisting of 5 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "P = (0 : 1 : 1)\n", "Q = (1 : 1 : 1)\n", "R = P + Q = (-1 : -1 : 1)\n" ] } ], "source": [ "\n", "\n", "# Import necessary libraries\n", "from sage.all import *\n", "\n", "# Define the elliptic curve\n", "A = -1 # Example value for A\n", "B = 1 # Example value for B\n", "E = EllipticCurve([A, B])\n", "\n", "# Choose two points on the elliptic curve\n", "P = E([0, 1]) # Example point P\n", "Q = E([1, 1]) # Example point Q\n", "\n", "# Calculate their sum\n", "R = P + Q\n", "\n", "# Calculate the equation of the line passing through P and Q\n", "if P != Q:\n", " # Calculate the slope\n", " slope = (Q[1] - P[1]) / (Q[0] - P[0])\n", " intercept = P[1] - slope * P[0]\n", "else:\n", " # Special case for tangent line when P = Q\n", " tangent_line = E.tangent_line(P)\n", " slope = tangent_line.slope()\n", " intercept = P[1] - slope * P[0]\n", "\n", "# Define the line function\n", "line_function = slope * x + intercept\n", "\n", "# Plot the elliptic curve\n", "curve_plot = E.plot(xmin=-3, xmax=3, ymin=-3, ymax=3, color='black')\n", "\n", "# Plot the points P, Q, and R\n", "points_plot = sum(point(p.xy(), color='red', size=30) for p in [P, Q, R])\n", "\n", "# Plot the extended line passing through P and Q\n", "line_plot = plot(line_function, (x, -5, 5), ymin=-5, ymax=5, color='blue')\n", "\n", "# Combine all plots\n", "full_plot = curve_plot + points_plot + line_plot\n", "\n", "# Show the plot\n", "full_plot.show()\n", "\n", "# Print the points for reference\n", "print(\"P =\", P)\n", "print(\"Q =\", Q)\n", "print(\"R = P + Q =\", R)" ] }, { "cell_type": "code", "execution_count": 1, "id": "5e9ac880-d373-4865-94df-be9b2b40e650", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 12 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "(0 : 1 : 0)\n", "(0 : 1 : 1)\n", "(0 : 4 : 1)\n", "(2 : 1 : 1)\n", "(2 : 4 : 1)\n", "(3 : 1 : 1)\n", "(3 : 4 : 1)\n", "(4 : 2 : 1)\n", "(4 : 3 : 1)\n" ] } ], "source": [ "E = EllipticCurve([0,0,0,0,1]);\n", "Ep = plot(E, -1,2.5,thickness=2);\n", "\n", "\n", "P=E([2,3])\n", "\n", "p1=P.xy(); p2=(2*P).xy(); p3=(-1,0); p4=(0,-1); p5=(2,-3);\n", "\n", "\n", "L1=line([p1,p3],rgbcolor=(1,0,0));\n", "L2=line([p5,p3],rgbcolor=(1,0,0));\n", "L3=line([p4,p3],rgbcolor=(1,0,0));\n", "L4=line([p2,p5],rgbcolor=(1,0,0));\n", "L5=line([p4,p1],rgbcolor=(1,0,0));\n", "T1=text('P',[2,3.5]);\n", "T2=text('2P',[0.15,1.5]);\n", "T3=text('3P',[-1,.5]);\n", "T4=text('4P',[0.15,-1.5]);\n", "T5=text('5P',[2,-3.5]);\n", "P=point([p1,p2,p3,p4,p5],pointsize=30,rgbcolor=(0,0,0));\n", "PLOT=Ep+T1+T2+T3+T4+T5+L1+L2+L3+L4+L5+P; show(PLOT)\n", "\n", "\n", "\n", "\n", "# Step 1: Define the finite field\n", "F = GF(5) # Example finite field of order 5\n", "\n", "# Step 2: Define the elliptic curve\n", "# Example: y^2 = x^3 + ax + b over F\n", "a = F(1)\n", "b = F(1)\n", "E = EllipticCurve([a, b])\n", "\n", "# Step 3: Find the points on the elliptic curve\n", "points = E.points()\n", "\n", "# Display the points\n", "for P in points:\n", " print(P)" ] }, { "cell_type": "code", "execution_count": null, "id": "15edd162-7556-46cb-9a98-66babdebfa20", "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.9.10" } }, "nbformat": 4, "nbformat_minor": 5 }