2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему
 
 Как можно подтвердить принадлежность числа к Числам Фибоначч
Сообщение24.07.2007, 10:45 


24/07/07
2
Как можно подтвердить принадлежность числа к Числам Фибоначчи?
К примеру при n = 600, Fn = 110433070572952242346432246767718285942590237357555606380008891875277701705731473925618404421867819924194229142447517901959200

 Профиль  
                  
 
 
Сообщение24.07.2007, 11:10 
Модератор
Аватара пользователя


11/01/06
5660
Почему бы просто не вычислить $F_n$ для заданного $n$ ?
Код:
? fibonacci(600)
%1 = 110433070572952242346432246767718285942590237357555606380008891875277701705731473925618404421867819924194229142447517901959200


Добавлено спустя 5 минут 34 секунды:

А если $n$ неизвестно, то можно вычислить максимальное число Фибоначчи, не превосходящее заданного числа $m$, и сравнить его с $m$. При этом порядковый номер числа Фибоначчи можно прикинуть по формуле $\log_{\phi} m$, где $\phi = \frac{1+\sqrt{5}}{2}$.

 Профиль  
                  
 
 
Сообщение24.07.2007, 11:19 
Заслуженный участник
Аватара пользователя


22/10/05

2601
Москва,физфак МГУ,1990г
А зачем нужны эти числа Фибоначчи? Польза от них хоть какая есть?

 Профиль  
                  
 
 
Сообщение24.07.2007, 11:22 
Модератор
Аватара пользователя


11/01/06
5660
PSP писал(а):
А зачем нужны эти числа Фибоначчи? Польза от них хоть какая есть?

Конечно! См., например: http://ilib.mccme.ru/plm/ann/a06.htm

 Профиль  
                  
 
 Re: Как можно подтвердить принадлежность числа к Числам Фибо
Сообщение24.07.2007, 12:30 
Заслуженный участник


31/12/05
1480
dask писал(а):
Как можно подтвердить принадлежность числа к Числам Фибоначчи?
Посчитайте $\frac{log(F\sqrt{5})}{log\frac{1+\sqrt{5}}{2}}$ и округлите. Это номер одного из двух окружающих $F$ чисел Фибоначчи. Потом посчитайте это число и сравните с $F$.

 Профиль  
                  
 
 
Сообщение24.07.2007, 19:39 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Ок, можно поставть вопрос по-другому? Дано (большое) x. Надо с минимальными вычислительными затратами определить, является ли оно числом Фибоначчи.

