Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Алгоритмы / Математика / Теория чисел /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


НОД, решение ax+by=1, нахождение обратного элемента по модулю - Программирование от RIN.RU
НОД, решение ax+by=1, нахождение обратного элемента по модулю




Алгоритм Евклида.


  1. Вычислим r - остаток от деления числа a на b, a = bq+r, 0 <= r < b.

  2. Если r = 0, то b есть искомое число.

  3. Если r =/= 0, то заменим пару чисел (a,b) парой (b,r)
    и перейдем к шагу 1.



int NOD(int a,int b)
{
while(a!=0 && b!=0)
{
if(a>=b) a=a%b;
else b=b%a;
}
return a+b; // Одно - ноль
}


При вычислении наибольшего общего делителя (a,b) с помощью алгоритма Евклида будет выполнено не более 5p операций деления с остатком, где p есть количество цифр в десятичной записи меньшего из чисел a и b.


Бинарный алгоритм Евклида.


Этот алгоритм использует соотношения для НОД:


НОД(2*a, 2*b) = 2*НОД(a,b)
НОД(2*a, b) = НОД(a,b) при нечетном b,


Он иллюстрируется следующей программой:


m:= a; n:=b; d:=1;
{НОД(a,b) = d * НОД(m,n)}
while not ((m=0) or (n=0)) do begin
if (m mod 2 = 0) and (n mod 2 = 0) then begin
d:= d*2; m:= m div 2; n:= n div 2;
end else if (m mod 2 = 0) and (n mod 2 = 1) then begin
m:= m div 2;
end else if (m mod 2 = 1) and (n mod 2 = 0) then begin
n:= n div 2;
end else if (m mod 2=1) and (n mod 2=1) and (m>=n)then begin
m:= m-n;
end else if (m mod 2=1) and (n mod 2=1) and (m<=n)then begin
n:= n-m;
end;
end;
{m=0 => ответ=d*n; n=0 => ответ=d*m}




Алгоритм решения уравнения ax+by = 1.


  1. Определим матрицу E:
    E =( 1 0 )
    ( 0 1 )

  2. Вычислим r - остаток от деления числа a на b, a=bq+r, 0 <= r < b.

  3. Если r=0, то второй столбец матрицы E даёт вектор ( x, y ) решений уравнения.

  4. Если r =/= 0, то заменим матрицу E матрицей
    E *( 0 1 )
    ( 1 -q )

  5. Заменим пару чисел (a,b) на (b,r) и перейдем к шагу 2.




Вперед  >>>
 1  2 


 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь