Introduction
Introduction Statistics Contact Development Disclaimer Help
Add exercise: [05] Fast primality test - libzahl - big integer library
git clone git://git.suckless.org/libzahl
Log
Files
Refs
README
LICENSE
---
commit ccc36c882dc899ce75e41c7675ce48263ad24bfa
parent 555b57b3190c2ed6f73970c0515ac77dc4087220
Author: Mattias Andrée <[email protected]>
Date: Sun, 24 Jul 2016 03:58:08 +0200
Add exercise: [05] Fast primality test
Signed-off-by: Mattias Andrée <[email protected]>
Diffstat:
M doc/exercises.tex | 37 +++++++++++++++++++++++++++++…
1 file changed, 37 insertions(+), 0 deletions(-)
---
diff --git a/doc/exercises.tex b/doc/exercises.tex
@@ -36,6 +36,7 @@ where $L_n$ is the $n^{\text{th}}$ Lucas Number \psecref{sec:…
}\)
+
\item {[\textit{M12${}^+$}]} \textbf{Factorisation of factorials}
Implement the function
@@ -52,6 +53,7 @@ The function shall be efficient for all $n$ where all primes …
be found efficiently. You can assume that $n \ge 2$. You should not evaluate $…
+
\item {[\textit{M20}]} \textbf{Reverse factorisation of factorials}
You should already have solved ``Factorisation of factorials''
@@ -73,6 +75,15 @@ $\displaystyle{\prod_{i = 1}^{n} P_i^{K_i}}$, where
$P_i$ is \texttt{P[i - 1]} and $K_i$ is \texttt{K[i - 1]}.
+
+\item {[\textit{05}]} \textbf{Fast primality test}
+
+$(x + y)^p \equiv x^p + y^p ~(\text{Mod}~p)$
+for all primes $p$ and for a few composites $p$.
+Use this to implement a fast primality tester.
+
+
+
\end{enumerate}
@@ -101,6 +112,7 @@ $$ 1 + \varphi = \frac{1}{\varphi} $$
So the ratio tends toward the golden ratio.
+
\item \textbf{Factorisation of factorials}
Base your implementation on
@@ -114,6 +126,7 @@ There is no need to calculate $\lfloor \log_p n \rfloor$,
you will see when $p^a > n$.
+
\item \textbf{Reverse factorisation of factorials}
$\displaystyle{x = \max_{p ~\in~ P} ~ p \cdot f(p, k_p)}$,
@@ -140,4 +153,28 @@ of $x!$. $f(p, k)$ is defined as:
+\item \textbf{Fast primality test}
+
+If we select $x = y = 1$ we get $2^p \equiv 2 ~(\text{Mod}~p)$. This gives us
+
+\vspace{-1em}
+\begin{alltt}
+enum zprimality ptest_fast(z_t p)
+\{
+ z_t a;
+ int c = zcmpu(p, 2);
+ if (c <= 0)
+ return c ? NONPRIME : PRIME;
+ zinit(a);
+ zsetu(a, 1);
+ zlsh(a, a, p);
+ zmod(a, a, p);
+ c = zcmpu(a, 2);
+ zfree(a);
+ return c ? NONPRIME : PROBABLY_PRIME;
+\}
+\end{alltt}
+
+
+
\end{enumerate}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.