summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/tkz-base/tkz-tools-arith.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/tkz-base/tkz-tools-arith.tex')
-rw-r--r--Master/texmf-dist/tex/latex/tkz-base/tkz-tools-arith.tex212
1 files changed, 212 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tkz-base/tkz-tools-arith.tex b/Master/texmf-dist/tex/latex/tkz-base/tkz-tools-arith.tex
new file mode 100644
index 00000000000..8c087c45479
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/tkz-base/tkz-tools-arith.tex
@@ -0,0 +1,212 @@
+% Copyright 2011 by Alain Matthes
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+
+
+\def\fileversion{1.16 c}
+\def\filedate{2011/06/01}
+
+
+%<--------------------------------------------------------------------------–>
+% Objet : tools for arithmetic
+%<--------------------------------------------------------------------------–>
+% [About integers numbers]
+%<--------------------------------------------------------------------------–>
+\ProvidesFile{tkz-tool-arith.tex}[tkz-tool-arith 1.13 c]
+\edef\tkzAtCode{\the\catcode`\@}
+\catcode`\@=11\relax
+%<--------------------------------------------------------------------------–>
+% arithmetic tools
+%<--------------------------------------------------------------------------–>
+
+\tkzutil@ifundefined{pgfmath@function@gcd}{%
+\pgfmathdeclarefunction{gcd}{2}{%
+ \begingroup%
+ \pgfmathcontinuelooptrue
+ \pgfmath@xa=#1pt\relax%
+ \pgfmath@xb=#2pt\relax%
+ \ifdim\pgfmath@xa=0pt \pgfmathcontinueloopfalse
+ \pgfmath@xa=\pgfmath@xb
+ \fi
+ \ifdim\pgfmath@xb=0pt \pgfmathcontinueloopfalse
+ \pgfmath@xb=\pgfmath@xa
+ \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
+ \edef\pgfmathresult{\pgfmath@tonumber{\pgfmath@xa}}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+}{}
+%<--------------------------------------------------------------------------->
+
+\tkzutil@ifundefined{pgfmath@function@isprime}{%
+\newif\ifpgf@unknown
+\newif\ifpgf@isaprime
+\pgfmathdeclarefunction{isprime}{1}{%
+ \begingroup%
+\pgf@unknowntrue
+\c@pgfmath@counta#1\relax%
+ \ifcase#1\relax
+ % |#1| = 0
+ \pgf@isaprimefalse\pgf@unknownfalse
+ \or
+ % |#1| = 1
+ \pgf@isaprimefalse\pgf@unknownfalse
+ \or
+% |#1| = 2
+ \pgf@isaprimetrue\pgf@unknownfalse
+ \or
+% |#1| = 3
+ \pgf@isaprimetrue\pgf@unknownfalse
+ \else
+ % |#1| > 3
+ \ifodd#1\relax
+ \else
+ \pgf@isaprimefalse\pgf@unknownfalse
+ \fi
+ \fi
+\ifpgf@unknown
+\c@pgfmath@countd=\thr@@ \pgf@isaprimetrue
+ \loop
+ \c@pgfmath@countb=\c@pgfmath@counta
+ \divide\c@pgfmath@countb by\c@pgfmath@countd
+ \ifnum\c@pgfmath@countb>\c@pgfmath@countd \pgf@unknowntrue
+ \else\pgf@unknownfalse\fi
+ \multiply\c@pgfmath@countb by\c@pgfmath@countd
+ \ifnum\c@pgfmath@countb=\c@pgfmath@counta
+ \global\pgf@isaprimefalse\pgf@unknownfalse\fi
+ \ifpgf@unknown\advance\c@pgfmath@countd by 2\relax%
+ \repeat
+\fi
+\ifpgf@isaprime
+ \def\pgfmathresult{1}%
+\else
+ \def\pgfmathresult{0}%
+\fi
+ \pgfmath@smuggleone\pgfmathresult%
+\endgroup
+}}{}
+%<--------------------------------------------------------------------------->
+\tkzutil@ifundefined{pgfmath@function@isodd}{%
+\pgfmathdeclarefunction{isodd}{1}{%
+\begingroup
+\ifodd #1 \def\pgfmathresult{1}%
+\else\def\pgfmathresult{0}%
+\fi
+ \pgfmath@smuggleone\pgfmathresult%
+\endgroup}
+}{}
+%<--------------------------------------------------------------------------->
+\pgfmathdeclarefunction{isfactor}{2}{%
+\begingroup
+\c@pgfmath@counta#1\relax%
+\c@pgfmath@countb#2\relax%
+\c@pgfmath@countc#1\relax%
+\divide\c@pgfmath@counta by\c@pgfmath@countb%
+\multiply\c@pgfmath@counta by\c@pgfmath@countb%
+\advance\c@pgfmath@countc by-\c@pgfmath@counta%
+\ifnum\c@pgfmath@countc=0 \def\pgfmathresult{1}%
+\else
+ \def\pgfmathresult{0}%
+ \fi
+\pgfmath@smuggleone\pgfmathresult%
+\endgroup}
+%<--------------------------------------------------------------------------->
+\def\tkzfactors#1{%
+\begingroup
+\c@pgfmath@countb#1
+\pgfmathisprime{\c@pgfmath@countb}%
+\ifnum\pgfmathresult=1
+ \number\c@pgfmath@countb\ % prime number
+\else% we can found factors
+\tkz@factors{#1}
+\fi
+\endgroup}%
+%<--------------------------------------------------------------------------–>
+\def\tkz@factors#1{%
+\begingroup
+\c@pgfmath@countb#1
+\c@pgfmath@countd2\relax
+ \loop
+ \ifodd\c@pgfmath@countb\relax%
+ \else
+ \divide\c@pgfmath@countb by2 %
+ \number\c@pgfmath@countd\ %
+ \repeat%
+%%%%%%%%%%%%%%
+\def\tkzprim@last{1}%
+\loop% first loop
+ \ifnum\c@pgfmath@countb>1\relax
+ \c@pgfmath@countd\tkzprim@last\relax
+ \c@pgfmath@countc1\relax
+%%%%%%%%%%%%%%
+\tkz@find@last
+%%%%%%%%%%%%%%
+ \divide\c@pgfmath@countb by\c@pgfmath@countd\relax
+ \number\c@pgfmath@countd\ % affiche le facteur
+\repeat% end first loop
+%%%%%%%%%%%%%%
+\endgroup%
+}%
+%<--------------------------------------------------------------------------->
+\def\tkz@find@last{%
+ \ifnum\c@pgfmath@countc>\z@
+ \edef\tkzprim@last{\the\c@pgfmath@countd}%
+ \advance\c@pgfmath@countd by2\relax% begins with 3
+ \c@pgfmath@counta\c@pgfmath@countb% macro mod !!
+ \c@pgfmath@countc\c@pgfmath@counta%
+ \divide\c@pgfmath@counta by\c@pgfmath@countd
+ \multiply\c@pgfmath@counta by\c@pgfmath@countd
+ \advance\c@pgfmath@countc by-\c@pgfmath@counta
+ \let\tkz@find@next=\tkz@find@last
+ \else
+ \let\tkz@find@next=\relax%
+ \fi
+ \tkz@find@next
+}%
+%<--------------------------------------------------------------------------->
+%<--------------------------------------------------------------------------->
+\def\tkzReducFrac#1#2{%
+\begingroup
+\ifnum#1<0\relax%
+ \c@pgfmath@counta=0\relax
+ \advance\c@pgfmath@counta by-#1
+ \else
+ \c@pgfmath@counta#1
+ \fi
+ \c@pgfmath@countb#2
+ \pgfmathgcd{\c@pgfmath@counta}{\c@pgfmath@countb}%
+ \pgfmathsetcount\c@pgfmath@countc{\pgfmathresult}
+ \ifnum\c@pgfmath@counta=0\relax
+ \c@pgfmath@counta#1
+ \c@pgfmath@countb#2
+ \else
+ \c@pgfmath@counta#1
+ \c@pgfmath@countb#2
+ \divide\c@pgfmath@counta by\c@pgfmath@countc%
+ \divide\c@pgfmath@countb by\c@pgfmath@countc%
+ \fi
+\global\edef\tkzMathFirstResult{\the\c@pgfmath@counta}
+\global\edef\tkzMathSecondResult{\the\c@pgfmath@countb}
+\endgroup}
+%<--------------------------------------------------------------------------->
+%<--------------------------------------------------------------------------->
+%<--------------------------------------------------------------------------->
+
+\catcode`\@=\tkzAtCode\relax
+\endinput
+
+