Если вы используете существующие функции факторинга, эту проблему можно решить за считанные минуты.
для 200-битных случайных чисел. Например, функции факторинга от Pari/GP.
Приведенный ниже алгоритм не просто факторизует последовательные числа. Смотри ниже.
Вот общий алгоритм, который был преобразован в рабочий
программа:
Сгенерировать W, случайное 200-битное число
предел сетки = 250
праймлимит = 2000000
предварительно вычислить pr = произведение первых предельных простых чисел
Для n1 = от W+1 до W+предел сита
Если n1 имеет вид 6k+1 или 6k+5
если gcd(n1,pr) равен 1
f = коэффициент (n1)
если число факторов n1 равно 2 и оба >2^50
распечатать решение f
Петля
Линия:
если gcd(n1,pr) равен 1
— это быстрый способ пропустить числа с простыми множителями ниже 2-миллионного простого числа.
Шаг precompute pr оптимизирован в Pari/GP и занимает всего 7,785 секунды на медленном оборудовании.
Для наихудшего случая 200-битного числа факторная функция в Pari/GP использует метод MPQS и занимает менее 30 секунд на старом оборудовании.
Вот случайное 200-битное число W:
1567470448908230034126591070540826459978233372650796513704199
Программа факторизует только одно число W+10 и находит решение
р1 = 5346955435967300929
р2 = 293151956787285973328498761492202409914321
p1 — 63 бита, p2 — 138 бит, n = p1*p2
|W-n| = 10, |W-n|< 2^12