Current File : //usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex |
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
% Macros contributed by Alain Matthes and adapted by CJ
\pgfmathdeclarefunction{gcd}{2}{%
\begingroup
\pgfmathcontinuelooptrue
\pgfmath@xa=#1pt
\pgfmath@xb=#2pt
\ifdim\pgfmath@xa=0pt\relax
\pgfmathcontinueloopfalse
\pgfmath@xa=\pgfmath@xb
\fi
\ifdim\pgfmath@xb=0pt\relax
\pgfmathcontinueloopfalse
\pgfmath@xb=\pgfmath@xa
\fi
\ifdim\pgfmath@xa<0pt\relax
\pgfmath@xa=-\pgfmath@xa
\fi
\ifdim\pgfmath@xb<0pt\relax
\pgfmath@xb=-\pgfmath@xb
\fi
\loop
\ifpgfmathcontinueloop
\ifdim\pgfmath@xa=\pgfmath@xb
\pgfmathcontinueloopfalse
\else
\ifdim\pgfmath@xa>\pgfmath@xb
\advance\pgfmath@xa by-\pgfmath@xb
\else
\advance\pgfmath@xb by-\pgfmath@xa
\fi
\fi
\repeat
\pgfmathparse{int(\pgfmath@xa)}%
\pgfmath@smuggleone\pgfmathresult
\endgroup}
\newif\ifpgfmath@isprime@unknown
\newif\ifpgfmath@isprime
\pgfmathdeclarefunction{isprime}{1}{%
\begingroup
\pgfmath@isprime@unknowntrue
\pgfmathsetcount\c@pgfmath@counta{abs(int(#1))}%
\ifcase\c@pgfmath@counta\relax
% |#1| = 0
\pgfmath@isprimefalse
\pgfmath@isprime@unknownfalse
\or
% |#1| = 1
\pgfmath@isprimefalse
\pgfmath@isprime@unknownfalse
\or
% |#1| = 2
\pgfmath@isprimetrue
\pgfmath@isprime@unknownfalse
\or
% |#1| = 3
\pgfmath@isprimetrue
\pgfmath@isprime@unknownfalse
\else
% |#1| > 3
\ifodd\c@pgfmath@counta\relax
\else
\pgfmath@isprimefalse
\pgfmath@isprime@unknownfalse
\fi
\fi
\ifpgfmath@isprime@unknown
\c@pgfmath@countd=3
\pgfmath@isprimetrue
\pgfmathloop
\c@pgfmath@countb=\c@pgfmath@counta
\divide\c@pgfmath@countb by\c@pgfmath@countd
\ifnum\c@pgfmath@countb>\c@pgfmath@countd
\pgfmath@isprime@unknowntrue
\else
\pgfmath@isprime@unknownfalse
\fi
\multiply\c@pgfmath@countb by\c@pgfmath@countd
\ifnum\c@pgfmath@countb=\c@pgfmath@counta
\global\pgfmath@isprimefalse
\pgfmath@isprime@unknownfalse
\fi
\ifpgfmath@isprime@unknown\advance\c@pgfmath@countd by 2
\repeatpgfmathloop
\fi
\ifpgfmath@isprime
\def\pgfmathresult{1}%
\else
\def\pgfmathresult{0}%
\fi
\pgfmath@smuggleone\pgfmathresult
\endgroup}
\pgfmathdeclarefunction{isodd}{1}{%
\begingroup
\pgfmathsetcount\c@pgfmath@counta{abs(int(#1))}%
\ifodd\c@pgfmath@counta
\def\pgfmathresult{1}%
\else
\def\pgfmathresult{0}%
\fi
\pgfmath@smuggleone\pgfmathresult
\endgroup}
\pgfmathdeclarefunction{iseven}{1}{%
\begingroup
\pgfmathsetcount\c@pgfmath@counta{abs(int(#1))}%
\ifodd\c@pgfmath@counta
\def\pgfmathresult{0}%
\else
\def\pgfmathresult{1}%
\fi
\pgfmath@smuggleone\pgfmathresult
\endgroup}
\endinput