Обозначим точку золотого сечения
. Натуральное
делит
, причем
- наименьшее из удовлетворяющих данному требованию, его и хочется найти. Идея простая: дробь
является хорошим приближением
, и существует вещественное
такое, что
, то есть
. Отсюда
. В знаменателе последней дроби целое число (обозначим его
- число, "домножающее"
до наименьшего Фибоначчи), сама дробь несократима, поскольку несократима
и должна входить подходящей дробью в разложение
. Тут требуется строгое доказательство, замечу только что
- "самая точная" дробь указанной последовательности, т.е. стоящая перед наибольшим знаком. Уже по этому признаку можно бы вести разложение до
в числителе, и задача решена. Однако, такой путь слишком затратен, гораздо проще вычислять
и далее
, воспользовавшись формулой Бине. Дело не только в том что
. Важно что
(из общих свойств Фибоначчи), а значит и по
. Таким образом
- палиндром, а для вычисления палиндрома достаточно полупериода (подробней об этом
здесь, глава "Палиндромы"). Приведу пример для
:
вот эта симметричная структура, "зажатая" между двумя большими знаками, которые отбрасываем за ненадобностью и есть
. Вычисления в данном случае занимают
шагов:
.
Преобразуем теперь
. Для практического применения удобна следующая схема в виде таблицы:
Тут
- знаки непрерывной дроби,
- знаменатели соответствующих подходящих дробей, остальные переменные можно считать вспомогательными. Вычисления ведутся до состояния
или
. В первом случае
как в примере (нечетный период), во втором
(четный период), и
. На этом можно бы и закончить, но хочется еще порассуждать. О существовании квазипростых относительно
читать не приходилось, но и доказательства не встречал что
свидетельствует о простоте
. Если есть инф. на русском языке, буду признателен. Так или иначе, если
простое, данные дискретного логорифма и
будут совпадать. Бывают ли квазипростые относительно разных алгоритмов - тоже интересный вопрос. Это всё к тому, что описанная процедура работает не только с рядом Фибоначчи, но и с другими последовательностями вида
. Остановлюсь подробней на случае
(начальные члены
). Отношение соседних членов стремится к точке
, общий член
и по аналогии с Фибоначчи
, из
следует
. Делимость на простые также по аналогии, только не по
, а по
, что важно: простое
вида
делит
, простое
вида
делит
. Для вычисления наименьшего члена, кратного данному модулю
разлагаем
в непрерывную дробь, и похожая таблица:
Остальное без изменений,
. Из четырех последовательностей таблицы единственная возрастающая и самая затратная для вычислений
является функцией от
и может вычисляться позже с остальных. Значит можно запустить объединенный алгоритм до наименьшего полупериода и только для него вычислять
. При тестировании на простоту отрицательного результата достаточно одного. Немного статистики. Расчет
для
потребовал на каждое
в среднем
знака полупериода, при объединенном алгоритме - 47 знаков. При том что числа для вычисления
понадобились значительно меньшие, а можно ведь запустить и тройной алгоритм, и более того :)
Вопрос факторизации
в свете сказанного выложен отдельно
https://dxdy.ru/post1335397.html#p1335397.