コンパイラベンダー依存だと思うのだけど、
一般にC標準のrand関数の生成する乱数の下位bitの質は低いらしい。
例えば、偶数と奇数が交互に出たりしちゃうらしい。
なんで、以下のようなコードは御法度
rand() % N
いろいろ調べると、書くなら、こう↓
(int)((double)rand() / ((double)RAND_MAX + 1) * N)
もしくは、
(rand() / M) % N
な感じが良いそうだ。
どちらにしても、上位bitの影響力を強めているのには変わらない。
2番目ので、なぜMが素数の方が良いのかは、すいません、わかりません。