The algorithm attempts to set up a congruence of squares modulo "n" (the integer to be factorized), which often leads to a factorization of "n". The algorithm works in two phases: the "data collection" phase, where it collects information that may lead to a congruence of squares; and the "data processing" phase, where it puts all the data it has collected into a matrix and solves it to obtain a congruence of squares. The data collection phase can be easily parallelized to many processors, but the data processing phase requires large amounts of memory, and is difficult to parallelize efficiently over many nodes or if the processing nodes do not each have enough memory to store the whole matrix. The block Wiedemann algorithm can be used in the case of a few systems each capable of holding the matrix.