С этой точки зрения, алгоритмы вычисляющие логарифмы не вполне пригодны: их вычислительная сложность очень велика. С другой стороны, вычисление остатка по простому модулю могло бы позволить подсчитать $n$ используя китайскую теорему об остатках (а дальше, имеея гипотезу о $n$, можно вычислить $F_n$ за ${\rm O}(n^{\phi})$ шагов. Или я вру где-нибудь?

 Профиль  
                  
 
 
Сообщение24.07.2007, 19:48 
Модератор
Аватара пользователя


11/01/06
5660
незваный гость писал(а):
С другой стороны, вычисление остатка по простому модулю могло бы позволить подсчитать $n$ используя китайскую теорему об остатках (а дальше, имеея гипотезу о $n$, можно вычислить $F_n$ за ${\rm O}(n^{\phi})$ шагов. Или я вру где-нибудь?

Тут надо учитывать, что в периоде чисел Фибоначчи по простому модулю некоторые остатки могут повторяться. Поэтому определить $n$ однозначно сразу не получится (придется перебрирать варианты).

На самом деле, $n$ вычислять необязательно. Вместо этого можно воспользоваться формулой $F_{m+n} = F_{m+1} F_{n} + F_{m} F_{n-1}$ и удваивать индекс чисел Фибоначчи до тех пор, пока не будет получено число $F_{2^k}$ большее заданного, затем вычислить $F_{2^{k-1} + 2^{k-2}$ (по той же формуле) и т.д. По сути - это будет вариант дихотомии (двоичного поиска) на числах Фибоначчи.

 Профиль  
                  
 
 
Сообщение24.07.2007, 19:57 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
maxal писал(а):
Тут надо учитывать, что в периоде чисел Фибоначчи по простому модулю некоторые остатки могут повторяться.

Да, я это имел в виду, и мне это не нравилось с самого начала.

Мне кажется, дихотомию проще применять несколько иначе, оценив верхнюю и нижнюю границу (например, через количество цифр).

 Профиль  
                  
 
 
Сообщение24.07.2007, 20:39 
Заслуженный участник


31/12/05
1480
незваный гость писал(а):
Мне кажется, дихотомию проще применять несколько иначе, оценив верхнюю и нижнюю границу (например, через количество цифр).
Количество чисел Фибоначчи с данным количеством цифр по данному основанию ограничено константой, только надо уметь за приемлемое время узнавать номера этих чисел (то есть брать логарифм достаточно точно) с не более чем константной ошибкой. Думаю, хороший алгоритм сделает это за $\rm{O}(\log\log n)$, а плохой - за $\rm{O}(\log n)$, все равно следующий шаг сложнее. А дальше $\rm{O}(\log n)$ шагов с несколькими умножениями многократной точности, которые делаются где-то за $\rm{O}(\log n\log\log n)$. Итого $\rm{O}((\log n)^2\log\log n)$.

 Профиль  
                  
 
 Re: Как можно подтвердить принадлежность числа к Числам Фибо
Сообщение24.07.2007, 21:50 


24/07/07
2
maxal писал(а):
На самом деле, $n$ вычислять необязательно. Вместо этого можно воспользоваться формулой $F_{m+n} = F_{m+1} F_{n} + F_{m} F_{n-1}$ и удваивать индекс чисел Фибоначчи до тех пор, пока не будет получено число $F_{2^k}$ большее заданного, затем вычислить $F_{2^{k-1} + 2^{k-2}$ (по той же формуле) и т.д. По сути - это будет вариант дихотомии (двоичного поиска) на числах Фибоначчи.


Все же получается последовательный перебор. Мне понравилась идея:

tolstopuz писал(а):
Посчитайте $\frac{log(F\sqrt{5})}{log\frac{1+\sqrt{5}}{2}}$ и округлите. Это номер одного из двух окружающих $F$ чисел Фибоначчи. Потом посчитайте это число и сравните с $F$.


Как вариант, сделать в два этапа: определится с предполагаемой областью вхождения, а заданную область пройтись одним из вариантов перебора?

 Профиль  
                  
 
 Re: Как можно подтвердить принадлежность числа к Числам Фибо
Сообщение24.07.2007, 22:41 
Модератор
Аватара пользователя


11/01/06
5660
dask писал(а):
maxal писал(а):
На самом деле, $n$ вычислять необязательно. Вместо этого можно воспользоваться формулой $F_{m+n} = F_{m+1} F_{n} + F_{m} F_{n-1}$ и удваивать индекс чисел Фибоначчи до тех пор, пока не будет получено число $F_{2^k}$ большее заданного, затем вычислить $F_{2^{k-1} + 2^{k-2}$ (по той же формуле) и т.д. По сути - это будет вариант дихотомии (двоичного поиска) на числах Фибоначчи.

Все же получается последовательный перебор.

Где же это последовательный?
$F_{2^k}$ (и все промежуточные степени) вычисляется за $O(k)$ арифметических операций. Каждое последующее число Фибоначчи при дихотомии - за O(1) операций каждое, и весь поиск займет $O(k)$ шагов.
Нетрудно видеть, что $k=O(\log\log n)$ (если точнее, то что-то типа $k=\lceil\log_2 \log_{\phi} n\sqrt{5}\rceil$). Вот и получается, что суммарная сложность такого поиска равна $O(\log\log n)$ арифметических операций.
Если умножение чисел длины $m$ производить за $O(m\log m)$ машинных операций (понятно, что сложение и сравнение также вписываются в эту оценку), то суммарную сложность можно оценить величиной $O(\log n(\log\log n)^2)$ машинных операций.
Никаких логарифмов вычислять не нужно, вся работа сводится к операциям сложения, умножения и сравнения целых чисел (примерно той же длины что и $n$).

Добавлено спустя 15 минут 34 секунды:

Так как придется хранить всего лишь $O(k)$ чисел, то расход памяти в данном алгоритме можно оценить как $O(\log n\log\log n)$ битов.

Добавлено спустя 17 минут 1 секунду:

P.S. Лучше работать не напрямую с числами Фибоначчи, а с матрицами вида
$$\begin{pmatrix} 1 & 1 \\ 1 & 0 \end{pmatrix}^n = \begin{pmatrix} F_{n+1} & F_n \\F_n   & F_{n-1}\end{pmatrix}$$
Понятно, что произведение матриц такого вида опять же является матрицей такого вида.

 Профиль  
                  
 
 Re: Как можно подтвердить принадлежность числа к Числам Фибо
Сообщение24.07.2007, 22:48 
Заслуженный участник


31/12/05
1480
maxal писал(а):
Нетрудно видеть, что $k=O(\log\log n)$ (если точнее, то что-то типа $k=\lceil\log_2 \log_{\phi} n\sqrt{5}\rceil$).
О, я вот здесь ошибся. Но в любом случае оценка по длине действительно неэффективна, проще сразу дихотомия.

 Профиль  
                  
 
 
Сообщение24.07.2007, 23:15 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
maxal писал(а):
P.S. Лучше работать не напрямую с числами Фибоначчи, а с матрицами вида …

Мне (для несколько иной задачи) показалось удобнее работать с парой $(L_n, F_n)$, где $L_n$ — числа Лукаса. Но это дело вкуса.

 Профиль  
                  
 
 Re: Как можно подтвердить принадлежность числа к Числам Фибоначч
Сообщение25.12.2009, 03:59 
Модератор
Аватара пользователя


11/01/06
5660
Еще один вариант теста:
число $m$ является числом Фибоначчи тогда и только тогда, когда либо $5m^2+4$, либо $5m^2-4$ является полным квадратом.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group