C標準のrand関数の生成する乱数の下位bitの質は低いらしい。

コンパイラベンダー依存だと思うのだけど、
一般にC標準のrand関数の生成する乱数の下位bitの質は低いらしい。

例えば、偶数と奇数が交互に出たりしちゃうらしい。

なんで、以下のようなコードは御法度

rand() % N


いろいろ調べると、書くなら、こう↓

(int)((double)rand() / ((double)RAND_MAX + 1) * N)

もしくは、

(rand() / M) % N
//M は適当に大きな素数

な感じが良いそうだ。
どちらにしても、上位bitの影響力を強めているのには変わらない。
2番目ので、なぜMが素数の方が良いのかは、すいません、わかりません。