You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.1 KiB
124 lines
3.1 KiB
% 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
|
|
|