Dibujar una curva elíptica sobre un campo finito

Dibujar una curva elíptica sobre un campo finito

He visto mucha información útil aquí para dibujar curvas elípticas sobre los reales, pero tengo problemas para hacer lo mismo en un campo finito. Por ejemplo, digamos que intentamos dibujar los puntos en E: y^2 = x^3 + 1 con x,y en el campo de 17 elementos.

Probé algunas combinaciones de

\foreach \x in {1,...,16}
\foreach \y in {1,...,16}{ 
    let \lhs = {int(mod(\y*\y, 17))}
    let \rhs = {int(mod(\x*\x*\x + 1,17))}
    \ifthenelse{\lhs = \rhs}{
    \node[circle,draw] (\x \y) at (\x,\y) {\x};
    }{}
}

pero nunca consigo que funcione... La imagen debería volverse similar a Texto

Respuesta1

No puedes usarlo letfuera de una ruta. Solo usa\pgfmathsetmacro\lhr{…}(o en este caso \pgfmathtruncatemacro\lhr{…}y descartar la intfunción) o elevaluatellavepara \foreach.

Ajusté un poco el estilo del nodo y agregué los valores \xy \ycomo etiqueta para que puedas verificar los puntos evaluados.

Código

\documentclass[tikz]{standalone}
\usepackage{xifthen}
\begin{document}
\begin{tikzpicture}[every label/.append style={font=\small}]
\foreach[
  evaluate={\rhs = int(mod(\x*\x*\x + 1, 17));}
] \x in {1,...,16}{
  \foreach[
    evaluate={\lhs = int(mod(\y*\y, 17));}
  ] \y in {1,...,16}{
    \ifthenelse{\lhs = \rhs}{
      \node[circle, red, fill, label={\x, \y}] at (\x,\y) {};
    }{}
  }
}
\end{tikzpicture}
\end{document}

Producción

ingrese la descripción de la imagen aquí

información relacionada