您的位置:首页 > 编程语言 > PHP开发

input a random number from 1-100. Output a random number from 1-30

2015-07-27 20:59 741 查看
法一:

直接用rand100生成一个数,如果这个数是在1到30的,我们就保留;如果是大于30的,我们就再执行rand100直到我们获得的数在1到30之间。这样产生的概率是:

1/100 + (70/100)*(1/100) + ((70/100)^2)*(1/100) + ((70/100)^3)*(1/100) + ..... = (1/100) * (1/(1-70/100)) = 1/30

法二:

30是个特别的数字, 因为1-30是31个数字,而这个数字是素数, 32又是2的5次方。

每次来个数mod 31就好了吧。

Note:

一定要mod 素数,因为这样不会conflict.

其他解法?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: