#
# Middle-square satunnaislukugeneraattori
# Lasse Leskelä 2013-11-12
#
# http://en.wikipedia.org/wiki/Middle-square_method
#
# z[i] satunnaislukugeneraattorin sisäinen tila i kierroksen jälkeen
# u[i] i:s satunnaislukugeneraattorin palauttama luku välillä [0,1]
#

# Tilan päivitys
f <- function(z) {
  w <- z*z
  zNew <- (w %/% 100) %% (10000)
  zNew
}


# Palautusfunktio
g <- function(z) {
  u <- z/10000
  u
}


# Siemenluku
z0 <- 1234

# Jonon pituus
n <- 100

u <- rep(0,n)
z <- rep(0,n)

z[1] <- f(z0)
u[1] <- g(z[1])

for(i in 2:n) {
  z[i] <- f(z[i-1])
  u[i] <- g(z[i])
}

