long random( long lo, long hi ){ /* Satunnaislukugeneraattori kurssia 81120 varten. Palauttaa tasan jakautuneita satunnaislukuja valilta lo...hi. Toimii lineaarisen kongruenttimenetelman mukaan, ks. esim. Knuth: The Art of Computer Programming: Seminumerical Algorithms. Olettaa, että long on 32-bittinen etumerkillinen kokonaisluku. Valin lo...hi leveys saa olla enintaan 2 147 483 647 eli 2^31 - 1. Olettaa, että lo <= hi. Ei ole surkein tunnettu, mutta ei myoskaan sopiva vaativaan kayttoon. Ongelmien ilmetessa laheta viesti KURSSIN UUTISRYHMAAN tut.ot.tietorakenteet. AV 31.1.1995. */ static unsigned long seed1 = 44449UL, seed2 = 0; unsigned long x, len = hi - lo + 1, lim = 0x80000000ul - ( 0x80000000ul % len ); do{ seed1 = 15625 * seed1 + 22221; seed2 = 15625 * seed2 + ( seed1 >> 16 ); seed1 &= 0xFFFFul; seed2 &= 0xFFFFul; x = ( ( seed1 & 0x7FFFul ) << 16 ) | seed2; }while( x >= lim ); return (long)( x % len + lo ); }