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.
其他解法?
直接用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.
其他解法?
相关文章推荐
- php吧字符串直接转换成数组处理
- 监听ContentProvider中数据的变化
- URI+ContentProvider+ContenResolver
- PHP上传文件(学习)
- sycPHPCMS v1.6 cookie sqlinjection
- 360浏览器 极速模式下,有些幻灯图片不显示,但其它火狐和IE浏览器都显示
- php技术实现加载字体并保存成图片
- PHP中的SESSION机制
- 关于onethinkphp 分类数据
- PHP之cookie详解
- PHP 连接新浪云,mySQL数据库时,出错的问题解决
- phpMyadmin 修改上传文件大小限制
- 在Windows中配置PHP的OpenSSL模块
- thinkphp C方法问题
- Web开发、测试环境搭建(LAMP、SVN服务器、Laravel项目创建)
- 几个不常用但是很好用的PHP数组函数
- WDCP升级到PHP5.3版本
- 小胖学PHP总结5-----PHP操作SQL数据库(Deprecated: mysql_connect(): The mysql extension is deprecated and will)
- php 小代码(2)-----给定一个字符串时间得到其时间所在的当周的周一及周日时间
- 在PhpStorm中使用xdebug调试PHP代码