VladimirVK писал(а):
Конечно , как и многие , пытаясь найти "самый" быстрый
метод факторизации чисел , я и обнаружил этот , на мой взгляд интересный , факт. А с факторизацией это может быть связано следующим образом (опять же интуитивно кажется): при заданном числе А , подлежащим факторизации , найти соответствующие остатки от приделения на 3,4,5,8,12,16 ... и затем найти такой минимальный квадрат , который в сумме с получеными остатками даст при делении опять же на 3,4,5,8,12,16 ... остатки являющиеся квадратами.
А зачем вам при таком подходе нужны именно остатки являющиеся квадратами как целые числа? Как я понял, вам всего лишь необходимо проверять может ли данный остаток быть получен от деления квадрата или нет. Но на этот вопрос есть простой ответ, особенно если остатки рассматриваются от деления на простое число (заметьте, любое простое!) - а именно он дается
символом Лежандра.
Теперь по существу метода как такового. Если представить
в виде разности квадратов, скажем
, то
и
будут порядка величины
. Например, в случае ala RSA для
с
нетривиальное разложение единственно:
.
Предположим теперь, что вы хотите найти
и
по модулям маленьких простых
, а затем получить и сами числа с помощью китайской теоремы об остатках. Чтобы гарантировать восстановление
по их остаткам от деления на выбранные простые нужно, чтобы произведение этих простых было больше
(в примере с RSA это непосредственно вытекает из неравенства о средних:
). Теперь прикинем объем вычислений.
По модулю каждого простого
имеется около
различных остатков являющихся квадратами, и поэтому сравнение
будет в среднем иметь около
решений
. Таким образом, суммарно придется перебрать и скомпоновать по китайской теореме об остатках около
. Заметим, что вклад каждого простого в это произведение либо меньше (это хорошо!), либо больше (это плохо!) чем 1, в зависимости от того меньше
чем 4 или нет. Но простых меньших 4 у нас всего-то раз, два и обчелся. Поэтому с ростом
(и
) объем работ у нас неизменно растет, хотя с маленькими простыми скорость роста меньше. Так как произведение простых у нас в районе
(см. выше), то объем работ примерно выражается формулой
, и мы заинтересованы в росте
, а следовательно в выборе как можно меньших простых. Поэтому можно предполагать, что
- это первые
простых чисел в их естественном порядке.
Например, для 512-битного
потребуется около 50 первых простых, что дает выигрыш (не считая накладных расходов!) всего лишь в
раз по сравнению с тупым поиском делителей в отрезке
, что соответствует суммарному количеству итераций порядка
. Для 1024-битного числа количество итераций будет уже
и т.д.
В общем, игра не стоит свеч.