fork download
  1. def count(beta, m, a0, n)
  2. f = lambda { |x| (beta * x) % m }
  3.  
  4. ar = [a0]
  5. (n - 1).times { ar << f[ar.last] }
  6. ar = ar.map { |e| e / m.to_f }
  7.  
  8. p ar
  9.  
  10. m = ar.inject(0, :+) / n.to_f
  11. d = ar.inject(0) { |r, e| r + (e - m) ** 2 } / (n - 1)
  12. [m, d]
  13. end
  14.  
  15. #beta, m, a0, n = (1..4).map { gets.to_i }
  16. beta, m, a0, n = 2 ** 16 + 3, 2 ** 31, 1, 10
  17.  
  18. m, d = count(beta, m, a0, n)
  19.  
  20. puts "average: #{m}"
  21. puts "dispersion: #{d}"
Success #stdin #stdout 0s 4760KB
stdin
Standard input is empty
stdout
[4.656612873077393e-10, 3.051897510886192e-05, 0.00018310965970158577, 0.0008239871822297573, 0.003295936156064272, 0.012359732296317816, 0.04449496837332845, 0.15573221957311034, 0.533938602078706, 0.8020416363142431]
average: 0.15529007110744714
dispersion: 0.07928975792695063