源君物语喵:如何用计算机求随机数

来源:百度文库 编辑:中科新闻网 时间:2024/05/09 14:50:10
如果要编个程序
产生一个随机数
那算法是怎样?(我不要具体的函数,我问算法)

掷一个股子 如果知道掷时候的力度,角度,股子质量等等所有因素 是可以计算出股子的点数
那如果知道计算机的硬件,时间,天气电压等等等等所有所有的因素 能不能计算出那个随机数?
没人懂吗?
好吧,答对再加200分

注意:重点是第一个问题,算法是什么??

可以用硬件来实现 "不可预见的随机数'
在电脑里装一个很小的接收器
接收无线电波
量子论告诉我们
无线电波具有"测不准"的性质

根据无线电波产生随机数当然也测不准拉~~

你所说的随机数大概是高级语言中的随机数函数吧
计算机的硬件,时间,天气电压等等等等所有所有的因素,这些和此类随机数的产生都没有关系。
这一类随机数是根据随机数种子产生的,是伪随机数,这些随机数都是固定算法的,只要知道算法,知道种子,后面的数字可以迅速预测出来。

下面有一篇随机数算法的文章你去看看,这才是真正的随机数,真随机数的关键在于如何收集信息熵(entropy) - 不可预知信息(Unpredictable information)

http://www.xfocus.net/articles/200209/451.html

// C++ 下的程序,用rand()产生
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>

int main()
{
unsigned seed;
cout << "enter seed: ";
cin >> seed;
srand(seed);
for( int i = 1; i <= 10; i++)
{
cout << setw(10) << 1 + rand() % 6;
if(i % 5 == 0)
cout << endl;
}
return 0;
}

用rnd函数

用 pascal 的话 很简单
random(x) 'x为随即数的最大值 即 1 to x

在vb用rnd函数
dim a
a=int(rnd*10)
print a

int是取整的意思