Ocena użytkownikóww: ***** / 4
Nadesłany przez Tomasz Lubiński, 13 września 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
LCG/Class1.cs:
//generowanie liczb pseudolosowych
//generator LCG
//www.algorytm.org (c) 2008 Tomasz Lubinski
using System;
namespace LCG
{
/// <summary>
/// generowanie liczb pseudolosowych
/// generator LCG
/// www.algorytm.org (c) 2008 Tomasz Lubinski
/// </summary>
class Class1
{
private static ulong m;
private static ulong a;
private static ulong c;
private static ulong x;
/// <summary>
/// Calculate a*x mod m
/// </summary>
/// <param name="a"></param>
/// <param name="x"></param>
/// <param name="m"></param>
/// <returns></returns>
private static ulong mult(ulong a, ulong x, ulong m)
{
ulong b,n,r;
r = 0;
n = 1;
b = 1;
while (n <= 64)
{
if ((a & b) != 0)
r = (r + x) % m;
x = (x + x) % m;
b *= 2;
n++;
}
return r;
}
public static ulong genRand()
{
x = (mult(a,x,m) + c) % m;
return x;
}
/// <summary>
/// generowanie liczb pseudolosowych
/// generator LCG
/// </summary>
[STAThread]
static void Main(string[] args)
{
int i, n;
ulong low, high;
Console.WriteLine("Podaj wspolczynnik m");
m = ulong.Parse(Console.ReadLine());
Console.WriteLine("Podaj wspolczynnik a");
a = ulong.Parse(Console.ReadLine());
Console.WriteLine("Podaj wspolczynnik c");
c = ulong.Parse(Console.ReadLine());
Console.WriteLine("Podaj wartosc ziarna x[1]");
x = ulong.Parse(Console.ReadLine());
Console.WriteLine("Podaj ile liczb pseudolosowych wylosowac");
n = int.Parse(Console.ReadLine());
Console.WriteLine("Podaj dolna wartosc zakresu generowanych liczb");
low = ulong.Parse(Console.ReadLine());
Console.WriteLine("Podaj gorna wartosc zakresu generowanych liczb");
high = ulong.Parse(Console.ReadLine());
for (i=0; i<n; i++) {
Console.WriteLine(low + (genRand() % (high - low + 1)));
}
}
}
}