Solution de poustouflan pour Salade de fruits

crypto

15 avril 2024

Changement de variable

Notre objectif va être d’exprimer l’équation sous une forme de Weierstrass. Supposons que $🍍^3 + 🍓^3 = 94🍌^3$ avec $0 < 🍍, 🍓, 🍌$. On peut réécrire l’équation comme

$$ \left(\dfrac 🍍🍌\right)^3 + \left(\dfrac 🍓🍌\right)^3 = 94 $$

Tentons donc de faire le changement de variable

$$ \begin{align*} & \dfrac 🍍🍌 = u + v && \dfrac 🍓🍌 = u - v \\ \iff & u = \dfrac {🍍 + 🍓}{2🍌} && v = \dfrac {🍍 - 🍓}{2🍌} \end{align*} $$

L’équation devient alors

$$ \begin{align*} (u+v)^3 + (u-v)^3 &= 94 \\ 2u^3 + 6uv^2 &= 94. \end{align*} $$

$u$ étant nécessairement strictement positif, on peut diviser par $u^3$ :

$$ \begin{align*} 2 + \dfrac{6v^2}{u^2} &= \dfrac{94}{u^3} \\ 6 \cdot \left(\dfrac{v}{u}\right)^2 &= 94 \cdot \dfrac{1}{u^3} - 2 \\ \end{align*} $$

Idéalement, pour retrouver une forme $Y^2 = X^3 + b$, on veut égaliser le coefficient de $Y^2$ et de $X^3$. Profitons du changement de variable pour cela. En prenant

$$ \dfrac vu = \dfrac Y{6^2 \cdot 94}, \quad \dfrac 1u = \dfrac X{6 \cdot 94}, $$

on obtient :

$$ \begin{align*} 6 \cdot \left(\dfrac Y{6^2 \cdot 94}\right)^2 &= 94 \cdot \left(\dfrac X{6 \cdot 94}\right)^3 - 2 \\ \dfrac1{6^3 \cdot 94^2} \cdot Y^2 &= \dfrac1{6^3 \cdot 94^2} \cdot X^3 - 2 \\ Y^2 &= X^3 - 2 \cdot 6^3 \cdot 94^2 \\ Y^2 &= X^3 - 3,817,152. \end{align*} $$

Le changement de variable effectué est donc

$$ \begin{align*} X &= \dfrac{6 \cdot 94}{u} & Y &= \dfrac {6^2 \cdot 94 \cdot v}u \\ X &= \dfrac{2 \cdot 6 \cdot 94 \cdot 🍌}{🍍 + 🍓} & Y &= \dfrac {6^2 \cdot 94 \cdot (🍍 - 🍓)}{🍍 + 🍓} \\ X &= \dfrac{1,128 \cdot 🍌}{🍍 + 🍓} & Y &= \dfrac {3,384 \cdot (🍍 - 🍓)}{🍍 + 🍓} \\ \end{align*} $$

Courbe elliptique

Les solutions à notre équation se retrouvent alors sur la courbe elliptique $(E):~Y^2 = X^3 - 3,817,152$.

Modéliser cette courbe elliptique sur SageMath nous permet de rapidement étudier sa structure :

sage: E = EllipticCurve([0, -3817152])
sage: E.gens()
[(62511752209/2480625 : -15629405421521177/3906984375 : 1)]

N’ayant qu’un seul générateur $G$, il s’agit d’un groupe monogène Itérer sur les multiples de $G$ nous permettra donc d’énumérer l’intégralité des solutions de l’équation.

Énumérer les solutions

Depuis un point $(X, Y)$ de la courbe elliptique, nous pouvons inverser le changement de variable afin d’en extraire des solutions de l’équation de base :

$$ \begin{align*} X = \dfrac{6 \cdot 94}u &\implies u = \dfrac{564}X & Y = \dfrac{6^2 \cdot 94 \cdot v}u &\implies v = \dfrac{Y\cdot u}{3,384} \\ \dfrac 🍍🍌 &= u + v & \dfrac 🍓🍌 &= u - v \end{align*} $$

La plus petite solution engendrée par ce point se trouve en considérant $🍌$ comme le plus petit dénominateur commun. Toutes les autres solutions engendrées sont proportionnelles à cette solution, et par conséquent plus larges.

Cependant, de telles solutions peuvent ne pas satisfaire notre équation si l’un de $🍍$ ou $🍓$ est négatif. Dans ce cas, aucune proportion ne rendra $🍍, 🍓$ et $🍌$ positifs, et le point ne modélisera alors aucune solution positive à notre équation.

Étant donné que les solutions obtenues par les multiples de $G$ deviennent significativement plus grandes au fil de l’énumération, on est assuré que le premier multiple de $G$ produisant un couple $(🍍, 🍓, 🍌)$ positif sera la solution au challenge.

Mise en œuvre

E = EllipticCurve([0, -3817152])
G = E.gens()[0]

P = G

while True:
    X, Y = P.xy()
    u = 564 / X
    v = Y * u / 3384

    xz = u + v
    yz = u - v

    z = lcm(xz.denominator(), yz.denominator())
    x = xz * z
    y = yz * z

    assert x^3 + y^3 == 94 * z^3

    if x > 0 and y > 0:
        print(f'{x = }')
        print(f'{y = }')
        print(f'{z = }')
        break

    P += G