Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Поиск неизвестной повторяющейся подстроки

#java #алгоритм


Есть длинная периодическая дробь по произвольному основанию, как найти её период?
Т.е. найти повторяющуюся подстроку. 
    


Ответы

Ответ 1



Надо считать цифры с шагом 1 и шагом 2 одновременно. Когда остатки от деления совпадут, это будет означать, что ты находишься внутри периода. С этого мета просчитываешь ещё один цикл до получения того же остатка - так определяется длина периода. Если нужно ещё минимальное начала периодической части, то считаешь заново две последовательности, одна из которых впереди на длину периода. Когда остатки совпадут, начало будет найдено. В первой части можно вместо одновременного вычисления один раз промотать вперёд на длину заведомо большую длины предпериода (т. е. значение знаменателя).

Комментариев нет:

Отправить комментарий