>>736
算術圧縮なんかでよく使われるネタを紹介

int range[N] = { 25, 33, 245, 534, 538, 600, ..., 12512, 12889 };

って感じで出現する事象の種類の数をNで定義、各出現率の区間を定義する。
この場合、0〜25、26〜33、34〜245、…12513〜12889。当然、区間が広いほうが出現確立が高い。
出現率の区間の最大値で乱数を割った余りについて、どの区間に入っているか調べる。
配列rangeは昇順に並べられているから二分探索ができて探索速度も速い。