% Elementare Zahlentheorie --- An exercise in Plain TeX
% $Id: ezt-braindump.tex,v 1.6 2024/02/05 11:23:03 oj14ozun Exp $
% https://wwwcip.cs.fau.de/~oj14ozun/src+etc/ezt-braindump.tex

% (Springe ganz an das Ende der Datei für den eigentlichen Inhalt)

% \tracingall

\newif\ifmitloesungen           %Berechne Lösungen?
\mitloesungentrue

\newif\iffranz                  %Französische Überschrift?
\franzfalse

\input amstex                   %we need this to...
\loadmsbm                       %load blackboard fonts

\font\ueberschrift=cmssbx17
\font\unterschrift=cmcsc10
\font\loesungsschrift=cmss10

\def\modeq#1#2#3{#1 \equiv #2 \mod{#3}}
\def\uu#1{\underline{\underline{#1}}}

\newcount\aufgaben
\def\aufgabe{
\vskip 0.25cm
\filbreak
\advance \aufgaben by 1
\noindent{\bf{}Aufgabe \the\aufgaben}
\par\noindent
}

\newcount\d
\newcount\n
\newcount\q
\newcount\r
\newcount\a
\newcount\b
\newcount\c
\newcount\s
\newcount\t
\newcount\x
\newcount\y
\newcount\z
\newcount\e
\newcount\i
\newcount\ii
\newcount\m
\newcount\summe
\newcount\produkt
\newcount\iseq
\newtoks\str

\def\kopf#1{
\noindent\hrulefill{}
\vskip 0.25cm
\centerline{
\unterschrift Ged\"achnisprotokoll der Klausur vom #1
\ifmitloesungen
--- mit autoge-\TeX'en L\"osungen!
\fi
}
\vskip 0.5cm
\iffranz
\centerline{
\ueberschrift
T\,H\,\'E\,O\,R\,I\,E
\;
\'E\,L\,\'E\,M\,E\,N\,T\,A\,I\,R\,E
\;
D\,E\,S
\;
N\,O\,M\,B\,R\,E\,S
}
\centerline{(Dt.:\ \it Elementare Zahlentheorie)}
\else
\centerline{
\ueberschrift
E\,L\,E\,M\,E\,N\,T\,A\,R\,E
\enspace
Z\,A\,H\,L\,E\,N\,T\,H\,E\,O\,R\,I\,E
}
\fi
\vskip 0.5cm
{\it Wie immer:} Keine Garantie auf Richtigkeit.  Angaben sollten mehr
oder weniger passen.  Fehler und Verbesserungen an
die FSI-Informatik Melden: {\tt fsi\@cs.fau.de}.  Der Quelltext sollte
im PDF-Anhang sein.

{\it Allgemeine Informationen:} Die meisten Taschenrechner ``Teilen
mit Rest'' ($\div \roman{R}$), Primfaktorzerlegung ({\tt FACT}, auf
Casio-Ger\"aten), und ggT ({\tt GCD}) berechnen k\"onnen, auf wenn
nicht programmierbar.  Gegebenenfalls ist es notwendig sein eigenes
Papier in die Klausur zu nehmen.  {\bf Alle Antworten sollten in Form
eines Antwortsatzes sein.}  Die Klausur dauert 60 Minuten, und sollte
in N\"urnberg stattfinden.

\noindent\hrulefill{}
}

\newif\iftracediv
\def\divmod#1#2{
  \n = #1
  \d = #2

  \ifnum #2 = 0
    \errmessage{Division by zero}
  \fi

  % division by repeated subtraction
  \iftracediv \item{$\bullet$} ${\the\n} \div {\the\d}$ \fi
  \r = \n
  \q = 0
  \loop
      \e = \d
      \advance \e by -1         %we need this for >= instead of >
    \ifnum \r > \e
      \advance \r by -\d
      \advance \q by 1
  \repeat
  \iftracediv ist ${\the\q}\;\slanted{R}\;{\the\r}$. \fi
}

\def\euclid#1#2{
\a = #1
\b = #2

\loop
\ifnum \b > 0
{
  \divmod{\a}{\b}
  \global \a = \b
  \global \b = \r
}
\repeat
\iftracediv\item{$\bullet$} $\the\a \div 0$ terminiert.\fi
}

\def\ggt#1#2{\aufgabe Berechnen Sie den gr\"o{\ss}ten gemeinsamem
Teiler der Zahlen #1 und #2 mit Hilfe des Euklidischen Algorithmus.

