Хочу предложить еще один способ факторизации чисел.
Алгоритм его реализации следующий:
Дано число

.
Выбираем квадрат числа, превышающий

, например,

.
Определяем остаток
Далее:
1. Проверяем не является ли полученный остаток квадратом какого-либо числа. Если – да, то проводим факторизацию аналогично методу Ферма. Если – нет, переходим к следующему пункту.
2. Проверяем, не имеют ли

общих делителей. Если – нет, то переходим к следующему пункту.
3. Производим последовательную проверку на наличие общих делителей у чисел

и
![$ [(D+i)^2-c] $ $ [(D+i)^2-c] $](https://dxdy-04.korotkov.co.uk/f/7/a/b/7ab52a550335b92297c7e5639a8cfbcb82.png)
, где

, а

- ближайший квадрат числа, превосходящий

.
Естественно, что для реализации данного способа потребуется промежуточная факторизация большого количества чисел, но на мой взгляд, общая трудоемкость может быть меньше, чем у способов факторизации с применением решета Эратосфена и метода Ферма.
Преимущество заключается в следующем:
1.Если отношение

близко к единице, то должна получиться факторизация по Ферма (п. 1).
2.Если отношение

отлично от упомянутого, то количество проверяемых чисел меняется периодически от

до

, т.е. в любом случае не превосходит количество чисел, проверяемых решетом Эратосфена. Эта периодичность зависит от того, какое число

выбрал дешифровальщик для проверки, поэтому бОльшая или меньшая трудоемкость не может быть заранее запрограммирована шифровальщиком.