Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.90
landan
7 / 7 / 0
Регистрация: 07.07.2010
Сообщений: 157
#1

Генератор случайных чисел - C++

04.11.2010, 19:08. Просмотров 3889. Ответов 8
Метки нет (Все метки)

Помогите написать программу, которая генерировала бы случайные числа мультипликативным конгруэнтным методом. Нужно использовать такое рекуррентное выражение xi= а*xi (mod m).

Параметры
Х0=5
А/p=?
M=35
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2010, 19:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Генератор случайных чисел (C++):

Генератор случайных чисел - C++
Вот написал программу, которая генерирует матрицу 9*9. В каждой строке - от 1 до 9, не повторяются В каждом стобце - то же самое. ...

Генератор случайных чисел (с UI) - C++
Я создал простенький генератор случайных чисел с Пользовательским Интерфейсом (GUI). Добавлено через 21 минуту Актуальна :)

генератор случайных чисел - C++
как реализовать генератор случайных чисел? чтобы можно было вводить два числа(например 56 и 519), и случайное число генерировалось из...

Генератор случайных чисел - C++
составить генератор случайных чисел, имеющий два члена - границы последовательности. Предоставить метод, который выводит СЧ из диапазона...

Генератор случайных чисел - C++
Здраствуййте :( int a=rand()%10000; std::cout << a; getchar(); return 0; int a=rand()%1000; std::cout << a; getchar();...

Генератор случайных чисел - C++
Реализовать генератор случайных числе в диапазоне от нуля до единицы. После генерации случайного числа, записывать 0 или 1 (в соответствии...

8
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
04.11.2010, 19:44 #2
На таких условиях при любом a будут выходить только числа из набора 0, 5, 10, 15, 20, 25, 30
0
landan
7 / 7 / 0
Регистрация: 07.07.2010
Сообщений: 157
04.11.2010, 19:52  [ТС] #3
Nick Alte, значит так и должно быть, помогите с кодом
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
04.11.2010, 22:23 #4
Сильно сомневаюсь, что должно. Разве что вас специально учат неправильно, для прикола - как Скрипучие Тапочки. Но неважно, принцип-то несложный. Надо завести переменную, в которой запоминается последнее полученное значение. Изначально туда заносится 5. Затем при каждом вызове ГСЧ заносить в неё результат операции x = (a*x)%35 и возвращать это x. В зависимости от выбранного a, но не позже, чем через 7 вызовов, ГСЧ начнёт выдавать сплошные нули.
1
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
04.11.2010, 22:26 #5
Рекомендую смотреть в сторону этого:
http://ru.wikipedia.org/wiki/Аппаратный_генератор_случайных_чисел
Все остальное грязный фэйк.
1
Zilon
5 / 5 / 0
Регистрация: 05.11.2010
Сообщений: 60
05.11.2010, 01:27 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define MOD 35
#define X0 5
#define RNG_A //???
 
ArrayShuffler::ArrayShuffler()
{
    x = X0
}
 
 
int ArrayShuffler::random(int mod)
{
    return  x = (x * RNG_A) % MOD;
}
Но чему равно RNG_A?
Или при не оптимальном модуле нужно самому выбрать оптимальный RNG_A?
Сейчас посмотрим...

Последовательность чисел, порождаемая линейным конгруэнтным методом, периодична с периодом, не превышающим m. При этом длина периода в точности равна m тогда и только тогда, когда:
c и m = 1 (то есть c и m взаимно просты);
a - 1 кратно p для всех простых делителей p числа m;
a - 1 кратно 4, если m кратно 4.

фигня выходит. По расчетам RNG_A должно быть равно минимум 36 при таком m.
1
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
05.11.2010, 09:16 #7
При данной формуле последовательность практически сразу вырождается в нули. Даже при лучших условиях это произойдёт не позже, чем через M обращений к ГСЧ.
0
landan
7 / 7 / 0
Регистрация: 07.07.2010
Сообщений: 157
07.11.2010, 18:48  [ТС] #8
Zilon, не работает, ошибка на 7 строке

Добавлено через 1 час 23 минуты
Вот что нашел
Хо — нечетно;
а=52р+1 (р=0, 1, 2, ...) или a=2m+3 (m=3, 4, 5, ...) — обе эти записи означают, что младшая цифра а при представлении а в восьмеричной системе счисления должна быть равна 3 или 5 (проще говоря, остаток от деления а/8 должен быть равен 3 или 5);
m=2 (1>4).
При соблюдении этих ограничений, длина периода будет равна m/4.
0
landan
7 / 7 / 0
Регистрация: 07.07.2010
Сообщений: 157
08.11.2010, 18:51  [ТС] #9
[QUOTE=Zilon;1085020]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define MOD 35
#define X0 5
#define RNG_A //???
 
ArrayShuffler::ArrayShuffler()
{
    x = X0
}
 
 
int ArrayShuffler::random(int mod)
{
    return  x = (x * RNG_A) % MOD;
}
как это скомпилировать?
0
08.11.2010, 18:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2010, 18:51
Привет! Вот еще темы с ответами:

Генератор случайных чисел - C++
Есть функция, генерирующая случайные целые числа с помощью линейного конгруэнтного метода. Нужно сделать частотный побитовый тест для...

Генератор случайных чисел - C++
Как написать генератор случайных (пусть и псевдо) чисел, выдающий на выходе целые случайные числа от 1 до 10 и в кол-ве 10-и и без...

Генератор случайных чисел - C++
Здравствуйте, написал вот такой генератор псевдослучайных чисел в диапазоне 0-99 и задался вопросом о его скорости. Я считываю время...

Генератор случайных чисел - C++
Добрый день!У меня есть код #include <iostream> #include <cstdlib> #include <cstring> #include <ctime> char randSym() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru