Desenhando uma curva elíptica sobre um campo finito

Desenhando uma curva elíptica sobre um campo finito

Vi muitas informações úteis aqui para desenhar curvas elípticas sobre os reais, mas estou tendo problemas para fazer o mesmo em um corpo finito. Por exemplo, digamos que tentamos desenhar os pontos em E: y^2 = x^3 + 1 com x,y no corpo de 17 elementos.

Eu tentei algumas combinações 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};
    }{}
}

mas nunca consigo fazer funcionar... A imagem deve ficar semelhante a Texto

Responder1

Você não pode usar letfora de um caminho. Apenas use\pgfmathsetmacro\lhr{…}(ou neste caso \pgfmathtruncatemacro\lhr{…}e descartando a intfunção) ou oevaluatechavepara \foreach.

Ajustei um pouco o estilo do nó e adicionei os valores \xe \ycomo rótulo para que você possa verificar os pontos avaliados.

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}

Saída

insira a descrição da imagem aqui

informação relacionada