- •Глава 1. Численные методы алгебры § 1. Элементарная алгебра
- •1.1. Комплексная арифметика. Извлечение корней n -й степени из комплексного числа
- •1.2. Комбинаторика. Бином ньютона и родственные формулы
- •1.3. Вычисление символа якоби
- •1.4. Разложение многочлена на множители
- •1.5. Вычисление корней полиномов с целыми коэффициентами в форме простых дробей
1.3. Вычисление символа якоби
Символ Якоби
-
функция, определяемая
для всех целых a, взаимнопростых,
с заданным нечетным целым числом
P > 1. Так, если P = p1 p2
...pr - разложение
числа P на простые сомножители
не обязательно различные, то
,
где
- символы Лежандра [Виноградов,
1953], т.е.
арифметические функции чисел a
и рi , определенные
для простых нечетных рi
и целых а, не делящихся на P,
причем
=
1, если сравнение x2 º
a(mod pi) разрешимо,
а в противном случае
=
-1. Часто символ Лежандра, а
следовательно, и символ
Якоби, который является его
обобщением, доопределяют для чисел
a, делящихся на pi
(для символа Якоби соответственно на
P), полагая, что в этом случае
=
0. Символ Якоби обладает свойствами,
аналогичными свойствам
символа Лежандра, а именно:
если a º b (mod P), то
=
;
= 1;
;
=
.
;
,
где P, Q - положительные нечетные взаимно простые числа (квадратичный закон взаимности, который впервые доказан для символа Лежандра Гауссом в 1876 г.);
;
.
Перечисленные свойства позволяют легко вычислять символ Якоби, не прибегая к решению сравнений. Заметим, что при фиксированном P символ Якоби является действительным характером мультипликативной группы классов вычетов по модулю P.
Процедура syjac,
построенная по алгоритму, учитывающему
приведенные свойства, вычисляет
значение символа Якоби
по квадратичному
закону взаимности. При этом
полагается следующее (табл.
1.4):
Таблица 1.4
Условие |
Значение символа Якоби ... |
P - четное |
Не определено |
P - нечетное |
2 |
P - простое и a является квадратичным невычетом числа m |
- 1 |
Если a и P имеют нетривиальный общий множитель |
0 |
Остальные случаи |
1 |
Формальные параметры процедуры. Входные: a, p (тип integer). Выходной: r (тип integer) - значение символа Якоби.
procedure syjac (a, p : integer; var r : integer);
var k : integer; z, q : boolean;
label : start, cycle;
Function parity (x:integer): boolean;
{ *** значение функции parity true, если х -
четное, и false - в противном случае *** }
begin
if (x div 2 * 2) = x then
parity := true
else
parity := false;
еnd; {***parity***}
begin
start:
if not parity (p) then
begin
r := 2:
exit;
end;
z := true;
cycle:
repeat
a:=a - a div p * p;
q := false;
if a > 1 then
begin
while not parity (a) do
begin
q:= not q;
a:=a div 2;
end;
if q and parity ((sqr(p)-1) div 8) then
Z := not Z;
if a 1 then
begin
if parity((p-1)*(a-1) div 4) then
z:= not z;
k:=p;
p:=a;
a:=k;
end;
until a <= 1;
if a=0 then
r:= 0
else
if z then
r := 1
else
r:= -1;
end.
Приведенный алгоритм был переведен авторами с языка ALGOL на язык PASCAL и проверен на машине IBM PC/AT-286 для тех же значений входных параметров, что и в работе Агеева (1976). В результате тестирования было получено:
= 1 (a = 5 - квадратичный вычет);
= -1 (a = 3 - квадратичный невычет);
= 2 (p = 12 - четное), что полностью
соответствует
результатам тестирования
программы на языке ALGOL, приведенным
в работе Агеева и др. (1976).
