Page 24 - 4395
P. 24

  INVOLUTION — піднесення до степеня за модулем.
                         Далі описано вказані функції і головний модуль програми.
                         Функція  INVERSE  (див.  В.2)  реалізує  розширений  алгоритм
                 Евкліда [1, c. 58-60]. SCRIPT-файл для цього алгоритму наведений у

                 додатку В. У програмі цей SCRIPT-файл перетворений на функцію.
                         Центральною тут є вбудована функція MatLab

                                      [G,C,D] = gcd(A,B), A, B > 0,

                 яка  повертає  найбільший  спільний  дільник  G,  а  також  цілі

                 коефіцієнти  C і D, таки що

                                      А.*С + В.*D = G.

                        Якщо G = 1, то це рівняння є діофантовим, отже добутки А*С
                 та  В*D  дорівнюють  одиниці  за  певним  модулем,  тобто  є  взаємно
                 оберненими:

                                      А*С = - В*D + 1;

                                      B*D = - A*C + 1.

                         Останнє і означає, що

                                      А*С mod B = 1;
                                      B*D mod A = 1;
                 або
                                        -1
                                      A  mod B = C mod B;
                                        -1
                                      B  mod A = D mod A.

                        Для  наших  цілей  достатньо  повертати  лише  дві  величини
                 (рядок 7),  а саме

                                      [G,C] = gcd(Z,E),

                 де Z - вхідне число, Е - значення модуля.

                        Після перевірки умови G = 1 за допомогою оператора IF (рядок
                 8) обернене до Z за модулем Е знаходиться за формулою (рядок 9)
                 invZ=mod(C,E).  Якщо  умова  G  =  1  не  виконується,  виводиться

                 повідомлення: “Z i E – не взаємно прості числа!” (рядок 11), після
                 чого  оператор  KEYBOARD  передає  управління  до  клавіатури.  У
                 цьому режимі доступні всі модулі програми і всі засоби MatLab, що
                 дозволяє  виправити  помилки.  Для  повернення  у  програму,  що

                 виконується, необхідно ввести команду RETURN. При цьому робота
                 програми починається з оператора, наступного після  KEYBOARD.
                        Функція  INVOLUTION  призначена  для  піднесення  цілого

                 числа до степеня за модулем.

                                                              24
   19   20   21   22   23   24   25   26   27   28   29