the great dependence in terms of time (it has to be fast) and space (small number of per-thread variables), we find Multiply-With-Carry (MWC) [@Marsaglia:2003:RNG] ideal in both aspects. Its state is only $64$ bits, and obtaining a new number amounts to compute $x_{n+1} = (x_n \times a + c_n)\bmod{b}$, where $a$ is the multiplier, $b$ is the base, and $c_n$ is the carry from previous modulus operation. We took the implementation from the CUDAMCML package [@cudamcml_rng] that fixes $b=2^{32}$ in order to use bit masks for modulus computation.

For independent random number sequences, MWC uses different multipliers, and they have to be *good* in the following sense: $a\times b-1$ should be a safeprime, where $p$ is a safeprime if both $p$ and $(p-1)/2$ are primes. Having fixed $b=2^{32}$, the process of obtaining safe primes boils down to test for primality of two numbers $\mathit{goodmult}(a) \equiv \mathit{prime}(a\times 2^{32}-1) \land \mathit{prime}((a\times 2^{32}-2)/2)$. It is important to remark that the nearer to $2^{32}$ is $a$ the longer the period of the MWC (for $a$ close to its maximum, the period is near to $2^{64}$), therefore it is always advisable to start looking for $\mathit{goodmult}$ down from $2^{32}-1$.

We limit the amount of independent 