Доброго времени суток!
Окончательно запутался с этим методом и прошу помощи у более опытных и знающих членов сообщества.
Допустим есть число до 1018, требуется его факторизовать.
Очевидно, что делители до 106 легко перебираются в лоб. Остальные делители будем, допустим, искать методом факторизации Ферма. Какова будет сложность в худшем случае?
2 года назад в тренировке 2011-2012 Waterloo Local Contest, 19 June, 2011 я сдал задачу на факторизацию с 106 итерациями и с тех пор поверил, что этот метод фактически работает за кубический корень для чисел до 1018.
Однако теперь я внезапно наткнулся на то, что число 100000007700000049 = 1000000007 * 100000007 совсем не хочет раскладываться с таким количеством шагов. Причиной заблуждения, что тот код был верный оказались предельно слабые тесты (в тестах было лишь на 2 числа больше, чем в примерах входных данных)
Теперь хочется узнать — это неверное понимание работы метода или его неверное применение?
Пример кода можно найти на e-maxx
В Википедии поясняется, что метод работает за .
Числа порядка 1018 довольно шустро факторизуются ρ-алгоритмом Полларда, ожидаемое время работы которого — , где p — наименьший простой делитель числа n.
Спасибо за пояснение! "Удачный" AC двухлетней давности сформировал ошибочное мнение, что перебрав делители до 106 оценка в квадратный корень снижается до кубического. Даже стыдно стало :)
Есть ещё такой тест на простоту. Правда я не могу точно сказать его асимптотику
Prime Test
Это наверняка тест Ферма http://habrahabr.ru/post/205318/
Может будет полезен старый тред на эту тему: http://mirror.codeforces.com/blog/entry/2689