// linear_congruential.cpp: определяет точку входа для консольного приложения.
//линейный конгруэнтный метод генерации псевдослучайных чисел
#include <iostream>
#include <math.h>
using namespace std;
// класс функтора-генератора
class congruential
{
public:
congruential(int initial) : last(initial) {}
double operator() ()
{
const int m = 65536, // генерация псевдослучайных чисел в диапазоне значений от 0 до 100 (выбирается случайно m > 0)
a = 5171, // множитель (выбирается случайно 0 <= a <= m)
inc = 35574; // инкрементирующее значение (выбирается случайно 0 <= inc <= m)
last = ((a * last) + inc) % m; // формула линейного конгруэнтного метода генерации псевдослучайных чисел
return (last / double(m));
}
private:
int last;
};
int main(int argc, char* argv[])
{
const int number_numbers = 40; // количество псевдослучайных чисел
congruential generator(2); // генератор
double e = 0; //число по экспоненциальному закону расспределиня
cout << "\npseudo-random numbers:\n";
for (int i = 0; i <= number_numbers; i++)
{
cout << generator() << " " << float(-2*log(generator())) << endl;
}
return 0;
}
Ly8gbGluZWFyX2NvbmdydWVudGlhbC5jcHA6INC+0L/RgNC10LTQtdC70Y/QtdGCINGC0L7Rh9C60YMg0LLRhdC+0LTQsCDQtNC70Y8g0LrQvtC90YHQvtC70YzQvdC+0LPQviDQv9GA0LjQu9C+0LbQtdC90LjRjy4KLy/Qu9C40L3QtdC50L3Ri9C5INC60L7QvdCz0YDRg9GN0L3RgtC90YvQuSDQvNC10YLQvtC0INCz0LXQvdC10YDQsNGG0LjQuCDQv9GB0LXQstC00L7RgdC70YPRh9Cw0LnQvdGL0YUg0YfQuNGB0LXQuwogCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1hdGguaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAovLyDQutC70LDRgdGBINGE0YPQvdC60YLQvtGA0LAt0LPQtdC90LXRgNCw0YLQvtGA0LAKY2xhc3MgY29uZ3J1ZW50aWFsCnsKcHVibGljOgogIGNvbmdydWVudGlhbChpbnQgaW5pdGlhbCkgOiBsYXN0KGluaXRpYWwpIHt9CiAgZG91YmxlIG9wZXJhdG9yKCkgKCkKICB7CiAgICBjb25zdCBpbnQgbSA9IDY1NTM2LCAvLyDQs9C10L3QtdGA0LDRhtC40Y8g0L/RgdC10LLQtNC+0YHQu9GD0YfQsNC50L3Ri9GFINGH0LjRgdC10Lsg0LIg0LTQuNCw0L/QsNC30L7QvdC1INC30L3QsNGH0LXQvdC40Lkg0L7RgiAwINC00L4gMTAwICjQstGL0LHQuNGA0LDQtdGC0YHRjyDRgdC70YPRh9Cw0LnQvdC+IG0gPiAwKQogICAgICAgICAgIGEgPSA1MTcxLCAgLy8g0LzQvdC+0LbQuNGC0LXQu9GMICjQstGL0LHQuNGA0LDQtdGC0YHRjyDRgdC70YPRh9Cw0LnQvdC+IDAgPD0gYSA8PSBtKQogICAgICAgICBpbmMgPSAzNTU3NDsgLy8g0LjQvdC60YDQtdC80LXQvdGC0LjRgNGD0Y7RidC10LUg0LfQvdCw0YfQtdC90LjQtSAo0LLRi9Cx0LjRgNCw0LXRgtGB0Y8g0YHQu9GD0YfQsNC50L3QviAwIDw9IGluYyA8PSBtKQogICAgbGFzdCA9ICgoYSAqIGxhc3QpICsgaW5jKSAlIG07IC8vINGE0L7RgNC80YPQu9CwINC70LjQvdC10LnQvdC+0LPQviDQutC+0L3Qs9GA0YPRjdC90YLQvdC+0LPQviDQvNC10YLQvtC00LAg0LPQtdC90LXRgNCw0YbQuNC4INC/0YHQtdCy0LTQvtGB0LvRg9GH0LDQudC90YvRhSDRh9C40YHQtdC7IAogICAgcmV0dXJuIChsYXN0IC8gZG91YmxlKG0pKTsKICB9CnByaXZhdGU6CiAgaW50IGxhc3Q7Cn07CiAKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKewogICAgY29uc3QgaW50IG51bWJlcl9udW1iZXJzID0gNDA7IC8vINC60L7Qu9C40YfQtdGB0YLQstC+INC/0YHQtdCy0LTQvtGB0LvRg9GH0LDQudC90YvRhSDRh9C40YHQtdC7CiAgICBjb25ncnVlbnRpYWwgZ2VuZXJhdG9yKDIpOyAvLyDQs9C10L3QtdGA0LDRgtC+0YAKICAgICAgICAgIGRvdWJsZSBlID0gMDsgLy/Rh9C40YHQu9C+INC/0L4g0Y3QutGB0L/QvtC90LXQvdGG0LjQsNC70YzQvdC+0LzRgyDQt9Cw0LrQvtC90YMg0YDQsNGB0YHQv9GA0LXQtNC10LvQuNC90Y8KICAgIGNvdXQgPDwgIlxucHNldWRvLXJhbmRvbSBudW1iZXJzOlxuIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG51bWJlcl9udW1iZXJzOyBpKyspCiAgICB7CiAgICAgICAgY291dCA8PCBnZW5lcmF0b3IoKSA8PCAiICIgPDwgZmxvYXQoLTIqbG9nKGdlbmVyYXRvcigpKSkgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9