Ocena użytkownikóww: ***** / 3
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)));
}
}
}