Техника защиты компакт-дисков от копирования


Деление в полях Галуа


Деление в полях Галуа осуществляется практически точно так, как и умножение с той лишь разницей, что индексы не прибавляются, а вычитаются друг из друга. В самом деле: a/b== 2i/2j == 2(i –- j). Для перевода из полиномиальной в индексную форму и наоборот может использоваться уже приводимая выше таблица look-up таблица.

Естественно, не забывайте о том, что какими бы "извращенными" поля Галуа ни были, а на нуль даже в абстрактной арифметике делить нельзя и функция деления должна быть снабжена соответствующей проверкой.

Листинг 21.16. Функция быстрого табличного деления в полиномов в полях Галуа

// функция возвращает результат деления

// двух полиномов a на b в полях Галуа

// при попытке деления на ноль функция

// возвращает -1

int gf_div(int a, int b)

{

    int diff;

    if (a == 0) return 0;                // немного оптимизации не повредит

    if (b == 0) return -1;               // на ноль делить нельзя!

    diff = alpha_of[a] – alpha_of[b];    // вычисляем разность индексов

    if (diff < 0) diff += GF-1;          // приводим разность к модулю GF

    return index_of[diff];               // переводим результат в полиномиальную…

                                         // …форму и возвращаем результат

}



Содержание раздела