\ifmitloesungen
{\loesungsschrift
Die Rechenschritte sind:
\tracedivtrue
\euclid{#1}{#2}
\tracedivfalse

L\"osung ist das Letzte $a_i$ wo $b_i = 0$, d.h.\ $\uu{\the\a}$.
}
\fi
}

\newif\iftraceeuclid
\def\eeuclid#1#2{
  % https://en.wikipedia.org/wiki/extended_euclidean_algorithm#pseudocode
  \x=#1 \r=#2
  \y=1  \s=0
  \z=0  \t=1

  \iftraceeuclid
    \item{$\bullet$}
    $r  = \the\r$,
    $r' = \the\x$,
    $s  = \the\s$,
    $s' = \the\y$,
    $t  = \the\t$,
    $t' = \the\z$
  \fi
  \loop
  \iseq=0
  \ifnum \r=0 \iseq=1 \fi
  \ifnum \iseq = 0
  {
    {
      \divmod{\x}{\r}
      \global\q=\q
    }
    % (old_r, r) := (r, old_r − quotient × r)
    \summe     = \x
    \produkt   = \q
    \multiply  \produkt by -\r
    \advance   \summe     by \produkt
    \global \x = \r
    \global \r = \summe
    % (old_s, s) := (s, old_s − quotient × s)
    \summe     = \y
    \produkt   = \q
    \multiply  \produkt by -\s
    \advance   \summe     by \produkt
    \global \y = \s
    \global \s = \summe
    % (old_t, t) := (t, old_t − quotient × t)
    \summe     = \z
    \produkt   = \q
    \multiply  \produkt by -\t
    \advance   \summe by \produkt
    \global \z = \t
    \global \t = \summe
    \iftraceeuclid
      \item{$\bullet$}
      $r  = \the\r$,
      $r' = \the\x$,
      $s  = \the\s$,
      $s' = \the\y$,
      $t  = \the\t$,
      $t' = \the\z$
    \fi
  }
  \repeat
}

