def count(beta, m, a0, n)
f = lambda { |x| (beta * x) % m }
ar = [a0]
(n - 1).times { ar << f[ar.last] }
p ar
m = ar.inject(0, :+) / n.to_f
d = ar.inject(0) { |r, e| r + (e - m) ** 2 } / (n - 1)
[m, d]
end
#beta, m, a0, n = (1..4).map { gets.to_i }
beta, m, a0, n = 2 ** 16 + 3, 2 ** 31, 1, 10
m, d = count(beta, m, a0, n)
puts "average: #{m}"
puts "dispersion: #{d}"
ZGVmIGNvdW50KGJldGEsIG0sIGEwLCBuKQogIGYgPSBsYW1iZGEgeyB8eHwgKGJldGEgKiB4KSAlIG0gfQoKICBhciA9IFthMF0KICAobiAtIDEpLnRpbWVzIHsgYXIgPDwgZlthci5sYXN0XSB9CgogIHAgYXIKICAKICBtID0gYXIuaW5qZWN0KDAsIDorKSAvIG4udG9fZgogIGQgPSBhci5pbmplY3QoMCkgeyB8ciwgZXwgciArIChlIC0gbSkgKiogMiB9IC8gKG4gLSAxKQogIFttLCBkXQplbmQKCiNiZXRhLCBtLCBhMCwgbiA9ICgxLi40KS5tYXAgeyBnZXRzLnRvX2kgfQpiZXRhLCBtLCBhMCwgbiA9IDIgKiogMTYgKyAzLCAyICoqIDMxLCAxLCAxMAoKbSwgZCA9IGNvdW50KGJldGEsIG0sIGEwLCBuKQoKcHV0cyAiYXZlcmFnZTogI3ttfSIKcHV0cyAiZGlzcGVyc2lvbjogI3tkfSI=
[1, 65539, 393225, 1769499, 7077969, 26542323, 95552217, 334432395, 1146624417, 1722371299]
average: 333482888.4
dispersion: 365659468036210370.0