/* Author: MB Version: 1.0.0, JUL 2021 */ #include #define m 100000000 #define m1 10000 #define b 31415821 // b-Faktor muss in "21" enden, davor eine gerade Zahl static zufallszahl; /* Idee, die allerdings zu Overflow und zu Zyklen fuehren kann. */ int linearCongruential(int seed, int mod, int base, int n){ int a[n]; a[0] = seed; for(int i = 1; i <= n; i++){ a[i] = (a[i-1]*base + 1) % mod; } } /* problemfreie Implementation */ int mult(int p, int q){ // gewollt werden 8 Stellen der Multiplikation int p1, p0, q1, q0; p1 = p/m1; p0 = p % m1; q1 = q/m1; q0 = q % m1; return (((p0*q1+p1*q0) % m1) * m1 + p0*q0) % m; } int random(){ zufallszahl= (mult(zufallszahl,b)+1) % m; // Wert in der globalen Variable speichern return zufallszahl; } int randomBis(int obergrenze){ zufallszahl = (mult(zufallszahl,b)+1) % m; return ((zufallszahl/m1)*obergrenze) / m1; } main(){ int n, obergrenze; puts("Wieviele Zufallszahlen und Startwert:"); scanf("%d %d", &n,&zufallszahl); for(int i = 1; i <= n; i++) printf("%d \n", random()); puts("Wieviele Zufallszahlen, Obergrenze und Startwert:"); scanf("%d %d %d", &n,&obergrenze,&zufallszahl); for(int i = 1; i <= n; i++) printf("%d \n", randomBis(obergrenze)); }