print " ", x, "&" , y , "&" , k, "&" , k%2, "\\\\"
print "\\end{array}"
return y
-
-
\aufgabe{25}
{$p=2^{43112609}-1$ ist die zur Zeit größte bekannte Primzahl. Wie kann man ihre Stellenanzahl am einfachsten berechnen und was sind ihre $3$ Endziffern?}
-
+Die Anzahl der Stellen einer Zahl können mit $\log_{10}$ berechnet werden. Daher ist $\log_{10} 2^{43112609} = 43112609\cdot\log_{10} 2 \approx 12978188.5003$\\
+Für die letzten 3 Stellen berechnet man nun:
\begin{align}
2^{43112609} \in (\Z_{1000}, * \mod 1000, 1) \text{, d.h. }x=2, k=43112609
\end{align}
\begin{align}
p=2^{43112609} \mod 1000 &\equiv 512 \Rightarrow 2^{43112609}-1 \mod 1000 \equiv 511
\end{align}
+\newpage\noindent
+Oder aber man Überlegt sich vorher eine Sinnvolle Zerlegung des Exponenten und Verkürzt so den SM Algorithmus:\\
+Die letzten drei Ziffern entsprechen $2^{43112609} -1 \mod 1000$. Mithilfe von $\varphi(1000) = 400$ lässt sich nun der Exponent zerlegen.
+\begin{align}
+43112609 &= \alpha 400 + \beta\\
+&= 107781\cdot 400 + 209\\
+\end{align}
+Da aber $a^{\varphi(n)}\equiv1\mod n$ ist, gilt:
+\begin{align}
+ 2^{43112609} -1 \mod 1000&=2^{107781\cdot 400 + 209} -1 \mod 1000\\
+ &=2^{209} -1 \mod 1000
+\end{align}
+$2^{209}-1 \mod 1000$ lässt sich nun einfach mit dem Square and Multiply Algorithmus berechnen:
+\begin{center}
+$\begin{python}
+import lib
+lib.sqmult_tex(2,209,lambda x,y:(x*y)%1000,1)
+\end{python}$
+\end{center}
+Daraus Folgt nun
+\begin{align}
+ p=2^{209} \mod 1000 &\equiv 512 \Rightarrow 2^{43112609}-1 \mod 1000 \equiv 511
+\end{align}
\aufgabe{26}