Рисование эллиптической кривой над конечным полем

Рисование эллиптической кривой над конечным полем

Я видел здесь много полезной информации о рисовании эллиптических кривых над вещественными числами, но у меня возникли проблемы с тем, чтобы сделать то же самое над конечным полем. Например, предположим, что мы пытаемся нарисовать точки на E: y^2 = x^3 + 1 с x,y в поле из 17 элементов.

Я попробовал несколько комбинаций

\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};
    }{}
}

но у меня так и не получилось заставить это работать... Изображение должно стать похожим на Текст

решение1

Вы не можете использовать letвне пути. Просто используйте\pgfmathsetmacro\lhr{…}(или в этом случае \pgfmathtruncatemacro\lhr{…}и отбрасывая intфункцию) илиevaluateключдля \foreach.

Я немного изменил стиль узла и добавил значения \xи \yв качестве метки, чтобы вы могли проверить оцененные точки.

Код

\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}

Выход

введите описание изображения здесь

Связанный контент