Why does rand() % 7 always return 0? Why does rand() % 7 always return 0? objective-c objective-c

Why does rand() % 7 always return 0?


Well, this

int seed;for(seed = 1; seed < 10; seed++) {    srand(seed);    printf("%4d %16d\n", seed, rand());}

prints

   1            16807   2            33614   3            50421   4            67228   5            84035   6           100842   7           117649   8           134456   9           151263

which makes me think that rand() = seed * 16807

Wikipedia article Linear congruential generator confirms that CarbonLib indeed uses Xn+1 = Xn * 16807 to generate random numbers.


It seems unlikely but running some tests, after an srand the first rand seems always to be divisible by 7, at least in an int sized variable.

On several runs I got 1303562743, 2119476443, and 2120232758, all of which mod 7 to 0.

The second rand() works, because it is the second rand(). Throw a rand() before your first rand()... or better yet, use a better random number generator random or arc4rand if available.

Also see Stack Overflow question Why is (rand() % anything) always 0 in C++?.