O(n)の実装 #define A 0x41c64e6d #define B 0x6073 uint step_seed_A(uint seed, uint n) { uint i; for (i = 0; i < n; i ++) { seed = seed * A + B; } return seed; } 次のseedを求める式をn回実行する。簡単。*1 徘徊位置の記事で考えたことの延長でO(1)で任意個数先のseedを計算できそうだなと思った。 seed[n+2], seed[n+4], seed[n+8], seed[n+16], ... , seed[n+2^31] をseed[n]から計算するそれぞれの値をあらかじめ求めておいてそれを使って計算する。 #define NUM_BITS 32 typedef struct { uint a; uint b; } CONSTANT