Wlasny generator

0

Witam potrzebuje pilnie waszej pomocy. Napisalem dwa programy, w ktorych sa "losowane" liczby.

program1

public class klasa {

	   long   xi = 8;
	
	 void  xi(){
		   for(int i =0; i<8; i++){
	   long a = 65; 
	   long m = 21; 
	 
	   xi = ( a * xi ) % m;
	get(xi);
		   }}
	
	
	void get(long a){System.out.println(a);}
	}

a to drugi

public class p1 {

	
	 long xi = 7;
	void f(){
	for(int i=0 ;i<100;i++){
		  long a = 7; // 2**31-1
		  long m = 23; // 2**31-1
		 long b = -1;
		   xi = ( a * xi + b ) % m;
	if(xi<a && xi>b){	   
	gh(xi);
	}
	}
	}
	void gh (long gx){System.out.println(gx);}
	
	

I teraz mam taki problem. Przy kazdem uruchomieniu wyskakuja te same liczby.Jak moge osiagnac
efekt aby przy kazdym uruchomieniu programu pokazywaly sie w wyznaczonym przedziale liczby ale w roznej kolejnosci?

Bardzo prosilbym was o pomoc .

0

Nie wiem, moze ja jestem slepy ale gdzie tu jest element losowosci? Chcesz liczbe losowa z zakresu np 0 - 50, to zrob (int)(50*Math.random()) i tyle

0
iluminacja napisał(a)

Nie wiem, moze ja jestem slepy ale gdzie tu jest element losowosci? Chcesz liczbe losowa z zakresu np 0 - 50, to zrob (int)(50*Math.random()) i tyle

Tak zgadza sie , lecz nie wiesz jak zostala zbudowana ta metoda. W powyzszych programach uzylem metod , ktore sa powszechnie stosowane do generowania liczb losowych.

Za pomoca tych programow jestem w stanie wygenerowac pewna ilosc liczb. Chodzi mi o to jak moglbym zrobic aby przy przy kazdym uruchomieniu tej metody byly generowane te liczby w innej kolejnosci.
Czytalem gdzies ,ze to wiaze sie z czasem unix , albo cos takie.

0
cccx napisał(a)
iluminacja napisał(a)

Nie wiem, moze ja jestem slepy ale gdzie tu jest element losowosci? Chcesz liczbe losowa z zakresu np 0 - 50, to zrob (int)(50*Math.random()) i tyle

Tak zgadza sie , lecz nie wiesz jak zostala zbudowana ta metoda. W powyzszych programach uzylem metod , ktore sa powszechnie stosowane do generowania liczb losowych.

Za pomoca tych programow jestem w stanie wygenerowac pewna ilosc liczb. Chodzi mi o to jak moglbym zrobic aby przy przy kazdym uruchomieniu tej metody byly generowane te liczby w innej kolejnosci.
Czytalem gdzies ,ze to wiaze sie z czasem unix , albo cos takie.
Ok, przyjales ze nie wiem jak zostala zbudowana ta metoda^^ Wiec moja wersja jest taka, chcesz stworzyc generatory pseudolosowe o okresie M: Pierwszy program, to generator liniowy, drugi to afiniczny. Chcesz miec rozne parametry, to musisz zmieniac ziarno, czyli Xo, wlasciwie to i a powinienes zmieniac, ktore musisz losowac z przedzialu <1;-M-1> w pierwszym przypadku. W drugim analogicznie. Dlugosc okresu zalezy od a i od M. I w zadnym przypadku, nie wiem dlaczego nie chcesz uzywac Math.random() do generowania chociazby ziarna.

0

Bo nie :D

0

Zacznij od liczby zależnej od czasu systemowego:

long xi = System.currentTimeMillis();

0

Ok , to moglby ktos wrzucic generator liniowy i afiniczny z metoda Math.Random();

1 użytkowników online, w tym zalogowanych: 0, gości: 1