9. Куликов А. С., Федин С. С. Автоматические доказательства верхних оценок на время работы алгоритмов расщепления // Теория сложности вычислений. IX. Зап. научн. сем. ПОМИ. СПб., 2004. Т. 316. С. 111-128.
10. Быкова В. В. Математические методы анализа рекурсивных алгоритмов // Журнал Сибирского федерального университета. Сер. Математика и физика. 2008. №1(3). С. 236-246.
УДК 519.6
К РЕШЕНИЮ БОЛЬШИХ СИСТЕМ СРАВНЕНИЙ
К. Д. Жуков, А. С. Рыбаков
Пусть дано конечное множество 5 натуральных чисел, такое, что почти все его элементы попарно взаимно просты. Рассматривается алгоритм нахождения всех элементов в € 5, таких, что (в, в') > 1 для некоторого в' € 5, в' = в, который позволяет сводить произвольную систему полиномиальных сравнений к нескольким системам с взаимно простыми модулями.
Ключевые слова: взаимно простая база, наибольший общий делитель, дерево наибольших общих делителей, НОД слиянием.
Определение 1. Пусть Б — конечное подмножество натуральных чисел. Взаимно простой базой для Б называется конечное подмножество натуральных чисел В, такое, что любое число из Б представляется в виде произведения элементов из В и любые два элемента множества В взаимно просты.
Взаимно простые базы используются в ряде приложений, например при решении систем сравнений в целых числах [1].
Пусть задана система полиномиальных сравнений вида /Дх) = 0 (mod а^), г = = 0,1,...,т — 1, где х — набор переменных. Построим для множества чисел
(ао,... ,ат-1} взаимно простую базу (Ь0,... ,Ьг-1}. Для каждого элемента нужно последовательно составить системы сравнений по модулям Ь^, где I = 1, 2,... ,tj, а — максимальное, для которого найдётся а^, делящееся на Ь^. В эти системы войдут те уравнения / (х) = 0, для которых число а% делится на ^. Поднимая по лемме Гензеля решения от системы к системе, получим множество решений по модулю Ь?. Найдя такие решения для каждого Ьj, применим китайскую теорему об остатках, чтобы получить решения вида х то^ [] Ь^. Каждое такое решение будет решением исходной
j
системы.
Построение взаимно простой базы применяется и в других приложениях, например в задачах нахождения алгебраических зависимостей среди радикалов [2], вычисления нормальных базисов в расширениях полей [3] и др. [4].
В работе [4] Д. Бернштейн предложил алгоритм построения взаимно простой базы с некоторыми дополнительными свойствами, называемой естественной взаимно простой базой.
Ниже предлагается подход к построению взаимно простой базы для специального случая. Подход эффективен, когда заранее известно, что нетривиальная часть взаимно простой базы (элементы, отличные от 1 и не содержащиеся в Б) достаточно мала. Метод состоит в том, чтобы быстро отбросить элементы в € Б, такие, что (в, в') = 1 для любого в' € Б, в' = в. Для остальных чисел можно применить известные алгоритмы построения взаимно простой базы.
С помощью известного алгоритма вычисления НОД слиянием можно проверить, являются ли все элементы множества Б взаимно простыми. Данный алгоритм заключается в вычислении наибольших общих делителей в дереве произведений элементов множества Б. С помощью небольшой модификации можно получить алгоритм 1 для выявления элементов в Е Б, имеющих нетривиальный НОД с некоторым элементом
из S \ {s}. Везде далее через lg обозначен логарифм по основанию 2.
Алгоритм 1
Вход: Б = {а0,... , ат-1} —множество различных п-битовых натуральных чисел (для
упрощения m — степень двойки)
Выход: Т — подмножество Б, такое, что для любого в Е Т и для некоторого в' Е Б,
в' = в, выполняется условие (в, в') > 1.
1 Для всех г = 0,..., т — 1
—— Яг.
2 Для всех г = 1, 2,..., ^ т
З Для всех ] = 0,1,..., 21®т-г — 1
4 Л — (а^, а2^+1).
5 Если Л =1, то
б Для всех 1 = ]2г,]2г + 1,..., (] + 1)2г — 1
Т Если (Л, аг) = 1, то
Т — Т и {аг};
В а^ — ^ ■ а2^+1.
9 Вывести Т
Важное свойство алгоритма 1 заключается в том, что в памяти нужно хранить только текущий уровень дерева, а не всё дерево. Отсюда следует, что алгоритму 1 требуется O(mn) битов памяти. Трудоёмкость алгоритма складывается из трудоёмкости вычисления дерева наибольших общих делителей (O(mn lg m lg2 (ny^) lglg(mn)) битовых операций) и трудоёмкости всех вызовов цикла в строках 6 и 7 (O(kmnlgmx х lg(kn) lglg(kn)) битовых операций, где k = |T|).
Несложно видеть, что при k < lg2(mn) трудоёмкость описанного алгоритма не превосходит оценки трудоёмкости алгоритма Бернштейна в O(mn lg m lg (nm) lglg(mn)) битовых операций.
Известен ещё один подход к выявлению множества T, вытекающий из работы [5].
m— 1
Вычисляется произведение U = П ai с помощью дерева произведений. Затем вычис-
i=0
ляются величины bi = U mod a2, i = 0,... , m — 1, с помощью дерева остатков. На выход подаются те числа ai, для которых (bi/ai,ai) = 1. Трудоёмкость построения деревьев произведений и остатков оценивается в O(mn lg m lg(nm) lglg(mn)) битовых операций. При этом построение дерева остатков требует O(mnlgm) битов памяти, что в lgm раз больше, чем требуемая память для алгоритма 1.
ЛИТЕРАТУРА
1. Bach E., Miller G, and Shallit J. Factor refinement // J. Algorithms. 1993. No. 15. P. 199-222.
2. Smedley T. J Detecting algebraic dependencies between unnested radicals: extended abstract // Proc. Intern. Symp. on Symbolic and Algebraic Computation. Tokyo, Japan, 1990. P. 292-293.
3. Luneburg H. On a little but useful algorithm // AAECC’85. LNCS. 1986. V. 229. P. 296-301.
4. Bernstein D. J. Factoring into coprimes in essentially linear time // J. Algorithms. 2005.
No. 54(1). P. 1-30.
5. Bernstein D. J. Scaled reminder trees // http://cr.yp.to/papers.html#scaledmod УДК 519.688
ОПТИМИЗАЦИЯ (р — 1)-АЛГОРИТМА ПОЛЛАРДА
А. С. Климина
Приведены критерии выбора параметров (р — 1)-алгоритма Полларда и рассмотрен метод его оптимизации.
Ключевые слова: (р — 1)-алгоритм Полларда, факторизация чисел.
Рассмотрим (р — 1)-алгоритм Полларда факторизации числа N [1]. Алгоритм состоит из следующих шагов.
Шаг 1. Выбираем число k.
Шаг 2. Выбираем произвольное a, 1 < a < N.
Ш а г 3. Вычисляем d = (а, N). Если d > 1, получили нетривиальный делитель N.
Шаг 4. Вычисляем D = (ak — 1,N). Если 1 < D < N, то D — нетривиальный делитель N. Если D = 1, возвращаемся к шагу 1, а при D = N — к шагу 2.
Вопрос оптимального выбора параметра k не исследован до настоящего времени с нужной полнотой. Автором реализованы следующие подходы к выбору числа k: k — произведение нескольких случайных чисел; k — факториал некоторого числа, k — произведение степеней простых чисел; k — наименьшее общее кратное нескольких чисел. После анализа работы программы выбран третий метод, поскольку он работает быстрее остальных и даёт больше удачных разложений [2].
Зафиксируем a = 2 и рассмотрим работу (р — 1)-алгоритма Полларда при следующих допущениях:
1) k — произведение нескольких первых простых чисел в заданной степени;
2) исследуемое число N представляет собой произведение двух простых множителей, р и q.
Пусть D = (ak — 1, N); Op(a), Oq (a) —показатели числа а по модулям р и q соответственно. Возможны три случая:
1) k кратно ровно одному из чисел Op(a), Oq(a). В этом случае получим 1 < D < N, и нетривиальный делитель D найден;
2) k не кратно ни одному из Op(a), Oq(a). В этом случае D = 1;
3) k кратно и Op(a), и Oq(a). В этом случае D = N.
Таким образом, для удачного нахождения делителя N нужно выбрать параметр k не слишком большим и не слишком маленьким. Заметим, что k кратно Op(a) для любого a, если k кратно р — 1. Это, в свою очередь, гарантированно выполняется, если k является произведением всех простых чисел р ^ л/N/2 в степенях logp(\/N/2). Такой выбор k хорошо работает для сравнительно небольших чисел N, однако при увеличении числа N становится неприемлемым.
Предлагается следующий алгоритм выбора k в процессе работы программы.
Пусть k = рара .. .р“, где р1, ..., р^ — первые / простых, a — некоторая константа. Будем рассматривать изменение k только за счёт изменения количества простых /. Идея выбора / состоит в том, чтобы выбрать его не слишком большим и не слишком малым, исходя из результатов работы программы (при слишком малом значе-