export const createMWC = (a, b, r) => { const xi = new Array(r + 1) const ci = new Array (r + 1) let n0 = 0 let nr = r let xn = 0 let cn = 0 return { init (seeds) { for (let k = 0; k < (r + 1); k++) { xi[k] = seeds[k] ci[k] = b - seeds[k] } }, next() { let result = new Array (r + 1) xn = (a * xi[nr] + ci[n0]) % b cn = Math.floor((a * xi[nr] + ci[n0]) / b) xi[n0] = xn ci[n0] = cn //console.log(xi) n0 = (n0 + 1) % (r + 1) nr = (nr + 1) % (r + 1) for(let t = 0; t < r + 1; t++) { //result[t] = xi[t] % b result[(t + n0) % (r + 1)] = xi[t] } return result } } }