Задано натуральное число
, которое при делении на
даёт остаток, отличный от
. Два следующих алгоритма находят натуральные числа
и
, удовлетворяющие условиям
и
, с наименьшей возможной разностью
.
Количество шагов в методе Фурье равно
. Модифицированный алгоритм может выполнять меньшее число шагов, но не обязательно будет быстрее, так как каждый шаг сложнее и требует больше времени.
Переменная
является счётчиком шагов (фактическое число шагов равно
). Эта переменная полезна для досрочного окончания работы программы.
Обычно рекомендуется прогонять алгоритм не только для числа
, но и для ряда чисел вида
, где значения
выбираются так, чтобы остаток от деления
на
отличался от
. Если удастся подобрать такое
, чтобы
было произведением двух достаточно близких множителей, то метод Фурье может найти их существенно быстрее.
Алгоритм метода Фурье.
1) Начальные значения:
,
.
2) Вычислить
,
,
. Если число
не целое, повторить пункт 2).
3) Вычислить
,
. Закончить работу.
Алгоритм модифицированного метода Фурье, который предлагает
Побережный Александр.
1) Присвоить
и
. Если
, то присвоить
и закончить работу.
2) Вычислить
и
.
3) Начальное значение:
; если
, то присвоить
.
4) Начальное значение:
.
5) Если число
целое, перейти в пункт 7).
6) Вычислить
,
,
и перейти в пункт 5).
7) Вычислить
,
. Закончить работу.
Примеры. Windows 7. Wolfram Mathematica 9.0. Четырёхъядерный процессор Intel(R) Xeon(R) X3320 2.50GHz. Время работы — в секундах.
Пример 9. В таблицу не влезает.
Число шагов в обоих алгоритмах одинаковое:
.
Метод Ферма: время работы равно
с,
,
.
Метод Побережного: время работы равно
с,
,
.
В общем, обсуждаемый метод может быть существенно эффективнее первоначального метода Фурье, если числа
и
сильно различаются, и хватит терпения дождаться результата. Может быть, автору следует подумать над тем, чтобы запустить метод в обратном направлении. В поиске сильно различающихся делителей он может быть эффективным.
Насколько этот метод новый — понятия не имею.