Блог пользователя NVAL

Автор NVAL, история, 9 лет назад, По-русски

Доброго времени суток!
Окончательно запутался с этим методом и прошу помощи у более опытных и знающих членов сообщества.
Допустим есть число до 1018, требуется его факторизовать.
Очевидно, что делители до 106 легко перебираются в лоб. Остальные делители будем, допустим, искать методом факторизации Ферма. Какова будет сложность в худшем случае?
2 года назад в тренировке 2011-2012 Waterloo Local Contest, 19 June, 2011 я сдал задачу на факторизацию с 106 итерациями и с тех пор поверил, что этот метод фактически работает за кубический корень для чисел до 1018.
Однако теперь я внезапно наткнулся на то, что число 100000007700000049 = 1000000007 * 100000007 совсем не хочет раскладываться с таким количеством шагов. Причиной заблуждения, что тот код был верный оказались предельно слабые тесты (в тестах было лишь на 2 числа больше, чем в примерах входных данных)
Теперь хочется узнать — это неверное понимание работы метода или его неверное применение?
Пример кода можно найти на e-maxx

  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

В Википедии поясняется, что метод работает за .

Числа порядка 1018 довольно шустро факторизуются ρ-алгоритмом Полларда, ожидаемое время работы которого — , где p — наименьший простой делитель числа n.

  • »
    »
    9 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

    Спасибо за пояснение! "Удачный" AC двухлетней давности сформировал ошибочное мнение, что перебрав делители до 106 оценка в квадратный корень снижается до кубического. Даже стыдно стало :)

»
9 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится

Есть ещё такой тест на простоту. Правда я не могу точно сказать его асимптотику

Prime Test

»
9 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Может будет полезен старый тред на эту тему: http://codeforces.me/blog/entry/2689