Форум программистов, компьютерный форум CyberForum.ru

Вычислить период последовательности - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
rrrl
0 / 0 / 0
Регистрация: 20.10.2010
Сообщений: 12
10.03.2011, 11:30     Вычислить период последовательности #1
Подскажите, как вычислить период последовательности. Как я понимаю, поместить сперва элементы в массив, и уже в нем считать период?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
...
long t, k, p, a, c, n=20;      // p - Xo,  t, k - Xn,
int i, g, m=8;                 // m -  кол-во элементов, которое надо найти
 
printf ("Vvedite Xo, A, C \n");
scanf ("%d", &p);
scanf ("%d", &a);
scanf ("%d", &c);
 
printf ("%d  ", p);           //печать нулевого элемента
 
//нахождение первого элемента:
if (p==0)
{
t=c;
printf ("%d  ", t);}
 
if (p>=1)
{
g=((a*inverse(p,n))+c);
t=g%n;
printf ("%d  ", t);}
 
// нахождение последующих элементов
for (i=2;i<m; i++)
{
if (t==0){
k=c;
printf ("%d  ", k);
t=k;}
 
if (t>=1){
g=((a*inverse(t,n))+c);
k=g%n;
printf ("%d  ", k);
t=k;}
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
10.03.2011, 16:46     Вычислить период последовательности #2
Вычислить период последовательности можно по-разному в зависимости:
1) от вида последовательности (арифметическая, геометрическая конечная, геометрическая бесконечная);
2) начальных данных (первый элемент + общее к-во; последний элемент + общее к-во; два элемента с известными номерами).

А что у вас дано?
rrrl
0 / 0 / 0
Регистрация: 20.10.2010
Сообщений: 12
10.03.2011, 17:03  [ТС]     Вычислить период последовательности #3
Спасибо за ответ.

Получается, что у меня на выходе псевдослучайная нелинейная конгруэнтная последовательность Эйхенаура-Лена с обращением.

Первый элемент у меня будет всегда "p", а количество элементов в последовательности m+2 (8+2), то есть 10.
IrineK
Заблокирован
10.03.2011, 17:28     Вычислить период последовательности #4
Что лишний раз доказывает необходимость формулировать задачу изначально корректно.

Добавлено через 21 минуту
Да, кстати, последовательность именуется в честь господ: Эйхенауэра-Лена.
rrrl
0 / 0 / 0
Регистрация: 20.10.2010
Сообщений: 12
10.03.2011, 17:52  [ТС]     Вычислить период последовательности #5
На этом ваша помощь заканчивается?
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
10.03.2011, 18:22     Вычислить период последовательности #6
Цитата Сообщение от rrrl Посмотреть сообщение
псевдослучайная нелинейная конгруэнтная последовательность Эйхенаура-Лена с обращением.
О_о а что это такое??
rrrl
0 / 0 / 0
Регистрация: 20.10.2010
Сообщений: 12
10.03.2011, 18:28  [ТС]     Вычислить период последовательности #7
Сам не знаю, так же как и не знают про это поисковики.
Такое ощущение, что преподаватель сам придумал это понятие

Гуру с++, подскажите уже как посчитать период последовательности. Заморачиваться не нужно. Просто нужно показать отчет, где будет присутствовать функция вычисления периода
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
10.03.2011, 18:32     Вычислить период последовательности #8
не, ну поисковики то знают, конечно.
только вот формулу нелинейного реккурентного соотношения не могу понять. эх... чему вас учат то? =)
rrrl
0 / 0 / 0
Регистрация: 20.10.2010
Сообщений: 12
10.03.2011, 18:41  [ТС]     Вычислить период последовательности #9
поисковики знают как раз материалы преподавателя и из них выходящие

это криптография несчастная

вот ссылка на этот генератор (.doc) - http://dl.dropbox.com/u/3691865/gen_eyh_len.doc
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
10.03.2011, 18:45     Вычислить период последовательности #10
не могли бы вы пояснить вот этот момент

где xt^-1 – обратный к xt элемент по модулю N,
rrrl
0 / 0 / 0
Регистрация: 20.10.2010
Сообщений: 12
10.03.2011, 18:54  [ТС]     Вычислить период последовательности #11
Цитата Сообщение от no0ker Посмотреть сообщение
не могли бы вы пояснить вот этот момент
У меня реализовано по этим исходникам (с использованием алгоритма Эвклида):
http://algolist.manual.ru/maths/teornum/nod.php#5
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
10.03.2011, 19:46     Вычислить период последовательности #12
правильно ли я понимаю?

чтобы найти обратный к X элемент по модулю Y, нужно решить уравнение
aX + bY = 1;
причем ответ будет коэфициент 'a'.
rrrl
0 / 0 / 0
Регистрация: 20.10.2010
Сообщений: 12
10.03.2011, 19:54  [ТС]     Вычислить период последовательности #13
Цитата Сообщение от no0ker Посмотреть сообщение
правильно ли я понимаю?

чтобы найти обратный к X элемент по модулю Y, нужно решить уравнение
aX + bY = 1;
причем ответ будет коэфициент 'a'.
Ну что-то вроде того.

Но нам разве нужны эти знания для вычисления периода?

Как я вижу, нахождение периода:
Находим первый элемент последовательности - помещаем его в массив, находим второй - в массив его, далее находим остальные 6 элементов и помещаем их в массив.
И теперь работая с массивом находим как-то период - вот здесь мне и нужна помощь
no0ker
10.03.2011, 20:04
  #14

Не по теме:

ушел в ветку математики. что то аж интересно стало.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 23:24     Вычислить период последовательности
Еще ссылки по теме:

C++ Вычислить элементы последовательности
Вычислить период колебания маятника длины L C++
Вычислить период колебаний контура по формуле Томпсона C++

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

Или воспользуйтесь поиском по форуму:
_AvengeR_
0 / 0 / 0
Регистрация: 23.01.2011
Сообщений: 9
01.06.2011, 23:24     Вычислить период последовательности #15
что, так никто и не вычислил? у меня стоит щас та же самая проблема, только для линейного конгруэнтного генератора. пока что написал вот такую функцию, но знаю, что она считает не совсем верно((
C++
1
2
3
4
5
6
7
8
9
10
11
12
int GetPeriod (int arr[])
    {
        int n=0;
        int arr2[10];
        for (int i=0; i<=9; i++)
            arr2[i]=arr[i+6];
        for (int i=1; i<=54000; i++) 
            if (arr2[0]==arr[i+6])
                for (int j=0; j<=9; j++){
                    if(arr2[j]==arr[i+j+6]) n=n+1;
                    if(n==10) return(i);
                }
Yandex
Объявления
01.06.2011, 23:24     Вычислить период последовательности
Ответ Создать тему
Опции темы

Текущее время: 15:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru