Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.90
landan
7 / 7 / 8
Регистрация: 07.07.2010
Сообщений: 157
#1

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

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

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

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

Генератор случайных чисел
Здравствуйте, для программы мне требуется генератор, который будет задавать...

Генератор случайных чисел
Здравствуйте! Кто-нибудь объясните пожалуйста. Вот есть функция rand(). Она...

Генератор случайных чисел
В общем, нужно составить программу, которая реализует алгоритм генерации...

Генератор случайных чисел
составить генератор случайных чисел, имеющий два члена - границы...

Генератор случайных чисел
Добрый день!У меня есть код #include <iostream> #include <cstdlib> #include...

8
Nick Alte
Эксперт С++
1646 / 1018 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
04.11.2010, 19:44 #2
На таких условиях при любом a будут выходить только числа из набора 0, 5, 10, 15, 20, 25, 30
0
landan
7 / 7 / 8
Регистрация: 07.07.2010
Сообщений: 157
04.11.2010, 19:52  [ТС] #3
Nick Alte, значит так и должно быть, помогите с кодом
0
Nick Alte
Эксперт С++
1646 / 1018 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
04.11.2010, 22:23 #4
Сильно сомневаюсь, что должно. Разве что вас специально учат неправильно, для прикола - как Скрипучие Тапочки. Но неважно, принцип-то несложный. Надо завести переменную, в которой запоминается последнее полученное значение. Изначально туда заносится 5. Затем при каждом вызове ГСЧ заносить в неё результат операции x = (a*x)%35 и возвращать это x. В зависимости от выбранного a, но не позже, чем через 7 вызовов, ГСЧ начнёт выдавать сплошные нули.
1
slice
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
04.11.2010, 22:26 #5
Рекомендую смотреть в сторону этого:
http://ru.wikipedia.org/wiki/Аппаратный_генератор_случайных_чисел
Все остальное грязный фэйк.
1
Zilon
5 / 5 / 1
Регистрация: 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
Эксперт С++
1646 / 1018 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
05.11.2010, 09:16 #7
При данной формуле последовательность практически сразу вырождается в нули. Даже при лучших условиях это произойдёт не позже, чем через M обращений к ГСЧ.
0
landan
7 / 7 / 8
Регистрация: 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 / 8
Регистрация: 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
Привет! Вот еще темы с решениями:

Генератор случайных чисел
Реализовать генератор случайных числе в диапазоне от нуля до единицы. После...

генератор случайных чисел
как реализовать генератор случайных чисел? чтобы можно было вводить два...

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

Генератор случайных чисел
Здравствуйте, написал вот такой генератор псевдослучайных чисел в диапазоне...


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

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

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