I'm talking about this surprisingly simple implementation of rand() from the C standard:
static unsigned long int next = 1;
int rand(void) /* RAND_MAX assumed to be 32767. */
{
next = next * 1103515245 + 12345;
return (unsigned)(next/65536) % 32768;
}
From this Wikipedia article we know that the multiplier a (in above code a = 1103515245) should fulfill only 2 conditions:
a - 1is divisible by all prime factors ofm.
(In our casem = 2^32, size of the int, somhas only one prime factor = 2)a - 1is a multiple of 4 ifmis a multiple of 4.
(32768 is multiple of 4, and 1103515244 too)
Why they have chosen such a strange, hard-to-remember, "man, I'm fed up with these random numbers, write whatever" number, like 1103515245?
Maybe there are some wise reasons, that this number is somehow better than the other?
For example, why don't set a = 20000000001? It's bigger, cool-looking and easier to remember.