Subtractive generator: Difference between revisions

Added Kotlin
(Restoring visibility of the task description formulae (lost in under-tested cosmetic edits at 04:25, 12 September 2016))
(Added Kotlin)
Line 1,019:
506003769
380969305</pre>
 
=={{header|Kotlin}}==
{{trans|C}}
<lang scala>// version 1.1.51
 
const val MOD = 1_000_000_000
 
val state = IntArray(55)
var si = 0
var sj = 0
 
fun subrandSeed(p: Int) {
var p1 = p
var p2 = 1
state[0] = p1 % MOD
var j = 21
for (i in 1..54) {
if (j >=55) j -= 55
state[j] = p2
p2 = p1 - p2
if (p2 < 0) p2 += MOD
p1 = state[j]
j += 21
}
si = 0
sj = 24
repeat(165) { subrand() }
}
 
fun subrand(): Int {
if (si == sj) subrandSeed(0)
if (si-- == 0) si = 54
if (sj-- == 0) sj = 54
var x = state[si] - state[sj]
if (x < 0) x += MOD
state[si] = x
return x
}
 
fun main(args: Array<String>) {
subrandSeed(292_929)
for (i in 0..9) println("r[${i + 220}] = ${subrand()}")
}</lang>
 
{{out}}
<pre>
r[220] = 467478574
r[221] = 512932792
r[222] = 539453717
r[223] = 20349702
r[224] = 615542081
r[225] = 378707948
r[226] = 933204586
r[227] = 824858649
r[228] = 506003769
r[229] = 380969305
</pre>
 
=={{header|Mathematica}}==
9,490

edits