int[0..623] MT int index = 0 function initializeGenerator(int seed) { MT[0] := seed for i from 1 to 623 { MT[i] := last 32 bits of(1812433253 * (MT[i-1] xor (right shift by 30 bits(MT[i-1]))) + i) } } function extractNumber() { if index == 0 { generateNumbers() } int y := MT[index] y := y xor (right shift by 11 bits(y)) y := y xor (left shift by 7 bits(y) and (2636928640)) y := y xor (left shift by 15 bits(y) and (4022730752)) y := y xor (right shift by 18 bits(y)) index := (index + 1) mod 624 return y } function generateNumbers() { for i from 0 to 623 { int y := 32nd bit of(MT[i]) + last 31 bits of(MT[(i+1) mod 624]) MT[i] := MT[(i + 397) mod 624] xor (right shift by 1 bit(y)) if (y mod 2) == 1 { MT[i] := MT[i] xor (2567483615) } } }