Preferably fast, preferably a very even distribution. I did a forum search on this topic expecting to find pages and pages of people asking about this, but surprisingly, there were only 13 hits and no answers (14 hits now).

Ill be doing this in c++, but as long as I can understand the general algorithm the language doesn't matter that much.