algorytm.org

Implementacja w Java



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 Java
Ocena użytkownikóww: *****  / 3
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.java:
//generowanie liczb pseudolosowych
//generator LCG
//www.algorytm.org (c) 2008 Tomasz Lubinski

public class LCG {

	private static long m;
	private static long a;
	private static long c;
	private static long x;

	//Calculate a*x mod m
	private static long mult(long a, long  x, long m) {
	   long 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 long genRand(){
	   x = (mult(a,x,m) + c) % m;
	   return x;
	}
	
	/**
	 * generowanie liczb pseudolosowych
     * generator LCG
     * www.algorytm.org (c) 2008 Tomasz Lubinski
	 */
	public static void main(String[] args) {
		int i, n;
		long low, high;

		System.out.println("Podaj wspolczynnik m");
		m = Console.readLong("");

		System.out.println("Podaj wspolczynnik a");
		a = Console.readLong("");

		System.out.println("Podaj wspolczynnik c");
		c = Console.readLong("");

		System.out.println("Podaj wartosc ziarna x[1]");
		x = Console.readLong("");

		System.out.println("Podaj ile liczb pseudolosowych wylosowac");
		n = Console.readInt("");

		System.out.println("Podaj dolna wartosc zakresu generowanych liczb");
		low = Console.readLong("");

		System.out.println("Podaj gorna wartosc zakresu generowanych liczb");
		high = Console.readLong("");

		for (i=0; i<n; i++) {
			System.out.println(low + (genRand() % (high - low + 1)));
		}

	}

}
Dodaj komentarz