Ocena użytkownikóww: ***** / 6
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.
Generator LCG - C++/lcg.c:
//generowanie liczb pseudolosowych
//generator LCG
//www.algorytm.org (c) 2008 Tomasz Lubinski
#include "stdio.h"
unsigned long long m;
unsigned long long a;
unsigned long long c;
unsigned long long x;
// Calculate a*x mod m
unsigned long long mult(unsigned long long a, unsigned long long x, unsigned long long m)
{
unsigned long 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;
}
unsigned long long genRand()
{
x = (mult(a,x,m) + c) % m;
return x;
}
int main()
{
int i, n;
unsigned long long low, high;
printf("Podaj wspolczynnik m\n");
scanf("%Ld", &m);
printf("Podaj wspolczynnik a\n");
scanf("%Ld", &a);
printf("Podaj wspolczynnik c\n");
scanf("%Ld", &c);
printf("Podaj wartosc ziarna x[1]\n");
scanf("%Ld", &x);
printf("Podaj ile liczb pseudolosowych wylosowac\n");
scanf("%d", &n);
printf("Podaj dolna wartosc zakresu generowanych liczb\n");
scanf("%Ld", &low);
printf("Podaj gorna wartosc zakresu generowanych liczb\n");
scanf("%Ld", &high);
for (i=0; i<n; i++)
{
printf("%Ld\n", low + (genRand() % (high - low + 1)));
}
return 0;
}