|
@@ -10,7 +10,7 @@ can somehow be assembled, and so a fatorization of N attemped.
|
|
|
%% understood this section without Firas (thanks).
|
|
|
%% <http://blog.fkraiem.org/2013/12/08/factoring-integers-dixons-algorithm/>
|
|
|
%% I kept the voila` phrase, that was so lovely.
|
|
|
-\section{A little bit of History \label{sec:dixon:history}}
|
|
|
+\section{Interlude \label{sec:dixon:history}}
|
|
|
During the latest century there has been a huge effort to approach the problem
|
|
|
formulated by Fermat ~\ref{eq:fermat_problem} from different perspecives. This
|
|
|
led to an entire family of algorithms, like \emph{Quadratic Sieve},
|
|
@@ -173,7 +173,7 @@ and storing dependencies into a \emph{history matrix} $\mathcal{H}$.
|
|
|
\end{algorithm}
|
|
|
|
|
|
|
|
|
-\section{Implementation}
|
|
|
+\section{An Implementation Perspective}
|
|
|
|
|
|
Before gluing all toghether, we need one last building brick necessary for
|
|
|
Dixon's factorization algorithm: a \texttt{smooth}($x$) function. In our
|
|
@@ -181,7 +181,16 @@ specific case, we need a function that, given as input a number $x$, returns the
|
|
|
empty set $\emptyset$ if $x^2 -N$ is not $\factorBase$-smooth. Otherwise,
|
|
|
returns a vector $v = (\alpha_0, \ldots, \alpha_r)$ such that each $\alpha_j$ is
|
|
|
defined just as in \ref{eq:dixon:alphas}. Once we have established $\factorBase$, its
|
|
|
-implementation is fairly straightforward:
|
|
|
+implementation comes straightfoward.
|
|
|
+
|
|
|
+\paragraph{How do we choose $\factorBase$?}
|
|
|
+It's not easy to answer: if we choose $\factorBase$ small, we will rarely find
|
|
|
+$x^2 -N$ \emph{smooth}. If we chose it large, attempting to factorize $x^2 -N$
|
|
|
+with $\factorBase$ will pay the price of iterating through a large set.
|
|
|
+\cite{Crandall} \S 6.1 finds a solution for this employng complex analytic
|
|
|
+number theory. As a result, the ideal value for $|\factorBase|$ is
|
|
|
+$e^{\sqrt{\ln N \ln \ln N}}$.
|
|
|
+
|
|
|
|
|
|
\begin{algorithm}
|
|
|
\caption{Discovering Smoothness}
|
|
@@ -204,13 +213,6 @@ implementation is fairly straightforward:
|
|
|
\EndProcedure
|
|
|
\end{algorithmic}
|
|
|
\end{algorithm}
|
|
|
-\paragraph{How do we choose $\factorBase$?}
|
|
|
-It's not easy to answer: if we choose $\factorBase$ small, we will rarely find
|
|
|
-$x^2 -N$ \emph{smooth}. If we chose it large, attempting to factorize $x^2 -N$
|
|
|
-with $\factorBase$ will pay the price of iterating through a large set.
|
|
|
-\cite{Crandall} \S 6.1 finds a solution for this employng complex analytic
|
|
|
-number theory. As a result, the ideal value for $|\factorBase|$ is
|
|
|
-$e^{\sqrt{\ln N \ln \ln N}}$.
|
|
|
|
|
|
\begin{algorithm}
|
|
|
\caption{Dixon}
|
|
@@ -243,6 +245,26 @@ $e^{\sqrt{\ln N \ln \ln N}}$.
|
|
|
\end{algorithmic}
|
|
|
\end{algorithm}
|
|
|
|
|
|
+\paragraph{Parallelization}
|
|
|
+
|
|
|
+Dixon's factorization is ideally suited to parallel implementation. Similarly to
|
|
|
+other methods like ECM and MPQS, treated in \cite{brent:parallel} \S 6.1,
|
|
|
+we can \emph{linearly} improve the running time by distributing across many
|
|
|
+nodes the discovery of $\factorBase$-smooth numbers.
|
|
|
+
|
|
|
+Depending on the granularity we desire - and the number of nodes available, we
|
|
|
+can even act on the \texttt{ker} function - but less easily.
|
|
|
+This idea would boil down to the same structure we discussed with Wiener's attack:
|
|
|
+one node - the \emph{producer} - discovers linear dependencies, while the others
|
|
|
+- the \emph{consumers} - attempt to factorize $N$.
|
|
|
+For this reason that we introduced the \texttt{yield} statement in line
|
|
|
+$12$ of algorithm \ref{alg:dixon:kernel}: the two jobs can be performed
|
|
|
+asynchronously.
|
|
|
+
|
|
|
+Certainly, due to the probabilistic nature of this algorithm, we can even think
|
|
|
+aboutrunning multiple instances of the same program. This solution is fairly
|
|
|
+effective in proportion to the development cost.
|
|
|
+
|
|
|
%%% Local Variables:
|
|
|
%%% mode: latex
|
|
|
%%% TeX-master: "question_authority"
|