Методы факторизации натуральных чисел. Ишмухаметов Ш.Т. - 135 стр.

UptoLike

Составители: 

Глава 4. Метод квадратичного решета 136
только тривиальные решения:
Н.О.Д. (n, A + B) = n, Н.О.Д. (n, A B) = 1
Программа решения системы методом Гаусса
Приведем текст программы на языке Pascal для описанного выше алгоритма
(исходные параметры mt, nt число строк и столбцов соответственно).
Матрица A матрица системы размерности mt×nt, а Е единичная матрица
размерности mt × nt. Массив OrdRow[1..mt] нумерует строки системы.
Исходные значения его элементов равны OrdRow[i] = i для 1 i mt.
При необходимости перестановки строк с целью вывода на позицию A[k, k]
ненулевого элемента, мы просто меняем ссылки на строки в массиве OrdRow:
Procedure Gauss(mt,nt:int64;var A,E:SysMatr);
var
i,j,k,c:integer;
Begin
k:=1; { k enumerates rows of matrix }
While k<=mt do
begin
j:=k;
{Search for a non-zero element in the column k:}
while (A[OrdRow[j], k] = 0) And (j <= mt) do inc(j);
if j > mt then { Case when all elements below A[k,k] are 0 }
begin
inc(k); continue;
end;
If j > k then { Case A[k,j]>0.Exchange k and j rows }
begin
c := OrdRow[j]; OrdRow[j]:=OrdRow[k];OrdRow[k]:=c;
end;
i:=k;
Глава 4. Метод квадратичного решета                                     136

только тривиальные решения:

 Н.О.Д. (n, A + B) = n, Н.О.Д. (n, A − B) = 1

Программа решения системы методом Гаусса

Приведем текст программы на языке Pascal для описанного выше алгоритма
(исходные параметры mt, nt – число строк и столбцов соответственно).
Матрица A – матрица системы размерности mt×nt, а Е – единичная матрица
размерности mt × nt. Массив OrdRow[1..mt] нумерует строки системы.
Исходные значения его элементов равны OrdRow[i] = i для 1 ≤ i ≤ mt.
При необходимости перестановки строк с целью вывода на позицию A[k, k]
ненулевого элемента, мы просто меняем ссылки на строки в массиве OrdRow :
  Procedure Gauss(mt,nt:int64;var A,E:SysMatr);
  var
        i,j,k,c:integer;
  Begin
     k:=1; { k enumerates rows of matrix }
     While k<=mt do
     begin
         j:=k;
             {Search for a non-zero element in the column k:}
         while (A[OrdRow[j], k] = 0) And (j <= mt) do inc(j);
         if j > mt then { Case when all elements below A[k,k] are 0 }
         begin
             inc(k); continue;
         end;
         If j > k then { Case A[k,j]>0.Exchange k and j rows }
         begin
             c := OrdRow[j]; OrdRow[j]:=OrdRow[k];OrdRow[k]:=c;
         end;
         i:=k;