- •Глава 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 (modP), то=;
= 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).