用线性同余法生成随机数序列的公式为:
发布网友
发布时间:2022-04-29 21:14
我来回答
共4个回答
热心网友
时间:2022-06-22 23:19
用线性同余法生成随机数序列的公式为:rk = ( multiplier * rk-1 + increment ) % molus。
线性同余法主要是运用取模的运算来获取随机数,是一种在一些要求较低的场合能基本满足产生均匀分布随机数的方法。
数论中线性同余方程是最基本的同余方程,“线性”表示方程的未知数次数是一次。
随机数是实现由已知分布抽样的基本量,在由已知分布的抽样过程中,将随机数作为已知量,用适当的数学方法可以由它产生具有任意已知分布的简单子样。由具有已知分布的总体中抽取简单子样,在蒙特卡罗方法中占有非常重要的地位。总体和子样的关系,属于一般和个别的关系,或者说属于共性和个性的关系。由具有已知分布的总体中产生简单子样,就是由简单子样中若干个性近似地反映总体的共性。
由于随机数在蒙特卡罗方法中占有极其重要的位置,所以用专门的符号ξ表示。由随机数序列的定义可知,ξ1,ξ2,…是相互独立且具有相同单位均匀分布的随机数序列。也就是说独立性、均匀性是随机数必备的两个特点。
热心网友
时间:2022-06-22 23:19
#include<iostream>
using namespace std;
int Rand(int m,int n)
{//指定范围内生成一个随机数
static int r;//静态变量,可以保留上一个随机数
do
{
r=(25173*r+13849)%65536;
}
while(r<m||r>=n);
return r;
}
int main()
{
int w,i,r,t=0;
char op,answer;
int a,b,d;
while(1)//练习开始
{
cout<<"现在开始?(Y或N)\n";
cin>>answer;
if(answer=='N'||answer=='n') break;
while(1)
{
cout<<"请输入难度(1或2):";
cin>>w;
if(w!=1&&w!=2) cout<<"输入难度错误,请重新输入!"<<endl;
else break;
}
while(1)
{
cout<<"请输入运算类型(+,-,*,/):";
cin>>op;
if(op!='+'&&op!='-'&&op!='*'&&op!='/') cout<<"输入运算符错误,请重新输入!"<<endl;
else break;
}
//出十个题,每题10分
t=0;
for(i=1;i<=10;i++)
{
while(1)
{
if(w==1)
{
a=Rand(0,10);
b=Rand(0,10);
}
else if(w==2)
{
a=Rand(10,100);
b=Rand(10,100);
}
if(op=='-')
{
if(a<b) continue;//让被减数大于减数
}
if(op=='/')
{
if(int(a/b)!=(a/b)) continue; //只做结果为整数的除法
}
break;
}
cout<<a<<op<<b<<'=';
cin>>d;
switch(op)
{
case '+': r=a+b; break;
case '-': r=a-b; break;
case '*': r=a*b; break;
case '/': r=a/b; break;
}
if(r==d)
{
cout<<"你算对了,加10分!"<<endl;
t+=10;
}
else cout<<"你算错了!"<<endl;
}
cout<<"你的成绩是:"<<t<<"分"<<endl;
}
return 0;
}
热心网友
时间:2022-06-22 23:20
用线性同余法生成随机数序列的公式为:
rk = ( multiplier * rk-1 + increment ) % molus
序列中的每一个数rk,可以由它的前一个数rk-1计算出来。
#include <iostream.h>
int f();
int Y1();
int Y2();
void main()
{ int Y,i,r,t=0;
char p;
float a,b,d;
AA: cout << "请输入难度(1或2):";
cin >> Y;
if ( Y!=1 && Y!=2 )
{ cout << "输入难度错误,重新输入!" << endl;
goto AA; }
BB: cout << "请输入运算类型(+,-,*,/):" ;
cin >> p;
if ( p!='+' && p!='-' && p!='*' && p!='/' )
{ cout << "输入运算符错误,重新输入!" << endl;
goto BB;}
//出10道题,每题10分
for( i=1; i<=10; i++ )
{ l3: if( Y==1 ){ a=Y1(); b=Y1(); }
if( Y==2 ){ a=Y2(); b=Y2(); }
if (p=='-' )
if ( a<b ) goto l3; //使被减数大于减数
if ( p=='/' )
if ( int(a/b) != (a/b) )
goto l3; //只做结果为整数的除法
cout << a << p << b << '='; cin >> d;
switch ( p )
{ case '+': r = a+b; break;
case '-': r = a-b; break;
case '*': r = a*b; break;
case '/': r = a/b; break;
}
if ( r==d ){
cout << "算对了,加10分,加油!" << endl;
t = t+10; }
else cout << "算错了,继续努力!" << endl;
}
cout << "你的成绩是:" << t << "分" << endl;
}
int f()
{ static int r;
r = ( 25173*r+13849 ) % 65536;
return r;
}
int Y1()
{ int rand;
do
{ rand = f();
}while ( rand<0 || rand>10 );
return rand;
}
int Y2()
{ int rand;
do
{ rand = f();
}while ( rand<10 || rand>=
热心网友
时间:2022-06-22 23:20
#include <iostream.h>
int f();
int Y1();
int Y2();
void main()
{ int Y,i,r,t=0;
char p;
float a,b,d;
AA: cout << "请输入难度(1或2):";
cin >> Y;
if ( Y!=1 && Y!=2 )
{ cout << "输入难度错误,重新输入!" << endl;
goto AA; }
BB: cout << "请输入运算类型(+,-,*,/):" ;
cin >> p;
if ( p!='+' && p!='-' && p!='*' && p!='/' )
{ cout << "输入运算符错误,重新输入!" << endl;
goto BB;}
//出10道题,每题10分
for( i=1; i<=10; i++ )
{ l3: if( Y==1 ){ a=Y1(); b=Y1(); }
if( Y==2 ){ a=Y2(); b=Y2(); }
if (p=='-' )
if ( a<b ) goto l3; //使被减数大于减数
if ( p=='/' )
if ( int(a/b) != (a/b) )
goto l3; //只做结果为整数的除法
cout << a << p << b << '='; cin >> d;
switch ( p )
{ case '+': r = a+b; break;
case '-': r = a-b; break;
case '*': r = a*b; break;
case '/': r = a/b; break;
}
if ( r==d ){
cout << "算对了,加10分,加油!" << endl;
t = t+10; }
else cout << "算错了,继续努力!" << endl;
}
cout << "你的成绩是:" << t << "分" << endl;
}
int f()
{ static int r;
r = ( 25173*r+13849 ) % 65536;
return r;
}
int Y1()
{ int rand;
do
{ rand = f();
}while ( rand<0 || rand>10 );
return rand;
}
int Y2()
{ int rand;
do
{ rand = f();
}while ( rand<10 || rand>=100 );
return rand;
}