using System;
namespace MyRandom
{
public class Rand
{
private long seed; //随机数种子
//用系统时间作为随机种子
public Rand()
{
string str = DateTime.Now.Day.ToString();
str += DateTime.Now.Hour.ToString();
str += DateTime.Now.Minute.ToString();
str += DateTime.Now.Second.ToString();
str += DateTime.Now.Millisecond.ToString();
this.seed = long.Parse(str);
}
//用户自定义随机种子
public Rand(long Value)
{
this.seed = Value;
}
//产生非负伪随机数
public long Next()
{
long l = this.seed;
l = l * l;
string strTime = l.ToString();
int w = strTime.Length / 3;
string str = "";
for (int i = w; i < strTime.Length - w; i++)
str += strTime[i];
l = long.Parse(str);
return l;
}
//产生上限为Value的伪随机数
public long Next(long Value)
{
if (Value < 0)
return -1;
long l = this.seed;
l = l * l;
string strTime = l.ToString();
int w = strTime.Length / 3;
string str = "";
for (int i = w; i < strTime.Length - w; i++)
str += strTime[i];
l = long.Parse(str);
return l % Value;
}
//产生下限为minValue上限为maxValue的伪随机数
public long Next(long minValue, long maxValue)
{
if (minValue < 0 || maxValue < 0 || minValue > maxValue)
return -1;
long l = this.seed;
l = l * l;
string strTime = l.ToString();
int w = strTime.Length / 3;
string str = "";
for (int i = w; i < strTime.Length - w; i++)
str += strTime[i];
l = long.Parse(str);
return l % (maxValue - minValue) + minValue;
}
//伪随机数填充指定的比特数组
public void NextBytes(byte[] buffer)
{
long Value = 0;
Value = this.Next() % 255;
for (int i = 0; i < buffer.Length; i++)
{
Value = Value * Value;
string strTime = Value.ToString();
int w = strTime.Length / 3;
string str = "";
for (int j = w; j < strTime.Length - w; j++)
str += strTime[j];
Value = long.Parse(str);
Value = Value % 255;
buffer[i] = (byte)Value;
}
}
//产生0.0到1.0的伪随机数
public double NextDouble()
{
long l = this.Next(0, 100000);
if (l == 100000)
return 1.0;
l = l * l;
string strTime = l.ToString();
int w = strTime.Length / 3;
string str = "0.";
for (int i = w; i < strTime.Length - w; i++)
str += strTime[i];
double d = double.Parse(str);
return d;
}
}
}