The point group operation for an elliptic curve is derived by geometric considerations on the curve in Weierstraß normal form <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>y</mi><mn>2</mn></msup><mo>=</mo><msup><mi>x</mi><mn>3</mn></msup><mo>+</mo><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">y^2 = x^3 + ax + b</annotation></semantics></math>y2=x3+ax+b over the real numbers.
Because it is defined by an algebraic equation in the third degree, a straight line can intersect such a curve at at most three points in the <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math>(x,y) plane.
The basic point group operation <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⊕</mo></mrow><annotation encoding="application/x-tex">\oplus</annotation></semantics></math>⊕ consists in finding the reflection across the x-axis of the third point of intersection of the curve with a line through two given points on the curve.
A few "fixes" are applied to make a mathematical group out of the basic point operation.
group n. a set <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>G</mi></mrow><annotation encoding="application/x-tex">G</annotation></semantics></math>G together with an operation <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⊕</mo></mrow><annotation encoding="application/x-tex">\oplus</annotation></semantics></math>⊕ with the following properties:
- closure: <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi mathvariant="normal">∀</mi><mi>g</mi><mo separator="true">,</mo><mi>h</mi><mo>∈</mo><mi>G</mi><mo stretchy="false">)</mo><mtext> </mtext><mi>g</mi><mo>⊕</mo><mi>h</mi><mo>∈</mo><mi>G</mi></mrow><annotation encoding="application/x-tex">(\forall g,h\in G)\,g\oplus h\in G</annotation></semantics></math>(∀g,h∈G)g⊕h∈G;
- associativity: <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi mathvariant="normal">∀</mi><mi>f</mi><mo separator="true">,</mo><mi>g</mi><mo separator="true">,</mo><mi>h</mi><mo>∈</mo><mi>G</mi><mo stretchy="false">)</mo><mtext> </mtext><mo stretchy="false">(</mo><mi>f</mi><mo>⊕</mo><mi>g</mi><mo stretchy="false">)</mo><mo>⊕</mo><mi>h</mi><mo>=</mo><mi>f</mi><mo>⊕</mo><mo stretchy="false">(</mo><mi>g</mi><mo>⊕</mo><mi>h</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(\forall f,g,h\in G)\,(f\oplus g)\oplus h = f\oplus (g\oplus h)</annotation></semantics></math>(∀f,g,h∈G)(f⊕g)⊕h=f⊕(g⊕h);
- identity with inverses:
<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi mathvariant="normal">∃</mi><mn mathvariant="bold">0</mn><mo>∈</mo><mi>G</mi><mo stretchy="false">)</mo><mo stretchy="false">(</mo><mi mathvariant="normal">∀</mi><mi>g</mi><mo>∈</mo><mi>G</mi><mo stretchy="false">)</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.24999999999999992em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>g</mi><mo>⊕</mo><mn mathvariant="bold">0</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mi>g</mi><mo separator="true">;</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mn mathvariant="bold">0</mn><mo>⊕</mo><mi>g</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mi>g</mi><mo separator="true">;</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mo stretchy="false">(</mo><mi mathvariant="normal">∃</mi><msup><mtext> </mtext><mo lspace="0em" rspace="0em">⊖</mo></msup><mtext> </mtext><mi>g</mi><mo>∈</mo><mi>G</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mrow><mo fence="true">{</mo><mtable rowspacing="0.15999999999999992em" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>g</mi><mo>⊕</mo><msup><mtext> </mtext><mo lspace="0em" rspace="0em">⊖</mo></msup><mtext> </mtext><mi>g</mi><mo>=</mo><mn mathvariant="bold">0</mn><mo separator="true">;</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msup><mtext> </mtext><mo lspace="0em" rspace="0em">⊖</mo></msup><mtext> </mtext><mi>g</mi><mo>⊕</mo><mi>g</mi><mo>=</mo><mn mathvariant="bold">0.</mn></mrow></mstyle></mtd></mtr></mtable></mrow></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">(\exists \mathbf 0\in G) (\forall g\in G) \left\{\begin{aligned} g\oplus \mathbf 0 & =g; \\ \mathbf 0\oplus g & = g; \\ (\exists {\,}^{\ominus}\!g\in G) & \left\{ \begin{matrix} g\oplus {\,}^{\ominus}\!g = \mathbf 0; \\ {\,}^{\ominus}\!g\oplus g=\mathbf 0. \end{matrix}\right. \end{aligned}\right. </annotation></semantics></math>(∃0∈G)(∀g∈G)⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧g⊕00⊕g(∃⊖g∈G)=g;=g;{g⊕⊖g=0;⊖g⊕g=0.
A group is said to be Abelian (after Niels Henrik Abel) if its group operation is commutative:
<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi mathvariant="normal">∀</mi><mi>g</mi><mo separator="true">,</mo><mi>h</mi><mo>∈</mo><mi>G</mi><mo stretchy="false">)</mo><mi>g</mi><mo>⊕</mo><mi>h</mi><mo>=</mo><mi>h</mi><mo>⊕</mo><mi>g</mi><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">(\forall g,h\in G)g\oplus h=h\oplus g. </annotation></semantics></math>(∀g,h∈G)g⊕h=h⊕g.
An additional "point at infinity" is adjoined to the <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y)</annotation></semantics></math>(x,y) plane, and considered to lie on the curve, although it is not given coördinates in the real numbers. This point is the identity for the group operation. (The inverse consists in taking the reflection of a point across the x-axis.)
The operation of a point with itself, called point-doubling, is defined similarly, but by considering the line tangent to the curve at that point rather than through two distinct points.
Given two points that lie on a given elliptic curve,
<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>P</mi><mn>1</mn></msub><mo>=</mo><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>y</mi><mn>1</mn></msub><mo stretchy="false">)</mo><mo separator="true">,</mo><mspace width="2em"></mspace><msub><mi>P</mi><mn>2</mn></msub><mo>=</mo><mo stretchy="false">(</mo><msub><mi>x</mi><mn>2</mn></msub><mo separator="true">,</mo><msub><mi>y</mi><mn>2</mn></msub><mo stretchy="false">)</mo><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">P_1 = (x_1,y_1),\qquad P_2 = (x_2,y_2), </annotation></semantics></math>P1=(x1,y1),P2=(x2,y2),
the objective is to find the "third point" and calculate the "group sum" of the first two points:
<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>P</mi><mn>3</mn></msub><mo>=</mo><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><mspace width="2em"></mspace><msub><mi>P</mi><mn>1</mn></msub><mo>⊕</mo><msub><mi>P</mi><mn>2</mn></msub><mo>=</mo><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mo>−</mo><mi>y</mi><mo stretchy="false">)</mo><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">P_3=(x,y),\qquad P_1\oplus P_2=(x,-y). </annotation></semantics></math>P3=(x,y),P1⊕P2=(x,−y).
Once we have defined a suitably consistent algebraic definition for the so-called point group operation on an elliptic curve, we are freed from geometric considerations and able to consider the operation on the elliptic curve over other algebraic fields that have no geometric analogue.
Let
<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.15999999999999992em" columnalign="left right" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mstyle displaystyle="true" scriptlevel="0"><mfrac><mrow><msub><mi>y</mi><mn>2</mn></msub><mo>−</mo><msub><mi>y</mi><mn>1</mn></msub></mrow><mrow><msub><mi>x</mi><mn>2</mn></msub><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub></mrow></mfrac></mstyle></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>…</mo><msub><mi>x</mi><mn>2</mn></msub><mo mathvariant="normal">≠</mo><msub><mi>x</mi><mn>1</mn></msub></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mstyle displaystyle="true" scriptlevel="0"><mfrac><mrow><mn>3</mn><msubsup><mi>x</mi><mn>1</mn><mn>2</mn></msubsup></mrow><mrow><mn>2</mn><mi mathvariant="normal">√</mi><mo stretchy="false">(</mo><msubsup><mi>x</mi><mn>1</mn><mn>3</mn></msubsup><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub><mo stretchy="false">)</mo></mrow></mfrac></mstyle></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>…</mo><msub><mi>x</mi><mn>2</mn></msub><mo>=</mo><msub><mi>x</mi><mn>1</mn></msub><mo separator="true">,</mo><mtext> </mtext><msub><mi>y</mi><mn>2</mn></msub><mo>=</mo><msub><mi>y</mi><mn>1</mn></msub><mo separator="true">,</mo><mtext> </mtext><msub><mi>y</mi><mn>2</mn></msub><mo>≥</mo><mn>0</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mstyle displaystyle="true" scriptlevel="0"><mfrac><mrow><mo>−</mo><mn>3</mn><msubsup><mi>x</mi><mn>1</mn><mn>2</mn></msubsup></mrow><mrow><mn>2</mn><mi mathvariant="normal">√</mi><mo stretchy="false">(</mo><msubsup><mi>x</mi><mn>1</mn><mn>3</mn></msubsup><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub><mo stretchy="false">)</mo></mrow></mfrac></mstyle></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>…</mo><msub><mi>x</mi><mn>2</mn></msub><mo>=</mo><msub><mi>x</mi><mn>1</mn></msub><mo separator="true">,</mo><mtext> </mtext><msub><mi>y</mi><mn>2</mn></msub><mo>=</mo><msub><mi>y</mi><mn>1</mn></msub><mo separator="true">,</mo><mtext> </mtext><msub><mi>y</mi><mn>2</mn></msub><mo><</mo><mn>0</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi mathvariant="normal">∞</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>…</mo><mtext>all other cases</mtext></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">m=\left\{\begin{array}{lr} \dfrac{y_2-y_1}{x_2-x_1}& \ldots x_2\ne x_1 \\ \dfrac{3x_1^2}{2\surd(x_1^3-x_1)} &\ldots x_2 = x_1,\,y_2 = y_1,\,y_2 \ge 0 \\ \dfrac{-3x_1^2}{2\surd(x_1^3-x_1)} &\ldots x_2 = x_1,\,y_2 = y_1,\,y_2 < 0 \\ \infty &\ldots \textrm{all other cases} \end{array}\right.</annotation></semantics></math>m=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧x2−x1y2−y12√(x13−x1)3x122√(x13−x1)−3x12∞…x2=x1…x2=x1,y2=y1,y2≥0…x2=x1,y2=y1,y2<0…all other cases
be the slope of the line, either through <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>y</mi><mn>1</mn></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x_1,y_1)</annotation></semantics></math>(x1,y1) and <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>x</mi><mn>2</mn></msub><mo separator="true">,</mo><msub><mi>y</mi><mn>2</mn></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x_2,y_2)</annotation></semantics></math>(x2,y2) or tangent to the curve (in Weierstraß normal form) at <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>y</mi><mn>1</mn></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x_1,y_1)</annotation></semantics></math>(x1,y1) if <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mn>2</mn></msub><mo>=</mo><msub><mi>x</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">x_2=x_1</annotation></semantics></math>x2=x1 and <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>y</mi><mn>2</mn></msub><mo>=</mo><msub><mi>y</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">y_2=y_1</annotation></semantics></math>y2=y1.
Substitute the equation for the line into that for the elliptic curve to find the "third point:"
<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mtable rowspacing="0.24999999999999992em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>y</mi><mo>−</mo><msub><mi>y</mi><mn>1</mn></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mi>m</mi><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mi>y</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mi>m</mi><mi>x</mi><mo>+</mo><msub><mi>y</mi><mn>1</mn></msub><mo>−</mo><mi>m</mi><msub><mi>x</mi><mn>1</mn></msub></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><msup><mi>y</mi><mn>2</mn></msup></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msup><mi>m</mi><mn>2</mn></msup><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mn>2</mn><mi>m</mi><mo stretchy="false">(</mo><msub><mi>y</mi><mn>1</mn></msub><mo>−</mo><mi>m</mi><msub><mi>x</mi><mn>1</mn></msub><mo stretchy="false">)</mo><mi>x</mi><mo>+</mo><mo stretchy="false">(</mo><msubsup><mi>y</mi><mn>1</mn><mn>2</mn></msubsup><mo>−</mo><mn>2</mn><mi>m</mi><msub><mi>x</mi><mn>1</mn></msub><msub><mi>y</mi><mn>1</mn></msub><mo>+</mo><msup><mi>m</mi><mn>2</mn></msup><msubsup><mi>x</mi><mn>1</mn><mn>2</mn></msubsup><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><msup><mi>y</mi><mn>2</mn></msup></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msup><mi>x</mi><mn>3</mn></msup><mo>+</mo><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mphantom><mo>=</mo></mphantom><msup><mi>x</mi><mn>3</mn></msup><mo>−</mo><msup><mi>m</mi><mn>2</mn></msup><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mo stretchy="false">[</mo><mi>a</mi><mo>+</mo><mn>2</mn><mi>m</mi><mo stretchy="false">(</mo><mi>m</mi><msub><mi>x</mi><mn>1</mn></msub><mo>−</mo><msub><mi>y</mi><mn>1</mn></msub><mo stretchy="false">)</mo><mo stretchy="false">]</mo><mi>x</mi><mo>+</mo><mo stretchy="false">(</mo><mi>b</mi><mo>−</mo><msubsup><mi>y</mi><mn>1</mn><mn>2</mn></msubsup><mo>+</mo><mn>2</mn><mi>m</mi><msub><mi>x</mi><mn>1</mn></msub><msub><mi>y</mi><mn>1</mn></msub><mo>−</mo><msup><mi>m</mi><mn>2</mn></msup><msubsup><mi>x</mi><mn>1</mn><mn>2</mn></msubsup><mo stretchy="false">)</mo><mo>=</mo><mn>0</mn></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned} y - y_1 &= m(x-x_1) \\ y &= mx + y_1 - mx_1 \\ y^2 &= m^2x^2 + 2m(y_1-mx_1)x + (y_1^2 - 2mx_1y_1 + m^2x_1^2) \\ y^2 &= x^3 + ax + b \\ &\phantom{=} x^3 - m^2x^2 + [a+2m(mx_1-y_1)]x + (b - y_1^2 + 2mx_1y_1 - m^2x_1^2) =0 \end{aligned}</annotation></semantics></math>y−y1yy2y2=m(x−x1)=mx+y1−mx1=m2x2+2m(y1−mx1)x+(y12−2mx1y1+m2x12)=x3+ax+b=x3−m2x2+[a+2m(mx1−y1)]x+(b−y12+2mx1y1−m2x12)=0
Factor out the first two points <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub><mo stretchy="false">)</mo><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><msub><mi>x</mi><mn>2</mn></msub><mo stretchy="false">)</mo><mo>=</mo><msup><mi>x</mi><mn>2</mn></msup><mo>−</mo><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo>+</mo><msub><mi>x</mi><mn>2</mn></msub><mo stretchy="false">)</mo><mi>x</mi><mo>+</mo><msub><mi>x</mi><mn>1</mn></msub><msub><mi>x</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">(x-x_1)(x-x_2)=x^2-(x_1+x_2)x+x_1x_2</annotation></semantics></math>(x−x1)(x−x2)=x2−(x1+x2)x+x1x2 from <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>x</mi><mn>3</mn></msup><mo>+</mo><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">x^3+ax+b</annotation></semantics></math>x3+ax+b and find the remainder by long division.
<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mtable rowspacing="0.15999999999999992em" columnalign="right right right right right" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>x</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>+</mo><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo lspace="0em" rspace="0em">+</mo><msub><mi>x</mi><mn>2</mn></msub><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>−</mo><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo lspace="0em" rspace="0em">+</mo><msub><mi>x</mi><mn>2</mn></msub><mo stretchy="false">)</mo><mi>x</mi><mo>+</mo><msub><mi>x</mi><mn>1</mn></msub><msub><mi>x</mi><mn>2</mn></msub><mpadded height="+0.862em" voffset="0.862em"><mspace mathbackground="black" width="21em" height="0em"></mspace></mpadded><mspace width="-21em"></mspace><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msup><mi>x</mi><mn>3</mn></msup></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>+</mo><mi>a</mi><mi>x</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>+</mo><mi>b</mi><mspace width="2em"></mspace></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msup><mi>x</mi><mn>3</mn></msup></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo lspace="0em" rspace="0em">+</mo><msub><mi>x</mi><mn>2</mn></msub><mo stretchy="false">)</mo><msup><mi>x</mi><mn>2</mn></msup></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>+</mo><msub><mi>x</mi><mn>1</mn></msub><msub><mi>x</mi><mn>2</mn></msub><mi>x</mi><mspace width="-14em"></mspace><mpadded height="-0.2155em" depth="+0.2155em" voffset="-0.2155em"><mspace mathbackground="black" width="14em" height="0em"></mspace></mpadded></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo lspace="0em" rspace="0em">+</mo><msub><mi>x</mi><mn>2</mn></msub><mo stretchy="false">)</mo><msup><mi>x</mi><mn>2</mn></msup></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>+</mo><mo stretchy="false">(</mo><mi>a</mi><mo lspace="0em" rspace="0em">−</mo><msub><mi>x</mi><mn>1</mn></msub><msub><mi>x</mi><mn>2</mn></msub><mo stretchy="false">)</mo><mi>x</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>+</mo><mi>b</mi><mspace width="2em"></mspace></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo lspace="0em" rspace="0em">+</mo><msub><mi>x</mi><mn>2</mn></msub><mo stretchy="false">)</mo><msup><mi>x</mi><mn>2</mn></msup></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo lspace="0em" rspace="0em">+</mo><msub><mi>x</mi><mn>2</mn></msub><msup><mo stretchy="false">)</mo><mn>2</mn></msup><mi>x</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>+</mo><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo lspace="0em" rspace="0em">+</mo><msub><mi>x</mi><mn>2</mn></msub><mo stretchy="false">)</mo><msub><mi>x</mi><mn>1</mn></msub><msub><mi>x</mi><mn>2</mn></msub><mspace width="-18.5em"></mspace><mpadded height="-0.2155em" depth="+0.2155em" voffset="-0.2155em"><mspace mathbackground="black" width="18.5em" height="0em"></mspace></mpadded></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mspace width="-15em"></mspace><mi>R</mi><mo>=</mo><mo stretchy="false">(</mo><mi>a</mi><mo lspace="0em" rspace="0em">+</mo><msubsup><mi>x</mi><mn>1</mn><mn>2</mn></msubsup><mo lspace="0em" rspace="0em">+</mo><msub><mi>x</mi><mn>1</mn></msub><msub><mi>x</mi><mn>2</mn></msub><mo lspace="0em" rspace="0em">+</mo><msubsup><mi>x</mi><mn>2</mn><mn>2</mn></msubsup><mo stretchy="false">)</mo><mi>x</mi><mo>+</mo><mi>b</mi><mo>−</mo><msubsup><mi>x</mi><mn>1</mn><mn>2</mn></msubsup><msub><mi>x</mi><mn>2</mn></msub><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub><msubsup><mi>x</mi><mn>2</mn><mn>2</mn></msubsup></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{array}{rrrrr} &x&+(x_1{+}x_2)\\ x^2-(x_1{+}x_2)x+x_1x_2\rule[2ex]{21em}{}\hspace{-21em}) & x^3 & & +ax & +b\qquad\\ &x^3&-(x_1{+}x_2)x^2&+x_1x_2x\hspace{-14em}\rule[-0.5ex]{14em}{}\\ &&(x_1{+}x_2)x^2&+(a{-}x_1x_2)x&+b\qquad\\ &&(x_1{+}x_2)x^2&-(x_1{+}x_2)^2x& +(x_1{+}x_2)x_1x_2\hspace{-18.5em}\rule[-0.5ex]{18.5em}{}\\ &&&&\hspace{-15em}R= (a{+}x_1^2{+}x_1x_2{+}x_2^2)x+b-x_1^2x_2-x_1x_2^2 \end{array} </annotation></semantics></math>x2−(x1+x2)x+x1x2)xx3x3+(x1+x2)−(x1+x2)x2(x1+x2)x2(x1+x2)x2+ax+x1x2x+(a−x1x2)x−(x1+x2)2x+b+b+(x1+x2)x1x2R=(a+x12+x1x2+x22)x+b−x12x2−x1x22
<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mtable rowspacing="0.24999999999999992em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><msup><mi>y</mi><mn>2</mn></msup></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub><mo stretchy="false">)</mo><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><msub><mi>x</mi><mn>2</mn></msub><mo stretchy="false">)</mo><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo>+</mo><msub><mi>x</mi><mn>2</mn></msub><mo>+</mo><mi>x</mi><mo stretchy="false">)</mo><mo>+</mo><msubsup><mi>x</mi><mn>1</mn><mn>2</mn></msubsup><mi>x</mi><mo>+</mo><msub><mi>x</mi><mn>1</mn></msub><msub><mi>x</mi><mn>2</mn></msub><mi>x</mi><mo>+</mo><msubsup><mi>x</mi><mn>2</mn><mn>2</mn></msubsup><mi>x</mi><mo>−</mo><msubsup><mi>x</mi><mn>1</mn><mn>2</mn></msubsup><msub><mi>x</mi><mn>2</mn></msub><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub><msubsup><mi>x</mi><mn>2</mn><mn>2</mn></msubsup><mo>+</mo><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><msup><mi>x</mi><mn>3</mn></msup></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub><mo stretchy="false">)</mo><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><msub><mi>x</mi><mn>2</mn></msub><mo stretchy="false">)</mo><mo stretchy="false">(</mo><msub><mi>x</mi><mn>1</mn></msub><mo>+</mo><msub><mi>x</mi><mn>2</mn></msub><mo>+</mo><mi>x</mi><mo stretchy="false">)</mo><mo>+</mo><msubsup><mi>x</mi><mn>1</mn><mn>2</mn></msubsup><mi>x</mi><mo>+</mo><msub><mi>x</mi><mn>1</mn></msub><msub><mi>x</mi><mn>2</mn></msub><mi>x</mi><mo>+</mo><msubsup><mi>x</mi><mn>2</mn><mn>2</mn></msubsup><mi>x</mi><mo>−</mo><msubsup><mi>x</mi><mn>1</mn><mn>2</mn></msubsup><msub><mi>x</mi><mn>2</mn></msub><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub><msubsup><mi>x</mi><mn>2</mn><mn>2</mn></msubsup></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned} y^2 &= (x-x_1)(x-x_2)(x_1+x_2+x) + x_1^2x + x_1x_2x + x_2^2x -x_1^2x_2-x_1x_2^2 + ax + b \\ x^3 &= (x-x_1)(x-x_2)(x_1+x_2+x) + x_1^2x + x_1x_2x + x_2^2x -x_1^2x_2-x_1x_2^2 \end{aligned}</annotation></semantics></math>y2x3=(x−x1)(x−x2)(x1+x2+x)+x12x+x1x2x+x22x−x12x2−x1x22+ax+b=(x−x1)(x−x2)(x1+x2+x)+x12x+x1x2x+x22x−x12x2−x1x22