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
Responder1
Você não pode usar let
fora de um caminho. Apenas use\pgfmathsetmacro\lhr{…}
(ou neste caso \pgfmathtruncatemacro\lhr{…}
e descartando a int
função) ou oevaluate
chavepara \foreach
.
Ajustei um pouco o estilo do nó e adicionei os valores \x
e \y
como 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}