N
Hallo zusammen, ich hab mich mal mit einem Zufallszahlengenerator vom Typ Inverser Kongruenzgenerator beschäftigt. Dazu hab ich auch eine Seite gefunden, die auch für Einsteiger wie mich die Sache gut erklärt (http://www.caesar.de/uploads/media/zusatzkurs.pdf). Auch bei Wikipedia hab ich nachgeschaut, da stand folgendes:
Periodenlänge
Die maximale Periodenlänge kann offenbar p nicht überschreiten. Erreicht wird diese genau dann, wenn das Polynom
x^2 - bx - a
ein primitives Polynom in Zp ist.
Auch von Wikipedia:
Ein Polynom mit ganzzahligen Koeffizienten heißt primitives Polynom, wenn 1 der Inhalt, d.h. der größte gemeinsame Teiler seiner Koeffizienten ist.
Ein primitives Polynom zeichnet sich dadurch aus, dass der grösste gemeinsame Teiler aller Koeffizienten (also 1, -b und -a) 1 ist, warum wird es dann so umständlich geschrieben, man könnte ja schreiben: "wenn ggT(a,b)=1" oder "wenn a und b zueinander prim sind" oder irgendwas? Wieso braucht es da x^2 und x? Ich fürchte, ich hab da etwas falsch verstanden... Denn ich hab einen Generator gemacht mit a und b als Primzahlen, und die Periodenlänge war trotzdem nicht maximal..
Kennt jemand eine Implementierung eines inversen Kongruenzgenerators oder eine gute Wahl der Parameter? Ich hab auch schon gegoogelt und kaum etwas brauchbares gefunden (der Inversionsgenerator ist auch eher selten anzutreffen).
Ach ja, und noch was: Ist der in C++ beigelieferte rand()-Generator ein linearer Kongruenzgenerator (ich hab mal im Quellcode nachgeschaut, da steht überall so kompliziertes Zeugs wie templates, von denen ich noch keine Ahnung hab :D)