algorytm.org

Implementacja w C#



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Generator LCG (Liniowy Generator Kongruentny) - Implementacja w C#
Ocena użytkownikóww: *****  / 4
SłabyŚwietny
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)));
			}
		}
	}
}
Dodaj komentarz