\def\inverse#1#2{
  \eeuclid{#1}{#2}
  \i=\z
  \ifnum \i < 0
    \loop
    \ifnum \i < 0
      \advance \i by #1
    \repeat
  \fi
  \ifnum \i > #1
    \loop
    \ifnum \i > #1
      \advance \i by -#1
      \message{(\the\i, #1)}
    \repeat
  \fi
  \global\i=\i
  \global\ii=\z
}

\def\repr#1#2{\aufgabe Bestimmen Sie den Repr\"asentanten $1 \leq x
< #1$ des Inversen $\overline{#2}^{-1} \in {\Bbb Z}/#1{\Bbb Z}$.
\ifmitloesungen
{\loesungsschrift

Man benutzt den Erweiterten Euklidischen Algorithmus (iterativ)
auf $(a, b) = (#1, #2)$ um die Parameter $x$ und $y$ zu finden, mit
denen $xa + yb = \roman{ggT}(a, b)$ gilt:

\traceeuclidtrue
\inverse{#1}{#2}
\traceeuclidfalse

Wir m\"ussen sicherstellen, dass das Ergebnis im gefordertem Intervall liegt
$$\modeq{\the\ii}{\the\i}{#1}.$$

Die Inverse von $\overline{#2}^{-1}$ in ${\Bbb Z}/#1{\Bbb Z}$ ist
demnach $\uu{\the\i}$.  Mit dem Taschenrechner kann man \"uberpr\"ufen
ob
\e = \i
\multiply \e by #2
$$\modeq{\the\i \cdot #2 = \the\e}{1}{#1}.$$
}
\fi
}

\def\sam#1#2#3{
\c=1
\b=#1
\e=#2
\i=0
\item{$\bullet$} $c_{\the\i} = \the\c, e_{\the\i} = \the\e, b_{\the\i} = \the\b$
\loop
\ifodd \e
{
\multiply \c by \b
\divmod{\c}{#3}
\global\c=\r
}
\fi
\divide \e by 2
{
\multiply \b by \b
\divmod{\b}{#3}
\global\b=\r
}
\advance \i by 1
\item{$\bullet$} $c_{\the\i} = \the\c, e_{\the\i} = \the\e, b_{\the\i} = \the\b$
\ifnum \e > 0
\repeat
}

\def\rest#1#2#3{
\aufgabe Welchen Rest hat $#1^{#2}$ bei Division durch
#3?
\ifmitloesungen
{\loesungsschrift

Die Aufgabe kann mit dem Euler-Theorem und der Euler'schen
$\varphi$-Funktion gel\"ost werden, oder mit dem ``Square and
Multiply'' Algorithmus,
$$\eqalign{
c_{n+1} &= \hbox{\bf if}\;e_n\;\hbox{ungerade}\;\hbox{\bf then}\; (c_n
b_n) \bmod m\;\hbox{\bf else}\;c_n,\cr
e_{n+1} &= \left\lfloor\frac{e_n}{2}\right\rfloor,\cr
b_{n+1} &= b_n^2 \bmod m,}\;$$
wo $c_0 = 1$, $e_0 = #2$, $b_0 = #1$ und $m = #3$.

Dieses wird iteriert, bis ein $i$ erreicht wird, wo $e_i = 0$ gilt:
\sam{#1}{#2}{#3}

Das Endergebnis ist demnach das $c_i$ der letzten Iteration $\uu{\the\c}$.
} \fi }

\def\crs#1#2#3#4#5#6{
\aufgabe Bestimmen Sie die L\"osungsmenge des
Gleichungssystem $$\modeq{x}{#1}{#2} \qquad \modeq{x}{#3}{#4} \qquad
\modeq{x}{#5}{#6}.$$
\ifmitloesungen
{\loesungsschrift

Gegeben sind die Parameter $(a_1, a_2, a_3) = (#1, #3, #5)$ und $(m_1,
m_2, m_3) = (#2, #4, #6)$.  Wir m\"ussen zun\"achst die
Zwischenparameter des Chinesischen Restsatzes berechnen:

\m = #2
\multiply \m by #4
\multiply \m by #6

\summe = 0

\produkt = #4
\multiply \produkt by #6
\item{$\bullet$} $q_1 = {\prod_{i=1}^3 m_i \over m_1} = #4 \cdot #6 = \the\produkt$
{
\inverse{#2}{\produkt}
\item{$\bullet$} $q_1^{-1} = \the\i$ bez\"uglich ${\Bbb Z}/#2{\Bbb Z}$
}
\multiply \produkt by \i
\multiply \produkt by #1
\advance \summe by \produkt

\produkt = #2
\multiply \produkt by #6
\item{$\bullet$} $q_2 = {\prod_{i=1}^3 m_i \over m_2} = #2 \cdot #6 = \the\produkt$
{
\inverse{#4}{\produkt}
\item{$\bullet$} $q_2^{-1} = \the\i$ bez\"uglich ${\Bbb Z}/#4{\Bbb Z}$
}
\multiply \produkt by \i
\multiply \produkt by #3
\advance \summe by \produkt

\produkt = #2
\multiply \produkt by #4
\item{$\bullet$} $q_3 = {\prod_{i=1}^3 m_i \over m_3} = #2 \cdot #4 = \the\produkt$
{
\inverse{#6}{\produkt}
\item{$\bullet$} $q_3^{-1} = \the\i$ bez\"uglich ${\Bbb Z}/#6{\Bbb Z}$
}
\multiply \produkt by \i
\multiply \produkt by #5
\advance \summe by \produkt

Es ist zu pr\"ufen ob jedes $(q_i, m_i)$ paarweise Teilerfremd sind
(trivial wenn alle $m_i$ verschiedene Primzahlen sind).

Eine L\"osung berechnet sich aus
\divmod{\summe}{\m}
$$x = \sum_{i=1}^3 a_iq_iq_i^{-1} = \modeq{\the\summe}{\the\r}{\the\m}$$
und daraus kann man die L\"osungsmenge
$${\Bbb L} = \left\{x \;\vert\; \modeq{x}{\uu{\the\r}}{\the\m} \right\}$$
bestimmen.
}
\fi
}

\def\bruch#1#2{\aufgabe Begr\"unden Sie, warum der Bruch $#1 \over #2$
eine endliche, reinperiodische oder gemischtperiodische
Dezimalbruchentwicklung hat.
\ifmitloesungen
{\loesungsschrift

Es ist als erstes notwendig den Bruch zu k\"urzen, indem man
{
\euclid{#1}{#2}
$$
\roman{ggT}(#1, #2) = \the\a
$$
berechnet, und damit dann
\x = #1 \divide \x by \a
\y = #2 \divide \y by \a
$$
{#1 \over #2} = {#1 / \the\a \over #2 / \the\a} = {\the\x \over \the\y}
$$
vereinfachen kann (das kann alles auch der Taschenrechner direkt f\"ur
einen machen).

Man betrachte den Nenner, und pr\"uft ob dieser dargestellt werden
kann durch die spezifische Primzahlendekomposition $\the\y = 2^i 5^j$,
f\"ur $i, j \in {\Bbb N}$?

\s = 0
\t = 0
\x = \y
\loop
    \divmod{\y}{2}
  \ifnum \r = 0
    \y = \q
    $\to_{\div 2} \the\y$
    \advance \s by 1
\repeat
\loop
    \divmod{\y}{5}
  \ifnum \r = 0
    \y = \q
    $\to_{\div 5} \the\y$
    \advance \t by 1
\repeat

\ifnum \y = 1
  Ja, der Nenner ist darstellbar durch die Primzahlendekomposition
  $2^{\the\s} 5 ^{\the\t}$.  Wir k\"onnen daraus schlie{\ss}en, der
  Bruch hat eine endliche BDE.
\else
  Nein, der Nenner ist darstellbar durch die Primzahlendekomposition.
  Als n\"achstes berechnen wir
  \euclid{\x}{10}
  $$\roman{ggT}(\the\x, 10) = \the\r$$
  \ifnum \r = 1
    Da der $\roman{ggT}$ gleich 1 ist, k\"onnen wir daraus
    schlie{\ss}en, der  Bruch eine rein-periodische BDE hat.
  \else
    Da der $\roman{ggT}$ nicht gleich 1 ist, k\"onnen wir daraus
    schlie{\ss}en, der  Bruch eine gemischt-periodische BDE hat.
  \fi
\fi
}
}
\fi
}

% From https://tex.stackexchange.com/questions/36034
\def\reverse #1%
  {\edef #1{\expandafter \reverseloop #1\relax \marker }}
\def\reverseloop #1#2\marker
  {\ifx#1\relax\reverseend\fi \reverseloop #2\marker #1}
\def\reverseend #1\marker #2{}

\def\basis#1#2{\aufgabe Bestimmen Sie die Darstellung der Zahl #1 zur
Basis #2.
\ifmitloesungen
{\loesungsschrift

Um die Darstellung der Zahl zur Basis #2 zu bestimmen, teilen wir #1
iterativ bis nichts mehr \"ubrig bleibt und merken uns die Restwerte:
\tracedivtrue
\q = #1
\str = {}
\loop
  {
    \divmod{\q}{#2}
    \global\q = \q
    \global\r = \r
  }
  \ifcase\r
    \str=\expandafter{\the\str 0}\or
    \str=\expandafter{\the\str 1}\or
    \str=\expandafter{\the\str 2}\or
    \str=\expandafter{\the\str 3}\or
    \str=\expandafter{\the\str 4}\or
    \str=\expandafter{\the\str 5}\or
    \str=\expandafter{\the\str 6}\or
    \str=\expandafter{\the\str 7}\or
    \str=\expandafter{\the\str 8}\or
    \str=\expandafter{\the\str 9}\or
    \str=\expandafter{\the\str a}\or
    \str=\expandafter{\the\str b}\or
    \str=\expandafter{\the\str c}\or
    \str=\expandafter{\the\str d}\or
    \str=\expandafter{\the\str e}\or
    \str=\expandafter{\the\str f}\else
    \errmessage{Radix overflow}
  \fi
\ifnum 0 < \q
\repeat
\tracedivfalse

\edef\result{\the\str}
\reverse\result

In dem man die Reste von unten nach oben durchlie{\ss}t, k\"onnen wir
das Endergebnis $\uu{\result_{(#2)}}$ bestimmen.

}
\fi
}

% Hier steht der Inhalt der Klausur, und nur hier muss man etwas
% anpassen wenn man einen neuen Braindump schreiben will:
\kopf{2024-02-01}

\ggt{47753}{89787}
\repr{356}{47}
\rest{9}{322}{11}
\crs{2}{13}{3}{11}{3}{7}
\bruch{1980}{3315}
\basis{423}{5}

\bye

%%% Local Variables:
%%% mode: plain-tex
%%% TeX-engine: xetex
%%% TeX-master: t
%%% End:
