Текст
                    ПЛ> ШШ
}
п. нод
KIITTE
АЛ» БРАИЧЕСКАЯ
АЛГОРИТМИКА
С упражнениями и\решениями
ИЗДАТЕЛЬСТВО «МИР»


АЛГЕБРАИЧЕСКАЯ АЛГОРИТМИКА
LOGIQUE MATHEMATIQUES INFORMATIQUE ALGORITMIQUE ALGEBRIQUE Avec exercices corriges Patrice NAUDIN MaTtre de conferences a I'universite de Bordeaux I Claude QUITTE MaTtre de conferences a I'universite de Poitiers Preface de Francis SERGERAERT MASSON Paris Milan Barcelone Bonn 1992
Патрис НОДЕН, Клод КИТТБ АЛГЕБРАИЧЕСКАЯ АЛГОРИТМИКА С упражнениями и решениями Предисловие Франсиса Сержераера Перевод с французского В.А. Соколова под редакцией Л.С. Казарина Рекомендовано Научно-методическим советом по прикладной математике Учебно-методического объединения университетов для использования в учебном процессе для студентов вузов по специальности «Прикладная математика» и «Прикладная математика и информатика» МОСКВА «МИР» 1999
УДК 512+519.6 ББК 22.14+22.19 Н72 Ноден П., Китте К. Н72 Алгебраическая алгоритмика (с упражнениями и решениями): Пер. с франц. — М.: Мир, 1999. — 720 с, ил. ISBN 5-03-003318-1 Книга известных французских математиков — это по существу энциклопедия алгоритмов алгебры и теории чисел от Евклида и до наших дней. В ней прослеживается общая идея — представить основные алгебраические структуры и концепции в виде объектов, поддающихся машинной обработке. Главными для авторов являются два вопроса: что значит вычислить математический объект и как его вычислить наиболее эффективно. Изложение отличается методическими достоинствами: тщательный отбор материала, многочисленные замечания теоретического и исторического характера, большое число упражнений с решениями в конце каждой главы. Для математиков-прикладников, для всех изучающих и применяющих компьютерную алгебру и информатику как учебное и справочное пособие. ББК 22.144-22.19 Издание осуществлено при поддержке Российского фонда фундаментальных исследований по проекту 97-01-14001 Издание осуществлено в рамках программы помощи издательскому делу «Пушкин» при поддержке Министерства Иностранных Дел Франции и Посольства Франции в России Редакция литературы по математическим наукам ISBN 5-03-003318-1 (русск.) ISBN 2-225-82703-6 (франц.) © Masson, Pahs, 1992 © перевод на русский язык, «Мир», 1999
Предисловие переводчика и редактора перевода Со времени появления монографии Г. Биркгофа и Т. Барти «Современная прикладная алгебра» (28 лет тому назад) сочетание прилагательных «прикладной)) и «абстрактный» в применении к алгебре перестало шокировать или изумлять читателей. Прилагательное «современный», разумеется, должно исчезнуть по мере разрастания теории и завоевания все новых территорий (переведенная недавно книга Р. Лидла и П. Пильца тому свидетельство). Более интересным является сопоставление компьютерной математики и алгебры, появившееся сравнительно недавно, а уж алгебраическая алгоритмика и вовсе должна вызвать ассоциацию с «маслом масляным», ибо корни обоих понятий (алгебра и алгоритм), как известно, одни и те же. Тем не менее, несмотря на близкое родство, алгоритмика (читай, информатика) и алгебра длительное время развивались как бы обособленно, хотя слово «метод» в учебниках по высшей алгебре вытеснялось постепенно словом «алгоритм», а в информатику проникли модули и тензорные произведения. Вопросы сложности вычислений, явившиеся краеугольным камнем для информатики, позволили поставить весьма интересные чисто алгебраические задачи. Стало ясно, что в алгебре можно вычислять, даже если исходные вопросы касаются таких субстанций, как модуль, кольцо, группа. А раз можно вычислять, то нужно вычислять как можно быстрее, ибо уже студенту-первокурснику понятно, что «грубая сила» машины не сможет выручить при решении некоторых совсем простых, на первый взгляд, задач. Многие алгоритмы алгебры, с которыми нам приходилось сталкиваться в жизни, становились известными из математического фольклора, другие изобретались самостоятельно (ибо посмотреть было негде). Потом появился изумительный Д. Кнут (Искусство программирования), пугающий своей фундаментальностью, куда все-таки приходилось заглядывать, невзирая на известные трудности. А что делать студенту? Книга «Алгебраическая алгоритмика» явилась нам неожиданно во всем своем блеске благодаря знакомству с ее авторами, работавшими в Пуатье. Начав работать, мы оба поняли, что этой-то книги нам не хватало и как преподавателям, и как математикам-профессионалам.
6 Предисловие переводчика и редактора перевода С одной стороны, — это новый взгляд на вещи, казавшиеся устоявшимися. Например, что может быть проще алгоритма Евклида или возведения в степень? С другой, некоторая систематизация, азбука информатики (как мы мечтали 30 лет тому назад о каталоге полиномиальных алгоритмов!). Наконец, это философия программирования, изложенная на небольшом пространстве и без присущего сугубым профессионалам высокомерия. В то же время книга читается (мы отмечаем это с некоторым ужасом) как художественная, беллетристическая литература. Чего стоит одно дерево Штерна — Броко из задачи 35 в главе II! Основной материал книги сопровождается огромным количеством упражнений (их около 300, но некоторые из упражнений содержат в себе от 3 до 5 задач), примеров, иллюстраций. Студента несомненно порадует то обстоятельство, что большинство упражнений приводится с решением (не сразу, а через несколько страниц). Пересечение с другими известными нам книгами по алгоритмике невелико. Книга П. Нодена и К. Китте восполняет пробел, существовавший в литературе на русском языке (и по математике, и по информатике), и может быть использована для чтения специальных и основных курсов как для студентов-математиков, так и для информатиков. Кроме того, она, будучи использована в качестве дополнительного источника, окажется несомненно полезной при чтении курсов «Алгебра и теория чисел» и «Алгебра и геометрия». Следует отметить, что терминология, применяемая французскими математиками, не вполне совпадает с принятой в нашей литературе. Так, натуральный ряд начинается с нуля, а не с 1, как обычно принято у нас. Отсюда появление обозначения N*. Приведение матрицы к ступенчатому виду осуществляется по столбцам, а не по строкам, причем имени Гаусса авторы в этой связи не упоминают. Есть и другие мелкие детали, которые читатели, несомненно, заметят. Что ж, это заставляет читателя быть внимательным! Приятно отметить, что в подготовке к изданию перевода книги активное участие приняли наши ученики и студенты СВ. Монахов, СМ. Медведев (подготовившие оригинал-макет русского перевода), И.А. Сагиров, Л.В. Гудкова, А.В. Хлямков, А.Е. Скрипкин. Мы им выражаем нашу глубокую благодарность. Мы также признательны заведующему лабораторией теоретико-групповых методов профессору А.Л. Онищику за предоставление технических средств для верстки этой книги. Мы благодарны издательству MASSON, давшему согласие на передачу права на издание перевода книги издательству «Мир», и Посольству Франции в Москве включение русского издания книги
Предисловие переводчика и редактора перевода 7 в программу «Пушкин», а также Российскому фонду фундаментальных исследований, поддержавшему проект перевода книги издательским грантом. В заключение мы хотим прямо сказать, что наш замысел вряд ли осуществился, если бы не помощь и активное сотрудничество наших французских друзей и коллег из университета Пуатье — авторов книги Патриса Нодена и Клода Китте. Они дали согласие на безвозмездное издание перевода их книги, любезно предоставили в наше распоряжение файлы с ее электронным вариантом и постоянно, на протяжении всего времени работы над переводом, поддерживали с нами связь, консультировали нас, полностью пересмотрели текст французского издания и внесли в него много исправлений и улучшений, которые учтены в русском издании. Только благодаря этому сотрудничеству наш совместный проект успешно завершен. Надеемся, что перевод этой примечательной книги будет интересен и полезен нашим читателям. Л.С. Казарин, В.А. Соколов, Ярославль, 10 августа 1998 г.
Предисловие к русскому изданию Проект перевода Львом Казариным и Валерием Соколовым нашей книги «Алгебраическая алгоритмика», возникший более двух лет тому назад, подошел к завершению. Мы особенно рады этому событию, если учесть, что пройденный путь, вероятно, не был гладким. Основные очертания проект приобрел в результате нашего путешествия в Россию, которое мы предприняли весной 1996 года по приглашению Валерия Соколова от имени Ярославского государственного университета. Во время нашего пребывания в Ярославле Лев и Валерий оказали нам, как гостям университета, самый радушный прием. Лев сопровождал нас во всех поездках, которые Ярославский университет организовал для нас, чтобы мы открыли для себя маленький кусочек России — это то, что выходит за рамки профессиональной деятельности, но является, тем не менее, приятным (и необходимым) элементом любой поездки за границу. Благодаря Льву мы открыли ряд исторических уголков, входящих в «Золотое кольцо»; он опекал нас на первых шагах в нашей повседневной жизни иностранцев в России, что порой было очень непросто: вспомним автобус, который отвозил нас на вокзал в пятницу в 6 часов утра, когда все киоски были еще закрыты! «Автобус... А как насчет билетов?» А в Москве Аркадий Онищик, Сергей и Ирина Струнковы доказали нам на непостижимом для представителей Запада уровне, что российское гостеприимство вовсе не легенда. Обо всех этих встречах и людях мы сохраним самые волнующие воспоминания. Прервем здесь дифирамбы, хотя это вступление в действительности лишь в небольшой степени передает наше душевное состояние. Нелегкое, все-таки, это дело — сочинять предисловие к переводу книги, которую сами написали! Поговорим, однако, об идеях, которые мы хотели изложить в этой книге. В течение трех лет работы над ней (1989-91 гг.) нашей целью — амбициозной и одновременно наивной — было представить с одной конкретной точки зрения некоторые разделы алгебры, преподаваемые на старших курсах университета. В то время нам хотелось (и сейчас нам этого хочется более, чем когда-либо) изменений в изложении математики: не отказываясь от абстрактных понятий, использовать их так, чтобы гармонично сочетать теорию и практику.
Предисловие к русскому изданию 9 Любой студент-математик знаком с основными понятиями, которые встречаются в арифметике: целые числа, сравнимость чисел по модулю п, многочлены и т.д. Но, чаще всего, эти объекты, по самой своей сути предназначенные для практики, определяются очень формально и абстрактно. Так ли уж необходимо вводить фактор-группу некоторой группы по отличной от нее подгруппе для изучения целых чисел, сравнимых по модулю п? Что усвоят наши студенты при таком подходе? Так ли уж неразумно опираться, когда это возможно, на практику? Ведь освоив вычисления по модулю целого числа (или по модулю многочлена), уже гораздо позже можно рассмотреть общий случай вычислений по модулю идеала, «более естественно» приводящий к понятию фактор-кольца. В самом деле, нет недостатка в конкретных проблемах, где может с успехом использоваться вычислительная практика: тест на простоту чисел Лукаса — Лемера, критерий Пепина, RSA-метод в криптографии, генератор случайных чисел и т.д. Мы рассматриваем все эти темы в нашей книге и убеждены, что они лучше подходят для обучения, чем «теорема о факторизации (переход к фактор-множеству) некоторого отображения». Что же изменилось с 1992 года, времени выхода нашей книги? В области математической алгоритмики на рынке появилось некоторое количество монографий, но это в основном узко специализированные книги научного характера, оказывающие весьма слабое влияние на преподавание математики. Что же касается информатики как таковой, то единственным плодом ее непрерывного бурного развития в данной области является увеличение числа систем формальных вычислений — часто настолько же мощных, насколько и непоследовательных, неприспособленных для научной работы из-за недостаточной строгости. Нынче можно осуществлять сложные вычисления в теории Галуа, в алгебраической геометрии, в теории чисел, в теории групп и т.д., но все это, как правило, недоступно для начинающего студента-математика. И против всех ожиданий, области, в которых системы формальных вычислений уже хорошо обкатаны — это, как ни странно, разделы курса алгебры — всегда излагаются в том же виде, в каком они были десятилетия назад. Использование этих прикладных программ осталось вне преподавания математики и касается, в основном, лишь научных исследований. Сообществу математиков, кажется, грозит опасность раскола на два чуждых друг другу мира: «теоретиков» и «алгоритмистов». Эта ситуация, на наш взгляд, была бы достойна сожаления. В то же время, во Франции — особенно в преподавании математики — нередко шли на отказ от догматических воззрений в пользу нового хорошего подхо-
10 Предисловие к русскому изданию да к объяснению того или иного понятия. Преподавание (равно, как и научное исследование) может лишь обогатиться благодаря многообразию способов изложения материала: достаточно хотя бы раз в жизни прочитать студентам курс лекций по алгоритмике, чтобы убедиться в этом. П. Ноден, К. Китте, Пуатье, 2 февраля 1999 г.
Предисловие Патрис Ноден и Клод Китте попросили меня написать предисловие к их книге, и я начну с благодарности им: быть вовлеченным в работу в приятной компании по случаю выхода в свет такого прекрасного произведения — это счастье. История математики очень увлекательна. Для сюжета, который нас занимает сегодня, существенны три персонажа. Евклид пишет свои (Начала» за три столетия до нашей эры, и с этой даты большинство историков ведут отсчет появления той математики, которую мы знаем сегодня, имеющей характер некой игры, заключающейся в том, чтобы делать интересные выводы из множества хорошо подобранных аксиом. Природа этих аксиом и соблюдаемые правила игры с самого начала не были достаточно ясны, и математика XIX века познала такое развитие, что вскоре основы здания были едва способны выдерживать всю конструкцию. Итогом этого было то, что называют кризисом оснований математики. Но тут появился Гильберт; он понял и талантливо объяснил, что математика может быть формализована. Гильберт описал работу математиков, как чисто формальную игру, манипулирующую множеством аксиом (комбинаторных объектов) с помощью доказательств (чисто комбинаторной техники) и приводящую к теоремам (также комбинаторным объектам). На самом деле так говорить — неправильно: Гильберт мог таким образом описать результаты, полученные его предшественниками, но никоим образом — с помощью какой процедуры они их открыли. Это главное различие для того сюжета, которым мы интересуемся. Гильберт знал это и вскоре поставил перед сообществом хорошие вопросы на эту тему: может ли аксиоматическая система быть полной, или, другими словами, всякое ли утверждение, имеющее смысл в этой системе, истинно или ложно? Кроме того, существует ли алгоритм, позволяющий определять, истинно или ложно то или иное утверждение (или же невыводимо в случае неполноты)? После Евклида и Гильберта третьим является Гёдель. Он доказал, что всякая аксиоматическая достаточно «интересная» теория обязательно будет неполной (или противоречивой). Этот явно негативный результат странным образом является одним из наиболее позитивных.
12 Предисловие Непосредственно вдохновленные доказательством Гёделя логики Чёрч и Тьюринг вскоре доказали (1936), независимо друг от друга и разными способами, что второй вопрос Гильберта также имеет отрицательный ответ: не может существовать алгоритм, даже чисто теоретический, грозящий математикам безработицей. Этот результат все еще отрицательный, но — терпение, и мы увидим, что на самом деле Чёрч и Тьюринг стоят у истоков фантастической — и позитивной — революции в математике. Ибо им пришлось очень тщательно обдумать, что же такое алгоритм. Первый из них изобрел для уточнения этого понятия А-исчисление, второй — свою знаменитую теоретическую машину. И это стало рождением целой новой ветви в математике, называемой алгоритмикой, и книга, которую я предваряю предисловием, частично относится к этой области. В этом ее новизна. Благодаря фон Нейману идеи Тьюринга вскоре привели к концепции и реализации того, что теперь называется компьютерами. Вначале в них видели лишь инструмент, предназначенный для того, чтобы использовать результаты труда математиков-теоретиков в различных приложениях. Этот взгляд, все еще распространенный, когда инфор- матик ниже по течению принимает эстафету от математика, является сегодня совершенно неверным. Больше уже не считают, что математические теории, представление о которых существенно изменилось, находятся в верховьях по отношению к положению алгоритмического инструмента, и ставить эту ветвь в подчинение другим так же наивно, как пытаться выяснить в алгебраической топологии, что главнее: топология по отношению к алгебре или наоборот. Математики все еще часто и довольно нелепо считают за честь получить результаты, не использующие новые алгоритмические средства. Это обычное явление, сопровождающее значительное и быстрое развитие в какой бы то ни было сфере жизни: подобное развитие порождает кризис, разрешающийся более или менее удачно. Когда возникла алгебраическая топология, многие строптивые топологи старательно отделяли топологические доказательства, не использующие алгебраическую топологию, считая их более хорошими, от других, незаконнорожденных. Но в конце концов алгебраическая топология утвердилась. В рамках алгебраической топологии в один прекрасный день появились спектральные последовательности; в это время доказательства, использующие такую технику, еще рассматривались как «грязные», и их, по-возможности, избегали. Мало-помалу, спектральные последовательности стали обычным делом. Совсем недавно новые исследования заново изучили вопрос, связанный со спектральными последовательностями, для того, чтобы сделать из них алгоритмический инструмент;
Предисловие 13 я знал редактора одного прекрасного математического журнала, сердито требовавшего представить аргумент, «убеждающий», что новые результаты, полученные таким способом, были бы недоступны при использовании «других средств» (sic) и не иначе, без чего представленная статья на эту тему была бы, очевидно, отвергнута. S.O.S. — расизм! Книга Патриса Нодена и Клода Китте представляет классическую алгебру — ту, которая преподается на уровне второго цикла университета, но в свете новой алгоритмической идеологии. Для рассматриваемой темы алгебра подходит лучше всего: алгоритмика по самой своей природе комбинаторна, а среди всех основных математических дисциплин алгебра является, несомненно, «самой комбинаторной». Преподавать студентам алгебру таким способом — прекрасная идея с разных точек зрения. Очень полезно, что значительно усиливается конкретный характер теории, результатов, упражнений, отдельных тем; это облегчает понимание, требует хорошей точности, но и придает характер игры занятию, которое нередко воспринимается скучным и отталкивающим. Но есть еще более важное обстоятельство. Богатство, присущее математике, чаще всего требует, как, впрочем, и в любой сфере деятельности, использования сразу нескольких средств очень разной природы. Самые большие успехи в математике почти всегда могут быть описаны именно так. В другой области, теоретической физике, показательна работа Луи де Бройля, объясняющая, что правильно понять свойства материи можно, лишь рассматривая ее одновременно с волновой и корпускулярной точек зрения. Эйнштейн поступил аналогично в отношении массы и энергии, Гильберт — с геометрией и функциональным анализом и т.д. Так и с момента возникновения алгоритмики всякая попытка пересмотреть тот или иной раздел математики с точки зрения алгоритмики может быть встречена с интересом и надеждой. Так устанавливаются взаимные связи, природа которых богата и разнообразна. В некоторых случаях алгоритмика оказывается на службе у обычной математики, являясь тогда инструментом прикладной математики. Часто использование средств алгоритмики порождает новые области математических исследований. Проблемы сложности вычислений, составляющие значительную часть данного труда, — это как раз тот самый случай. Замечу, кстати, что именно к этой области принадлежит самая важная открытая проблема современной математики — сравнение сложностей Р и NP; если, основываясь на сравнительном подобии, распространить математику на все науки, то проблемы Рима- на, Пуанкаре, «обратная теорема Галуа» окажутся где-то недалеко от химии, тогда как проблема Р ф NР не выйдет за пределы математики.
14 Предисловие Иной раз алгоритмические проблемы порождают новый сюжет, который может быть затем полностью отделен от источника своего происхождения и превратиться в раздел «чистой! математики. Хоть исторически это и не вполне корректно, но таким образом можно представлять студентам гармонический анализ. Одна из глав этой книги посвящена дискретному преобразованию Фурье. Даже если бы Фурье не существовал и даже если бы никто с тех пор не мог его заменить, все равно алгоритмика умножения многочленов обязывает обнаружить так называемый анализ Фурье, его интерес, его богатство и его эффективность. А потом уже нетрудно, переходя к пределу, получить ряды Фурье и преобразование Фурье, исходя из дискретного преобразования Фурье; наиболее просто это сделать, используя нестандартный анализ — но берегись инквизиторов: сочетая две ереси в одном курсе, рискуешь сломать себе шею, если не быть осторожным или попросту скромным! Другой интересный случай, представляющий, несомненно, очень богатый сюжет: для некоторой ранее существовавшей математической теории ее пересмотр может привести к таким точкам зрения, которые требуют иных методов, имеющих свой собственный интерес, не уменьшая, однако, тем самым, интерес к исходным теоретическим методам. Хорошим примером такого сорта является матричное исчисление. Классическая теория определителей, на базе знакопеременных полилинейных форм, непосредственно не используется при вычислении определителей. На самом деле ситуация даже еще лучше. Наши самые далекие предшественники, несомненно, были знакомы с сущностью так называемого метода Гаусса решения систем линейных уравнений. Однажды появились теоретики и вообразили, что лучше это делать с помощью определителей. Потом алгоритмисты снова поправили стрелки часов: для машины метод Гаусса намного лучше, чем метод Крамера, что, однако, вовсе не лишает интереса к этому методу, который с успехом используется для теоретического анализа первого. Этот и другие связанные с ним вопросы изящно изложены в данной книге; содержащаяся в ней обширная библиография и комментарии позволят прилежным читателям быстро добраться до современных проблем, о богатстве которых они вначале и не подозревали. Информатики сразу распознают одного из духовных наставников авторов: Дона Кнута. Отметим лишь составление макета книги, полностью реализованное самими авторами (без Postscript^!) с помощью Т^Х'а. Мне не известна официальная градация в сообществе Т^Хпер- тов, но, несомненно, Патрис Ноден и Клод Китте в его первом эшелоне.
Предисловие 15 Вошло в поговорку безграничное богатство анализа всех аспектов проблемы в книгах Кнута; то же самое мы обнаруживаем здесь. Для читателя, раполагающего достаточным временем, эта книга — неисчерпаемый кладезь возможностей рассматривать отдельную тему с множества точек зрения. Когда, говоря о программе, авторы решаются перейти к следующей теме, они не забывают заранее указать полезную библиографию; часто это даже библиография в квадрате, содержащая цитируемые тексты, которые, в свою очередь, также содержат обширную библиографию — изящный пример использования подпрограмм. Как и у Кнута, в этой книге имеется обширный набор упражнений разного уровня — от простых примеров, предназначенных проверить понимание того или иного понятия, до самых сложных задач, приближающихся к темам научных исследований. И, как и у Кнута, решения упражнений также включены в книгу! Для изучения алгоритмов требовалась техническая поддержка в виде языковых средств информатики. Авторы выбрали язык Ада — безусловно, один из лучших на сегодня языков. И пусть потенциальные пользователи не волнуются по поводу выбора языка, все еще не слишком распространенного во французских университетах: перевод Ада- программ в их любимый язык является несложным техническим упражнением; при этом строгость документации программ просто поразительна и может служить примером, так что на этот счет нет никаких опасений. Такой перевод, требующий ясно отличать алгоритмическую часть от реализации, очень поучителен. Кроме того, авторы зачастую предварительно дают описание алгоритмов в чистом виде в соответствии с аксиоматикой Хоара. Это превосходная книга, которую я ставлю в моей библиотеке на полку со «священными» книгами, где находятся уже два «евангелия» — алгоритмика по Вирту и алгоритмика по Кнуту. Теперь я обладаю третьим «евангелием»; кто же напишет четвертое? Но ведь эта книга потребовала коллективной работы двух авторов — еще одно примечательное свойство, так что может быть моя коллекция «евангелий» уже полна? Нет: это противоречило бы Гёделю, но это уже совсем другая история. Франсис Сержераер, Мейлан, 27 сентября 1991 г.
От авторов Вот и наступил момент, когда, закончив книгу, автор начинает свое введение и ищет подходящие формулировки, которые убедили бы читателя, что все дальнейшее было спланировано, обосновано... с самого начала. Мы не будем отступать от этого правила. Однако, скажем откровенно, наша точка зрения изменялась многократно с того момента, когда мы принялись за этот труд. Вопрос «Возможно ли вычислять математические объекты?» является лейтмотивом этой работы; как можно убедиться, эта книга не дает окончательного ответа, но, надеемся, показывает, что этот вопрос не лишен интереса. В особенности в той области, которую затрагиваем здесь, а именно, в алгебре, мы убеждены, эффективное вычисление объектов — вручную или с помощью компьютера — проливает свет на используемые понятия. Но, начиная с таких элементарных понятий, как кольцо целых чисел по модулю п, и до более абстрактных структур, как модули в основных кольцах, что же все-таки можно вычислять и как? В начале работы мы были совсем уже готовы уступить намерению рассматривать алгебру без каких бы то ни было формальных средств, а только в чисто вычислительном аспекте; но изучение преобразования Фурье — и, в особенности, работы Ш. Винограда — убедительно подтолкнули нас к тому, чтобы избежать этого соблазна. В результате проект, сознательно ограниченный вначале, стал более полновесным и содержательным; мы даже позволили себе сочинить полную главу, посвященную дискретному преобразованию Фурье, с включением в нее билинейных форм и тензорного произведения; добавили раздел, излагающий классический подход к факторизуемости колец многочленов... Однако мы не отказались от главной идеи, которая составляет основу этой книги: можно вполне конкретно представить понятия элементарной алгебры, т.е., опираясь на учебные примеры и приводя, по мере возможности, конструктивные доказательства. Возьмем для примера теорему Цермело, согласно которой пространство можно преобразовать во вполне упорядоченное множество; приверженцы Кантора будут очарованы строгостью доказательства — действительной и кажущейся; прагматики им возразят: Вы утверждаете, что можете преобразовать про-
От авторов 17 странство во вполне упорядоченное множество; ну что ж, преобразуйте его! — Это слишком долго. — Тогда покажите нам по крайней мере, кого-то, кто нашел бы достаточно времени и терпения и кто смог бы выполнить это преобразование. — Нет, мы это не можем, потому что число необходимых для этого операций бесконечно, оно даже превосходит No- —А можете ли вы показать, как можно было бы выразить конечным числом слов то правило, которое позволило бы упорядочить пространство? — Нет — и прагматики делают вывод, что эта теорема или лишена смысла, или неверна, или же, по меньшей мере, недоказуема. Анри Пуанкаре, Последние мысли (1913 [161]) Это идет вразрез с общепринятой практикой, которая заключается в преподавании математики на абстрактном уровне, без опоры на эксперимент, как в других научных дисциплинах. Скольких хлопот избегают при этом! Гораздо легче, например, доказать существование для любого простого числа р примитивного по модулю р многочлена, нежели построить процедуру, порождающую за 5 шагов в периоде длины 32 примитивный по модулю 2 многочлен Хъ + X2 + 1. Эта книга рискует удивить читателя; в ней иногда объясняются очень простые вещи, а иногда быстро проходят через более сложные понятия. Часто используются понятия группы, модуля, кольца, тела и т.п., но ни одно из этих понятий не определяется; существуют прекрасные книги по алгебре, содержащие эти определения, и нам хотелось не перефразировать их, а скорее попытаться взглянуть на эти структуры с точки зрения эффективности. Всякий раз, когда нам это представлялось возможным, мы стремились заменить традиционную манеру изложения темы и показать многосторонние связи между различными понятиями (например, различные типы колец в теории делимости, сходство между конечными абелевыми группами и редукцией эндоморфизмов и т.д.). Выбор рассматриваемых тем не бесспорен. Мы мало внимания уделяли многочленам, которые, однако, являются фундаментальными объектами в алгебре; в то же время сравнительно много внимания посвящено дихотомическому алгоритму возведения в степень и алгоритму Евклида. Цель, которую мы перед собой ставили, — изучить небольшое количество методов, относящихся к области, называемой ныне алгебраической алгоритмикой, стараясь связать их между собой и с классическими понятиями алгебры. Этот вывод привел нас к сознательному отказу от рассмотрения таких сюжетов как, например, 2-1017
18 От авторов теория Галуа или теория групп, которые очевидным образом допускают алгоритмический подход. Таким образом, мы стремились предоставить необходимые средства для углубленного изучения этой дисциплины, оседлавшей математику и информатику. В действительности, существо описанных в данном курсе методов сконцентрировано в четырех основных алгоритмах: дихотомический алгоритм возведения в степень, алгоритм Евклида, китайская теорема об остатках и быстрое преобразование Фурье; они образуют основу для любой системы формальных вычислений. Тем не менее, в упражнениях содержатся введения в различные темы: от пошаговой трассировки до символа Яко- би, включая р-адические числа, непрерывные дроби, многоразрядную арифметику... Введение в предмет составляют основы информатики, необходимые для того, чтобы недвусмысленно рассуждать об алгоритмах, об их обоснованиях, о программах. Объекты информатики, определяемые здесь, очень разнообразны: от начал программирования очень быстро переходим к таким понятиям, как модулярность, шифрование информации, порождаемость..., затрагивая весьма тонкую технику программирования на языке Ада. И вот великое слово произнесено! На самом деле большинство реализаций алгоритмов, которые мы даем, написано на языке Ада. Многие удивлялись, что не был выбран Лисп (и мы готовы спорить), Паскаль или Си (в данном случае спор с нами бесполезен). Ада обладает той строгостью, которая, как нам кажется, вполне гармонирует с математической строгостью; мы также широко пользовались богатством систем контроля в языке Ада как для программирования, так и для описания алгоритмов. Программисту на языке Лисп известно значение всего, но он никогда не знает, сколько это стоит. Алан Дж. Перлис, Программистские эпиграммы (1978) Пусть сторонников языка Лисп не смущает эта цитата. Мы далеки от того, чтобы быть невосприимчивыми к этому языку. И если мы по достоинству ценим определенные аспекты языка Ада, то мы всегда сожалели о хронической нехватке некоторых базовых средств в этом языке (арифметика высокой точности — лишь один тому пример). Выбор материала по информатике для включения в эту книгу был труден: она адресована в первую очередь не информатикам, а математикам, чьи познания в информатике не всегда достаточно основательны. Тем не менее, в этой книге мы не предполагаем, что читателю
От авторов 19 совершенно чужд этот предмет; однако, возможно, он будет удивлен необычным подходом в математике. В информатике не редкость, когда формулировка проблемы бывает такой же длинной, как и ее решение. В книге приведены несколько полных программ; они предназначены не для «производственных целей», а для построения поучительных примеров. И хотя мы не включили все программы, реализующие описанные методы, — книга бы просто лопнула... также, как и наш издатель — тем не менее, все описанные методы реализованы или на языке Ада, когда имевшиеся в нашем расположении средства это позволяли, или в среде системы формализованных вычислений Scratchpad. Эта система была выбрана не за свои мнимые достоинства или за как будто бы богатое программное обеспечение, а исключительно потому, что она была нам доступна и позволяла умножать числа с 100 знаками. И если слабость и неадекватные реакции ее компилятора довольно быстро обескуражили одного из авторов, то другой еще продолжает борьбу. Мы должны особо упомянуть наш основной источник вдохновения — монументальный труд Дональда Кнута «Искусство программирования». Часто нам случалось самостоятельно или в процессе чтения открыть некий новый алгоритм; так вот, мы можем утверждать, что более, чем в 70% случаев, оказывалось, что этот алгоритм уже был описан в его книге и чаще всего гораздо лучше, чем там, где мы его нашли. Мы не можем упоминать Кнута на каждой странице, где явно присутствует его вклад, ибо его имя появлялось бы сотни раз. Мы это делаем здесь. Помимо этой серии книг, еще не оконченной в настоящий момент, Кнут также реализовал — чтобы иметь возможность точного написания своих книг — компилятор текстов Т^Х поистине феноменальной мощности. Эта книга смогла быть написана ее авторами-любителями благодаря Кнуту и многочисленным бессонным ночам в попытках понять внутренние механизмы Т^Х'а. Без TfeX'a мы никогда бы не смогли реализовать нашу книгу в данном виде. И вот теперь мы можем, на манер Кнута, сказать: If this book has any merit, the credit should go to Knuth... On the other hand, if this book has deficiencies, the blaim should be directed to us... * Даниель Лазар и Франсис Сержераер первыми связали математику и информатику в процессе преподавания в Пуатье. Мы им обязаны определенной концепцией преподавания этих дисциплин и считаем своим долгом поблагодарить их здесь. 1 Если эта книга имеет достоинства, это заслуга Кнута... С другой стороны, если в этой книге есть недостатки, то упрек должен быть адресован нам... 2*
20 От авторов Эта книга не является творением двух отдельных личностей; мы пользовались советами наших многочисленных коллег. Мы особенно благодарны Пьеру Берна, Жан-Мари Гурсо, Жан-Луи Паско, Мустафе Раису, Ги Рено и Жаку Валетту; мы обязаны не только идеями упражнений, доказательств, но также и другой точкой зрения на ряд методов, излагаемых в этой книге. Мы благодарим также сотрудников факультета математики и информатики университета Пуатье. В течение всех тех лет, когда шла работа над книгой, мы ощущали их поддержку и симпатию. Успешное продвижение проекта было значительно облегчено предоставлением места работы в лаборатории первому автору и творческого отпуска — второму. Мы не забываем студентов специального курса «Информатика для математиков», которые на протяжении многих лет вносили различные поправки и предлагали идеи. Мы не можем на этом закончить, чтобы не подмигнуть Жаку Бо- ровчику, без которого не осмелились бы написать эту книгу, а также Жан-Пьеру Раду, виновному за выбор языка Ада, Ливью Соломону, дававшему нам советы по разным случаям, и Бернару Гарро, который неотлучно был с нами в течение всей этой работы. Что же касается якобы очень взаимообогащающей работы вдвоем, то это не всегда было очевидным, и проблемы не всегда были столь же просты, как эта: « — Почему ты вставляешь цитаты по-английски? Некоторые читатели не поймут. — Я предпочитаю оригинальную версию, которая содержит в себе порой непереводимый юмор. — Ну, а как насчет цитат на немецком? — Ну это совсем другое дело. Я не знаю немецкого». Эта книга посвящается всем нашим друзьям, которые нас поддерживали и мирились с нашим переменчивым настроением в течение этих трех сумасшедших лет.
Глава I Алгоритмика и программирование на языке Ада В этой главе — вероятно самой «информатической» в нашей книге — мы введем некоторые алгоритмические понятия и опишем несколько получисленных алгоритмов, необходимых для реализации алгебраических методов. Точное определение алгоритмических границ, в которых будут изложены методы вычисления, станет предметом особого внимания. Цель нашего труда не ознакомить с основами алгоритмики — предполагается, что читатель не новичок в данной области, — а определить безукоризненным способом семантику построений, используемых в алгоритмах1. После изложения общих направлений мы приступим к исследованию первого фундаментального алгоритма этой книги: дихотомического алгоритма возведения в степень. Для этого будут использоваться два метода построения алгоритмов. Один очень близок к математическим рассуждениям, другой — чисто алгоритмический. При этом у нас появится возможность открыть первый рекурсивный алгоритм, представленный в данной работе. Начав с первого примера алгоритма, мы перейдем к изучению начальных понятий программирования на языке Ада. И здесь тоже речь пойдет не об изложении полного курса языка Ада, а только о пред- *Что совсем не умаляет ни корректность (верность) программ, которые можно будет потом получить, ни соответствие компилятора его спецификациям. Эти условия, однако, необходимы для истинности математической теоремы, доказанной с помощью компьютера.
22 1-1 Введение в алгоритмику ставлении нескольких ключевых понятий, необходимых для понимания приведенных программ. Вообще говоря, все понятия будут представлены (по мере надобности) на примерах, во избежание их формального описания (по последнему вопросу лучше обратиться к справочному изданию: Reference manual for the Ada programming language1). И наконец, завершит эту главу разработка совершенно неэффективного метода вычисления определителей целочисленных матриц. Обсуждаемый метод, основанный на математическом определении детерминанта, позволяет наилучшим образом использовать все возможности современных компьютеров и получить идеальное приближение к бесконечности на машине! Кроме того, обсуждение ситуации позволит нам несколько пополнить представление о программировании на языке Ада. 1 Введение в алгоритмику Прежде чем приступить к описанию любого алгоритма, нужно оговорить общепринятые соглашения, используемые в работе. В информатике чаще, чем в любой другой дисциплине, встречается взаимное непонимание между пользователем и разработчиком новых программ. Поэтому так важно сформулировать аксиоматику, позволяющую связно рассуждать об алгоритмах. Множество аксиом, которое мы собираемся сейчас описать, известно как аксиоматика Хоара [86], в честь исследователя, который первым формализовал семантику структур и действий последовательной алго- ритмики. 1.1 Терминология и обозначения Алгоритм — это последовательность более или менее элементарных действий, которая позволяет пошагово решить поставленную задачу за конечное время. Можно формально по индукции определить, что такое алгоритм, нижеследующим образом. Цель этого введения в алгоритмику — изучение и представление всех терминов, фигурирующих в предыдущем определении (стиль определения, который в информатике называется грамматикой). Можно описать алгоритм в терминах состояний системы: состояние системы до применения алгоритма, состояние той же системы после См. книгу [186]. — Прим. перев.
1-1.2 Присваивание 23 применения алгоритма. Эти два состояния образуют то, что называется спецификацией задачи. Таким же образом можно, описывая поэтапно последовательные состояния (между действиями) рассматриваемой системы, проводить обоснование алгоритма. Система доказательства по Флой- ду [71] — это способ формализации данного процесса. Но эта аксиоматика не просто метод доказательства: в случае ее обобще- > хорошей методологии программирования. Состояния данной системы выражаются в виде утверждений, т.е. логических формул. Рабочие гипотезы алгоритма называются предусловиями или данными алгоритма. Заключения называются постусловиями или результатами. Вот, например, способ формального описания алгоритма: [предусловия] Алгоритм [постусловия] И это то, что можно назвать спецификацией алгоритма. Используя данную форму выражений, можно описать аксиомы Хоара в следующем виде: > Посылки : предварительные условия к применению аксиомы. Эти условия выражаются, в основном, в терминах преобразований утверждений посредством некоторых действий. > Заключение : результат построения, которым описывают аксиому. 1.2 Присваивание Это элементарное действие, наиболее опасное и наиболее трудное для понимания в последовательных алгоритмах. Его семантика чрезвычайно проста: переменной (иногда очень сложной) придают значение какого-либо выражения. Действие присваивания представляется в алгоритмах, как правило, двумя способами: обычно с помощью стрелки, направленной влево, а иногда последовательностью знаков «:=», как, например, в языках программирования. (1) Аксиома (присваивания). > Посылки: х является переменной, е — выражением > Заключение: [ ] х <— е [х = значению е] • Алгоритм — это действие • Действие — это: — элементарное действие — последовательность действий — альтернатива — итерация • Элементарное действие — это: — пустое действие — присваивание — ния она может претендовать на ро
24 1-1 Введение в алгоритмику Интерпретация этой аксиомы следующая: нет никакого предусловия, кроме природы его операндов, для использования присваивания. Каково бы ни было состояние системы, сведенной к переменной х, после выполнения присваивания х будет иметь то же самое значение, что и е. Если задействовано несколько переменных, то иногда форму постусловия присваивания модифицируют. Возьмем, например, систему, состоящую из двух переменных х и у; предположим к тому же, что у имеет значение е. Выполним предыдущее присваивание. В предусловие можно включить переменную у, хотя она не входит в присваивание. В результате имеем: [у = е]. Довольно часто вместо того, чтобы писать постусловие в виде [у = е и х = е], запись сокращают до [х = у], что, разумеется, приводит к исчезновению некоторой начальной информации. Все это может показаться тривиальным, и обычно совершаемая ошибка состоит в смешении присваивания с частной формой записи уравнений (в математическом смысле) или подстановкой. Простой пример, иллюстрирующий трудность проблемы, относится к системе из двух переменных и предыдущему условию [7г(х,п)] п<—п + 1 [7г(х,п-1)], где Т1 — отношение, связывающее соответствующие значения двух его аргументов. 1.3 Последовательность Это алгоритмическая конструкция, заключающаяся в соединении действий в цепочку. Ее часто представляют с помощью знака «;», который служит связкой между последовательными действиями. Эта конструкция самая простая среди тех, которые встречаются в последовательных алгоритмах. Если А и В — действия, то обозначим через «А ; В» действие, состоящее из последовательности действий А и В в данном порядке. Эта горизонтальная запись обладает некоторыми неудобствами, так что очень часто ту же последовательность действий записывают, располагая вертикально на одной прямой действия одной и той же последовательности (и аннулируя, в случае необходимости, знак «;»). (2) Аксиома (последовательности). > Посылки: А и В — действия, V, Q и TZ — утверждения [P]A[Q] и [Q]B[R]
1-1.4 Альтернатива 25 > Заключение: [V] А\ В [R] Эта аксиома просто выражает тот факт, что в последовательности двух действий предусловие второго является постусловием первого. Иными словами, два действия одной и той же последовательности, следующие одно за другим, действуют совместно. Второе использует результаты первого. Вот очень простой пример, позволяющий конкретизировать предыдущее высказывание. Рассмотрим систему, образованную тремя целочисленными переменными: С, х и п, и предположим, что эти переменные удовлетворяют следующему свойству (которое будет предусловием этой последовательности) : [С • хп = Xq° и п > 0], где х0 и п0 — две целочисленные константы. Последовательность действий, которую применяют к этой системе, представлена справа. Преобразуем сначала исходное утверждение, используя тот факт, что п > 0 : [C-x-xn~l = х£° и п > 0], и применим первое действие последовательности, придав С значение, полученное при умножении его начального значения на х. Это выражается в предыдущем утверждении слиянием двух первых термов левого члена равенства: [С-хп~х = Xq° и п > 0]. Потом, рассматривая это новое утверждение как предусловие, применим второе действие, которое состоит в уменьшении значения п на единицу. Таким образом, получаем постусловие рассматриваемой последовательности действий [С • хп = Xq° и n ^ 0]. Это последнее преобразование является примером типичного случая, упомянутого в конце предыдущего раздела. 1.4 Альтернатива Альтернатива — это структура управления, соответствующая принятию решения в алгоритме. Ее часто выражают в виде «если ... то ...». Во всех алгоритмах, представленных в книге, структуры управления и примитивные конструкции будут записаны на английском языке, в виде схем, близких к языку Ада. Этот прием имеет два важных преимущества: во-первых, алгоритмы пишутся на алгоритмическом диалекте, приближенном к языку программирования; и потом, выбранный язык Ада чрезвычайно точен (небольшой эвфемизм!) и достаточно понятен для записи алгоритмов. Нет необходимости объяснять действие структуры управления. Ее семантика тождественна семантике, используемой в разговорном языке. С <— С хх п <— п — 1
26 1-1 Введение в алг о ритмику (3) Аксиома (альтернативы). > Посылки: А и В — действия; С — предикат; V и Q — условия. [VhC)A[Q] и [V и (не С)] В [Q] > Заключение: [V] if С then A else В end if [Q] Прежде всего эта аксиома выражает тот факт, что какова бы ни была ветвь используемого теста1, получаем один и тот же результат (благодаря разделению действий А и В). Если продолжить анализ, то из этой аксиомы можно извлечь некоторую философию (или методологию) программирования. В самом деле, можно субъективно объяснить такой подход и сделать вывод, что хорошая альтернативная структура (т.е. альтернатива, простая для понимания доказательства) — это конструкция, в которой действия, представленные в каждом из ответвлений, очень похожи. Не редко, например, можно встретить в программах начинающих, а также в работах людей более опытных (что красноречиво свидетельствует об их опыте!) альтернативные структуры, в которых в зависимости от того, является истинным или ложным предикат, совершается вычисление с внутренними переменными или выполняется действие с промежуточным результатом (обычно на экран выводится сообщение). Конечно, эти программы могут быть правильными и, следовательно, вполне доказуемыми, но ценой каких искажений в изложении алгоритма и в формулировках утверждений! Не говоря уже о том, какой будет через несколько месяцев степень понятности программы этого программиста! Зато хороший алгоритм не содержит особенностей, сопровождается простыми и ясными утверждениями и потребует намного меньше затрат во время его возможной доработки. В качестве примера рассмотрим следующую альтернативу, представляющую небольшую часть дихотомического алгоритма возведения в степень, который мы рассмотрим в дальнейшем. Возьмем снова систему, состоящую из трех целочисленных переменных С, х и п, удовлетворяющую условию: [С-хп = х2°ип>0]. (1) Исходя из этой системы переменных, применим нижеследующий элементарный алгоритм, который в основном записывают в виде: > if n нечетно then С := С * х; end if; ^. Ключевое слово null 1 Ветвью теста называют каждую часть альтернативной структуры: часть *то» или часть «в противном случае».
1-1.4 Альтернатива 27 if n нечетно then С i—С хх else null end if является примитивом алгоритмического языка, выражающим пустое действие (для структуралистов это действие является нейтральным элементом ассоциативной операции последовательной композиции). Семантика пустого действия такова (для любого утверждения V): [Р] null [P]. Итак, необходимо отдельно исследовать влияние действий каждой из двух ветвей теста на исходное утверждение, учитывая значение предиката «п нечетно». Сначала можно записать: п = 2q + г, деление с остатком п на 2; q — это неполное частное, а г — остаток. Когда п и р — целые числа, удобно обозначить через п/р неполное частное от деления с остатком пнари через п mod p — остаток при этом делении; учитывая вышесказанное, получаем: п = 2(п/2) + п mod 2. Кроме того, значение п mod 2 выражает четность п. Исходное утверждение может быть преобразовано в [С • x2W2>+n mod 2 = *S° и п > 0]. (2) Теперь рассмотрим две ветви альтернативы. Если п нечетно, то п mod 2 равно 1 и исходное утверждение переписывается в виде: [C-i-^W2' = Xq° и п > 0] — выражение, которое легко преобразуется после применения действия С i— С х х в [С.х2(п/2) = хпоип>0] (з) Аналогичным образом, если п четно, то п mod 2 равно 0 и без всякого преобразования утверждение (2) становится тождественным (3). Итак, утверждение (1) преобразуется с помощью алгоритма в утверждение (3) при любом значении предиката «п нечетно». В примере, рассмотренном выше, и в исследовании последовательности, представленной в предыдущем разделе, мы всегда начинали доказательство с преобразования исходного утверждения. Преобразование, которое может показаться магическим и без которого трудно понять результат вычислений. В обычной практике алгоритмики все происходит иначе; действительно, чрезвычайно сложно, если вообще возможно, обосновать уже написанный алгоритм, и эта задача становится еще более сложной для автора доказательства, если только он не автор алгоритма. Чтобы правильно составить алгоритм, нужно сначала формально рассмотреть решаемую задачу, потом вывести несколько утверждений, описывающих основные этапы решения, и, наконец, построить одновременно алгоритм и его доказательство.
28 1-1 Введение в алгоритмику Но, разумеется, приведенные примеры являются всего лишь учебными. Их цель — разъяснить аксиомы, у которых, как известно, ясность — не главнейшее достоинство! 1.5 Итерация Существует много итеративных структур управления во всех языках программирования, а также во всех алгоритмических формализмах. На самом деле^ все эти структуры образуются от одной и той же элементарной структуры управления: обобщенной итерации. Обобщенная итерация построена с помощью примитивов loop, end loop и exit. Два первых примитива loop и end loop являются, соответственно, левой и правой скобками, ограничивающими действие или последовательность действий, которая должна повторяться, априори, бесконечно. Примитив exit допускает выход из цикла, в котором он представлен; этот примитив всегда ассоциируется с одним или несколькими условиями выхода из цикла и часто появляется в алгоритмах в виде exit when. Справа представлена наиболее общая форма итерации. Эта запись достаточно ясна и не требует других объяснений. На практике, чтобы сохранить четкость алгоритмов (что означает также их понимание), мы ограничимся использованием циклов, имеющих, самое большее, два выхода. Ни теперь, ни в дальнейшем, мы не дадим самой общей аксиомы (правильнее сказать мета-аксиомы) итерации; понимание нескольких частных случаев итераций, изучаемых в следующих разделах, позволяет легко ввести любую нужную аксиому. Любопытно отметить, что в практическом плане концепции алгоритмов альтернатива, определенная в предыдущем разделе, может быть представлена в виде обобщенной итерации (теоретические последствия см. [25]). loop Действие 1 exit when Условие 1 Действие 2 exit when Условие 2 exit when Условие i exit when Условие п Действие п -f 1 end loop 1.6 Итерация со счетчиком или цикл «для» Конечно, это самая распространенная форма итерации. Она используется, когда точно известно количество повторений действия, необходи-
1-1.6 Итерация со счетчиком или цикл «для* 29 Итерация со счетчиком for t in p .. q loop Повторяющееся действие end loop мого для решения данной задачи. Схема слева представляет сосчитанную итерацию, в которой г — это переменная, р и q — выражения. Запись р .ч q обозначает интервал, у которого нижняя и верхняя границы — соответственно р и q (что приводит, в частности, к возможности обозначения пустого интервала). Результатом этой конструкции является повторение внутреннего действия цикла, называемого телом цикла, для всех значений индекса цикла г в заданном интервале. Это построение обладает как преимуществами, так и некоторыми ограничениями: • по своему применению переменная i (индекс цикла) относится к командной части цикла (это семантика индекса цикла в языке Ада), • следовательно, эта переменная существует и имеет определенное значение только в теле цикла и было бы неправильно и бессмысленно использовать ее предполагаемое значение после выполнения цикла. (4) Аксиома (цикла «для»). > Посылки: A(i) — действие, зависящее от значения г; V(i) — условие, в котором г — свободная переменная и выполнено: [V(i-l)np^i^q)A(i)[P(t)] > Заключение: [Р(р — 1)] for г in р .. q loop A(i) end loop [P(q)] Эта аксиома, действительно, выражает в алгоритмике метод, подобный принципу индукции в математике. Можно также выразить эту аксиому в слегка отличной форме, изменив индексацию утверждений или действий... Все зависит от контекста и от ясности доказательства. loop exit when t ^ q\ i<—i + 1; A{i); end loop; Теоретически цикл «для» может быть реализован с помощью обобщенной итерации, как в алгоритме слева. Однако, на практике реализация этим упрощенным методом цикла «для» с помощью компилятора не проводится. Конструкция, представленная в последнем алгоритме, — это итерация с выходом в начале цикла. Она так часто используется, что все языки программирования, достойные так называться, имеют особую структуру для ее выражения: цикл «пока».
30 1-1 Введение в алгоритмику 1.7 Цикл «пока» Справа дана общая форма цикла «пока»; его действие заключается в следующем: проверяется условие, и, если оно верно, то действие, представленное в теле цикла, выполняется; затем снова проверяется предикат, и процесс повторяется до тех пор, пока проверка условия не даст значение «ложно». Конечно, если предикат ложный с самого начала, никаких действий не производится: тело цикла не выполняется. (5) Аксиома (цикла «пока»). > Посылки: А — действие; V — утверждение; С — предикат; [РиС] А [V] > Заключение: [V] while С loop A end loop [V и (не С)] Более точно, цикл «пока» является аббревиатурой более общего цикла: loop exit when not С; Действие; end loop В аксиоме цикла «пока» заложен более общий принцип рассуждения, чем рекуррентность, — индукция. Из сформулированной аксиомы можно сразу же сделать вывод, что любое свойство V, выполненное до входа в цикл и сохраняющееся при выполнении тела цикла, остается верным после окончания выполнения цикла. Такое утверждение V называется инвариантом цикла. Кроме того, при выходе из цикла предикат С, называемый условием циклического перехода, — ложный. Этот последний феномен необходимо рассмотреть более подробно, так как он затрагивает важный этап доказательства алгоритма. До сих пор все изученные алгоритмические конструкции были построениями, выполнение которых ограничивалось во времени: последовательность, альтернатива или итерация со счетчиком заканчиваются за определенное время, если предположить, что составляющие их действия выполняются за конечный отрезок времени. Но это не относится ни к циклу «пока», ни к любой другой итерации, более общей, чем цикл «для». Эти последние структуры управления потенциально бесконечны во времени, а на практике ограничены только проверкой условий выхода (когда они есть!). Таким образом, обоснование алгоритма, в котором представлены одна или несколько итераций, должно содержать две части: доказательство частичной корректности, цель которого— показать, что если Цикл пока while Условие loop Действие end loop
1-1.8 Итерация (продолжение и окончание) 31 алгоритм завершен, то он дает ожидаемый результат, и доказательство выхода, подтверждающее, что всякое выполнение алгоритма при любом наборе данных завершается по истечении определенного времени. Эти два этапа иногда очень отличаются по сложности; наиболее простой пример, известный как гипотеза Сиракуз, представлен напротив. Доказательство частичной корректности этого алгоритма, принимающего целое положительное число п в качестве исходного данного, является простым: если он завершен, то он преобразует пв1; однако в настоящее время никто не может доказать, что он завершается при любом положительном значении п (см., например, Терра [169], Лагариа [108] или Арзак [7]). Мы не будем пока приводить примеры алгоритмов (и доказательств), использующих итеративные структуры. Это будет сделано во время исследования первых полу численных алгоритмов. 1.8 Итерация (продолжение и окончание) Прежде, чем перейти к следующему разделу, в котором будет представлен дихотомический алгоритм возведения в степень — один из основных алгоритмов для алгебраических вычислений — и его реализация на языке Ада, опишем третью особую форму итерации и ее аксиоматику. Основываясь на этом, читатель сможет обобщить и изобрести аксиому, адекватную любой форме итерации. Эта третья форма итерации является итерацией с одним выходом, расположенным в середине цикла. Вот, без объяснений (предыдущие параграфы в полной мере развили интуитивный аспект аксиом), аксиома, управляющая действием этой структуры. (6) Аксиома (итерации). > Посылки: А и В — действия; С — предикат; V и Q — утверждения [Q]A[V] и [V] и (не С)] В; А [V] > Заключение: [Q] loop A exit when С; В end loop [V и С] Гипотеза Сиракуз while n ф 1 loop if n mod 2 = 0 then n i— n/2 else n <— (3 x n + l)/2 end if end loop loop Действие 1 exit when С Действие 2 end loop
32 1-2 Дихотомический алгоритм возведения в степень 2 Дихотомический алгоритм возведения в степень В настоящем разделе рассматривается дихотомический алгоритм возведения в степень. В общем виде он позволяет вычислить n-ю степень элемента в моноиде. Будучи применен к множеству целых чисел с операцией сложения, этот метод позволяет умножать два целых числа и более известен как египетское умножение. Рассматриваемый алгоритм — один из наиболее употребительных в методах алгебраических вычислений. В самом деле, наряду с алгоритмами Евклида, возведение в степень является основой большинства арифметических вычислений в конечных кольцах Z/pZ, в частности, для проверки простоты чисел Ферма и Мерсенна, нахождения квадратичных вычетов и т.д. Будут использованы два совершенно различных подхода для представления этого алгоритма: алгоритмический подход, наиболее распространенный в курсах информатики, и более классический, математический подход. Эти два подхода позволяют дать, с одной стороны, доказательство (корректности) некоторого очень простого алгоритма, а с другой — показать, как на основе явных математических формул можно построить соответствующий вычислительный алгоритм. В алгоритмах, которые мы в дальнейшем представим, будут равным образом использованы оба эти подхода в зависимости от природы решаемой задачи. Классический алгоритм возведения в степень посредством последовательного умножения характерен, главным образом, своей неэффективностью в обычных обстоятельствах - его время работы линейным образом зависит от показателя степени (упражнение 28 показывает, что в более сложных случаях это не так). Дихотомическое возведение в степень, несмотря на логарифмическую оценку сложности в зависимости от показателя степени, не является наилучшим из всех известных методов (цепочки сложений иногда дают лучшие результаты, см. Кнут [99]), но оно, вне всякого сомнения, является самым простым из них. Основным его предположением является то, что время вычисления операции умножения является константой независимо от того, к каким элементам эта операция применяется. Если же это не так (например, в кольце полиномов), то существует много других простых и более эффективных методов (см., в частности, упражнение 28).
1-2.1 Математический (или рекуррентный) подход 33 2.1 Математический (или рекуррентный) подход Возьмем моноид1 М с операцией умножения и рассмотрим некоторый элемент хо из М, а также произвольное натуральное число по. Для того, чтобы вычислить Xq°, представим п0 в двоичной системе счисления: no = bt2* + б*-!^"1 + • • • + Ьг2х + 602°, предполагая, что п0 содержит (t + 1) двоичных цифр (т.е. что bt ф О и 6t+1 = 0). В этих условиях вычисляемое выражение может быть записано: t t xj° = Y[xb2i или же х£° = JJ х2\ •=0 1=0 Если задана последовательность (x,)o^i^t, первый элемент которой есть хо, и Х{ для г £ [lyt] определено соотношением х, = х?_1у то можно записать xj}0 = П{х« I 0 ^ i ^ t,b{ ф 0}. Чтобы завершить построение алгоритма и иметь возможность получить значение предыдущего произведения, необходимо вычислить биты 6,- числа по. Читатель легко сможет проверить для последовательности Р <— 1; i <— 0; while щ ф 0 loop if щ mod 2ф0 then Pi—Р ххц end if; n;+i i— [ni/2\\ Xi+i i Xi X X%\ t <— t -h 1; end loop; return P; (tti)o^i^t+i (с начальным элементом по), определенной соотношением щ = [n,_i/2j для любого г £ [1,^+1], что бит 6,- равен нулю, если п,- четно, и равен единице в противном случае и что первое значение индекса г, для которого щ равно нулю, есть t + 1. Предыдущее рассуждение позволяет представить «математическую» версию дихотомического алгоритма возведения в степень с исходными данными хо (элемент моноида М) и по (некоторое натуральное число) и результатом Р = Xq°. Этот алгоритм представляет собой простой синтез предыдущих вычислений, представленный в алгоритмической форме вместо того, чтобы быть выраженным с помощью лемм, свойств и т.п. Заметим, что в Запомним, что моноид- это структура, состоящая из множества и определенного на нем внутреннего ассоциативного закона композиции и содержащая нейтральный по отношению к этому закону элемент. Например, множество всех слов, которые можно записать с помощью букв фиксированного алфавита, наделено структурой моноида, если добавить еще операцию конкатенации (заключающуюся в приписывании одного слова в конец другому), которая обладает свойством ассоциативности, и пустое слово, которое является нейтральным элементом для этого закона; в результате получается свободный моноид — структура, имеющая чрезвычайно важное значение в информатике. 3-1017
34 1-2 Дихотомический алгоритм возведения в степень х <— хо\ п <— по; Р i— while n ф 0 loop if n mod 2^0 then P i P X X\ end if; n i— |_ri/2j; x i— x end loop; return P; - 1; x x\ процессе построения алгоритма появляется переменная x*+i, которая не встречается в последовательности (х,). В последующих алгоритмах будем избегать бесполезного вычисления этого значения. Естественно, что предложенный алгоритм не очень удобен для использования в той форме, в какой он изложен. В частности, в нем присутствуют переменные с индексами — объекты, которые программисты используют в своих программах очень неохотно и при крайней необходимости. Тем не менее, на базе этого псевдо-алгоритма нетрудно построить настоящий. Для этого достаточно оптимизировать использование входящих в него переменных. Каждая переменная х, появляется только два раза: первый раз, когда определяется ее значение, а второй — в вычислении, использующем это значение. Следовательно, все вхождения переменных х,- можно заменить на вхождения одной единственной переменной х. Алгоритм 1. Совершенно аналогична процедура для переменных п, (заменяемых одной переменной п), что делает ненужной переменную i. Здесь приведена эффективная версия (Алгоритм 1) дихотомического алгоритма возведения в степень. Благодаря использованному методу построения, не требуется никакого доказательства его корректности. Достаточна лишь проверка последней приведенной записи. Далее мы дадим окончательную версию алгоритма, которая несколько отличается от приведенной здесь, главным образом, возможностью обнаружения ошибок и надежностью алгоритма. Рассмотрим теперь другой подход, позволяющий конструировать алгоритмы, — алгоритмический подход. Этот метод концептуально сильно отличается от предыдущего, но не более и не менее совершенен. В зависимости от условий тот или иной будет использоваться с большей или меньшей легкостью. 2.2 Алгоритмический подход Этот подход основан на следующем замечании: для натурального числа п ~W2r/2, если п четно, если п нечетно.
1-2.2 Алгоритмический подход 35 Он приводит к алгоритмам двух типов. Первый, получаемый без вычислений из вышеприведенного определения, является рекурсивным алгоритмом и не требует никакого обоснования, поскольку он — результат непосредственного применения безупречного определения. Второй является итеративным алгоритмом, который требует доказательства. Рекурсивный алгоритм по очевидным причинам записан в виде функции Exponentiation (см. предыдущий рисунок). В этом алгоритме рекурсивные вызовы имеют место во время определения возвращаемого значения функции и в точности соответствуют индуктивному определению, приведенному в начале раздела. В более общем алгоритме использование этой функции осуществлялось бы операцией типа: Resultat <— Exponentiation(xo, no). Замечание. Определение возведения в степень может быть дано также в следующем виде: хп = (х*)2, если п четно, хп = х(х~~*~)2, если п нечетно, который позволяет построить рекурсивный алгоритм, слегка отличающийся от предыдущего. Однако эта последняя формулировка несколько хуже подходит для конструирования итеративного алгоритма, чем исходная. В качестве упражнения читатель может попробовать записать соответствующий алгоритм. Главная идея, на которой основывается построение итеративного алгоритма, представляет собой другую интерпретацию определения, приведенного в начале этого раздела: • чтобы вычислить хп, где п положительно, достаточно возвести х в квадрат и возвести полученный результат в степень п/2, до- множая поправочный множитель на х, если п нечетно; • кроме того, когда п принимает значение 0, искомый результат должен быть равен поправочному множителю, что и дает начальное значение поправочного множителя. Таким образом, алгоритм состоит в вычислении поправочного множителя так, чтобы произведение текущего значения хп и поправочного множителя было все время равно искомому результату xj}0, где х0 и по являются начальными значениями х и п соответственно. Итак, инвариантным соотношением алгоритма будет с х хп = х"0. if n = 0 then return l; elsif n mod 2 = 0 then return Exponentiation(x x x,n/2); else n mod 2 = 1 then return x x Exponentiation(x x x,n/2); end if; 3*
36 1-2 Дихотомический алгоритм возведения в степень Предыдущие замечания приводят нас к искомому итеративному алгоритму (рис. 2-А), вполне аналогичному тому алгоритму, который был получен в результате рекуррентного подхода к решению проблемы. В этом алгоритме до и после каждого шага рассматриваются соотношения, которые позволяют доказать справедливость метода. Проверка корректности этих утверждений становится детской игрой для того, кто понял смысл обозначений. Чтобы облегчить чтение, обозначим переменную, которая позволяет вычислять поправку, буквой с. В реальной программе или же алгоритме, в котором, возможно, представлены не все утверждения, использовалось бы, разумеется, более выразительное имя. Всюду в дальнейшем входящие в алгоритмы утверждения будут затушеваны, как на рис. 2, для того, чтобы отличать утверждения от действий, совершаемых алгоритмом. Документирование алгоритма посредством утверждений доказывает его частичную корректность. Остается показать, что алгоритм останавливается при любых данных, поданных на вход, только бы они соответствовали спецификациям. Общим принципом доказательства остановки алгоритма является введение некоторой положительной величины, которая строго убывает с каждой итерацией, — величины, которую можно назвать длиной алгоритма (или же расстоянием до точки окончания). В этом частном случае такая работа чрезвычайно проста, ибо длина алгоритма измеряется на самом деле самим же целым числом п. Это целое число положительно, строго убывает с каждой итерацией — оно делится каждый раз пополам — и, следовательно, через конечный отрезок времени становится нулем, делая тем самым условие возобновления цикла ложным, и алгоритм останавливается за конечное время. Внимательное изучение последнего алгоритма показывает, что даже если с теоретической или алгоритмической точки зрения он корректен, в процессе его буквальной реализации могут появиться определенные проблемы. Некоторые вычисления могут оказаться бесполезными и даже опасными: так, возведение х в квадрат может вызвать переполнение во время выполнения последней итерации, даже если искомый результат вполне вычислим. Аналогичным образом, описанный алгоритм не способен корректно вычислить результат, когда показатель отрицательный или не является целым числом. Проверка природы целого числа по обычно является функцией среды реализации языка. И хотя можно снова опираться на язык, если речь идет о языке Ада, будет удобнее, по крайней мере в экспериментальной версии, приступить самому к проверкам первого типа.
1-2.3 Изучение сложности алгоритма 37 А. Алгоритм с полным доказательством с <— 1; х <— Хо] п <— По; while n ф 0 loop if n mod 2ф0 then с <— с х х\ end if; п<— Ln/2j; X i X X Х\ end loop; return c; В. Окончательный вариант X i Xo\ П i По; if n mod 2 ф0 then с i— x; else c<—1; end if; loop n<—Ln/2j;*x (**)»« «J* exit when n = 0; X i X X X\ if n mod 2ф0 then с <— с х х; end if; end loop; return c; Алгоритм 2. Дихотомическое возведение в степень Мы видим (алгоритм 2-В) окончательную версию дихотомического алгоритма возведения в степень. Версия эта очень близка к разработке в языке Ада. Во избежание усложнения алгоритма (и это правило будет применено к большинству представляемых алгоритмов) единственное утверждение, фигурирующее еще в тексте алгоритма, — это инвариант цикла, позволяющий правильно понять используемый метод. 2.3 Изучение сложности алгоритма Чтобы завершить изучение алгоритма, остается оценить его сложность, т.е. сосчитать с достаточной точностью число элементарных операций, необходимых для его выполнения при фиксированных данных. Ясно, что число итераций, необходимых для выполнения алгоритма, зависит только от показателя. Упростим обозначения, предположив, что п (вместо по) — показатель, и предположим, в соответствии с обозначениями, введенными при исследовании рекуррентного алгоритма, что число цифр в двоичной записи п равно t+l. Это равносильно тому, что 2* ^ п < 2t+1 или t ^ log2 n<t + l. Первая часть этого свойства может быть выражена следующим образом: [n/2t+1J = 0 и [п/2г\ ф О, что позволяет точно определить число
38 1-2 Дихотомический алгоритм возведения в степень совершаемых делении п, равное числу итерации алгоритма при заданном значении п. Очевидно, нужно совершить t + 1 итераций, чтобы выполнить алгоритм, т.е. [log2 n\ + 1 итераций. Следовательно, трудоемкость алгоритма есть O(logn). Порядок величины — достаточная оценка, начиная с момента, когда константа, замаскированная обозначением О, находится в разумных пределах, как в данном примере. Можно было бы уточнить число операций, но это не представляет большого интереса. Замечание. Как было уже сказано в начале раздела, дихотомический алгоритм возведения в степень не всегда является оптимальным методом для вычисления п-й степени элемента моноида, даже если базовая операция выполняется за постоянное время. Например, чтобы сосчитать х15, используя дихотомическое возведение в степень, требуется 6 умножений: сосчитать х2, х4, х8 и умножить вместе х и эти три величины. Однако, если начать с вычисления х5 (посредством х, х2 и х4), возводя последнюю величину в куб, сосчитаем х15 за 5 умножений. Метод, использованный в вычислении, известен как «цепочка сложений» и идея его следующая: цепочка сложений для п — это последовательность целых чисел ао = 1, ai, аг, ..., аг = п, которая удовлетворяет следующему свойству: Vi € [1, г], 3.;, к такие, что 1 ^ к ^ j < t и ai = aj +ak. Цель изучения цепочек сложения в том, чтобы найти при любом п как можно более короткую цепь сложений. Затем можно применить полученный результат для открытия самого эффективного метода, позволяющего вычислить хп с помощью умножений. Не вдаваясь в детали метода, проиллюстрируем основной принцип использования цепочек сложения. Предположим, что требуется вычислить х54. Чтобы произвести расчет дихотомическим методом, нужно сосчитать следующие степени х: х, х2, х4, х8, х16 и х32. Потом выполнить необходимые умножения этих чисел друг на друга. Бели выполнить сразу только одно умножение и расположить полученные члены в порядке возрастания степеней, то получим последовательность х, х2, х4, х6, х8, х16, х22, х32 и х54. Эта последовательность, совершенно очевидно, соответствует цепи сложений (1,2,4,6,8,16,22,32,54), которая не минимальна, потому что 54 можно получить при помощи цепи (1,2,3, 6,9,18, 27,54), являющейся минимальной. Это означает, что вычисление 54-й степени х произойдет очень быстро при выполнении расчетов: 2 Хо = X, Xi = Хо * Хо = X ,
1-2.3 Изучение сложности алгоритма 39 3 6 9 Х2 = Хо • Х\ = X , Хз = Х2 ' Х2 = X , £4 = Я?2 • Хз = X , 18 27 54 Xs = #4 * Х4 = X , Хб = Х4 * #5 = X , Х7 = #6 * #6 = X Заинтересованный читатель может обратиться к работе [99]: искусство программирования», откуда были взяты описанные примеры. 3 Введение в программирование на языке Ада Пришло время представить первые программы на языке Ада. Основной прием, используемый для этого, заключается в представлении исходного текста1 на языке Ада, результатов выполнения — чаще всего для определения времени их получения — и комментария к Ада-программе для объяснения новых введенных понятий или специальной техники программирования. 3.1 Программа сравнения двух методов возведения в степень Эта первая программа — непосредственное воплощение алгоритма, изученного ранее; она позволяет сравнить время вычисления дихотомического алгоритма возведения в степень и алгоритма возведения в степень посредством последовательных умножений. Разумеется, результат не будет неожиданным: первый алгоритм требует O(logn) умножений, а второй 0(п); однако, полученные величины могут удивить того, кто не имеет опыта в этом типе вычислений и кто только с позиций теории знает о различии в росте между линейной и логарифмической функциями. Для измерения времени мы используем стандартную библиотеку Calendar, хронометр которой имеет разрешающую способность около 50 мкс (для нашего компилятора). *В этом контексте исходный текст обозначает файл, который содержит текст программы на исходном языке (здесь Ада) и который после компиляции порождает файл, записанный на целевом языке (обычно, машинный язык). Для краткости часто просто говорят о программе или исходном модуле в отличие от объектной программы или объектного модуля.
40 1-3 Введение в программирование на языке Ада Входные данные Р 181 X 11 17 23 29 31 37 41 43 47 п 1024 4 096 16384 65536 262 144 1048576 4194304 16777216 67108864 Время вычисления (сек.) Послед, умн. 0.050 0.221 0.710 2.859 11.370 45.529 182.130 728.090 2912.370 Дих. воэв. в ст. 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 Результат хп mod р \ 126 39 15 29 59 34 15 43 102 J Таблица 1. Вычисление хп modp Несколько комментариев по таблице 1: • прежде всего, и это не зависит от сделанных измерений, расчеты производились по модулю целого числа р, чтобы можно было оценить большие степени, не сталкиваясь с проблемами переполнения машины целыми числами; • когда используют таблицу этого типа, в которой представлены измерения времени вычисления, не нужно никогда забывать, с какой точностью были сделаны эти измерения (разрешающая способность таймера); в этом примере, в частности, время выполнения порядка 50 мкс не было значимым; • в самом делеу заключаем, что сложность возведения в степень методом последовательных умножений является линейной по отношению к показателю: в каждой строке таблицы, показатель, так же, как и время вычисления, умножается на 4; предпоследнему измерению соответствует время вычисления около 12 минут, при вполне разумном суммарном значении показателя, а последнее измерение, при показателе порядка 70 миллионов, дает нам время абсолютно неразумное (около 50 минут); это доказывает, что алгоритм, работающий с помощью метода последовательных умножений не может быть использован в контексте более широком, чем сравнение алгоритмов; • зато невозможно выявить малейшее изменение времени вычисления для дихотомического алгоритма возведения в степень, при таких малых значениях п; • число, по модулю которого производятся вычисления, является наибольшим простым числом р таким, что (р — 1)2^215 — 1; это означает, что умножения по модулю р могут быть сделаны на машине, оперирующей целыми 16-битовыми числами (со знаками),
1-3.1 Программа сравнения двух методов возведения в степень 41 без риска переполнения (читатель, желающий больше узнать об арифметике компьютеров, может обратиться к Таненбауму [168], Мюллеру [132] или Менадье [126]); • результат вычисления, хп mod p, хотя и приведен в этой таблице, абсолютно не представляет никакого интереса; но программа без результатов еще способна шокировать чувствительные сердца. Этот первый пример не может служить образцом программирования на языке Ада, в том смысле, что опытный программист не записал бы его в такой форме. В частности, типизация данных чрезвычайно слаба: моноид, на котором действует возведение в степень, — это множество целых чисел по модулю р с обычным умножением, представленное в программе типом Integer, показатель — предопределенного типа Long-Integer, чтобы иметь возможность использовать относительно большие показатели. Эти два типа еще не очень различаются, но ведь речь пока идет только о написании первой Ада-программы; этот тип программирования больше приближен к программированию на языке Паскаль, с которым читатель может быть более знаком. «Хороший» вариант Ада-программы будет представлен в конце этого раздела после введения основных понятий языка Ада. . Программа оценки дихотомического возведения в степень . with Text-IO, Calendar; procedure Exponentiation-First-Version is p : constant Integer := 181; subtype Modular-Integer is Integer range 0 .. p - 1; x, Dichotomic-Result, Sequential-Result : Modular-Integer; n : Long-Integer; Begin-Time : Calendar.Time; Computation-Time : Duration; package Long-Integer-10 is new Text-IO.Integer-IO (Long-Integer); package Modular-Integer-IO is new Text-IO.Integer-IO (Modular-Integer); package Duration-IO is new Text-IO.Fixed-IO (Duration); use Calendar, Text-IO, Duration-IO, Modular-Integer-IO, Long-Integer-10; function Dichotomic-Exponentiation (xO : Modular-Integer; nO : Long-Integer) return Modular-Integer is x : Modular-Integer := xO; n : Long-Integer := nO; Correction : Modular-Integer; begin if n mod 2 /= 0 then Correction := x mod p; else Correction := 1; end if; loop n := n / 2;
42 1-3 Введение в программирование на языке Ада . Программа, оценки дихотомического возведения в степень (Продолжение) .. exit when n = 0; х := (х * х) mod p; if n mod 2 /= 0 then Correction := (Correction * x) mod p; end if; end loop; return Correction; end Dichotomic-Exponentiation; function Sequential-Exponentiation (xO : Modular-Integer; nO : Long-Integer) return Modular-Integer is x-To-i : Modular-Integer := 1; begin for t in 1 .. nO loop x-To-i := (x-To-i * xO) mod p; end loop; return x-To-i; end Sequential-Exponentiation; begin - - Exponentiation-First-Version Put-Line ^,0цвнка1_дихотоюсчвского1_эоэввдвния1_э»_|Ствпвнь.\J*); loop Get (x); exit when x = 0; Get (n); Put (x); Put (n); Begin-Time := Clock; Sequential-Result := Sequential-Exponentiation (x, n); Computation-Time := Clock - Begin-Time; Put (Computation-Time); Begin-Time := Clock; Dichotomic-Result := Dichotomic-Exponentiation (x, n); Computation-Time := Clock - Begin-Time; Put (Computation-Time); if Dichotomic-Result = Sequential-Result then Put (Dichotomic-Result); else raise Numeric-Error; end if; New-Line; end loop; end Exponentiation-First- Version; Комментарий к этой программе заключается, в основном, в описании структуры Ада-программы. В общих чертах, программа в языке Ада — это процедура (без параметров, в случае используемого нами компилятора), построенная на основе элементарных или сложных действий и объектов, которые можно определить во внешних блоках компиляции — блоки могут быть процедурами, функциями или пакетами (название, данное тому, что в других языках называется модулями или библиотеками).
1-3.1 Программа сравнения двух методов возведения в степень 43 Предыдущая Ада-программа образует блок компиляции, в данном случае являющийся главной программой; она состоит, в основном, из двух частей: • определение контекста компиляции (оператор with); этот оператор позволяет компилятору распознать используемые внешние объекты, определенные в другом блоке компиляции, и убедиться в связности между их спецификацией и использованием; • текст подпрограммы, соответствующий блоку компиляции. Оператор контекста ► with Text JO, Calendar 4 касается двух стандартных пакетов: первый из этих модулей Text J О содержит все обычные процедуры ввода-вывода текстовых файлов (включая, конечно, клавиатуру и экран); под этим понимается считывание и написание знаков, последовательностей знаков, чисел различных типов и т.д. Пакет Calendar содержит определения типов, операторов и подпрограмм, которые позволяют произвести измерение времени. Затем идет определение процедуры, которая играет роль главной программы; с точки зрения структуры, эта процедура полностью аналогична процедуре на языке Паскаль. Она включает, в определенном порядке, последовательность описаний констант, типов и переменных, несколько конкретизации настраиваемых пакетов, определения функций и, наконец, само тело процедуры. Рассмотрим, прежде всего, описательную часть данной процедуры. После определения константы р находим определение подтипа, в котором будут сделаны расчеты: ► subtype Modular Jnteger is Integer range 0..p— 1; <. Это определение позволяет ограничить множество допустимых значений, а среди целых значений рассматривать только те, которые заключены между 0 и р — 1. Это приводит, в частности, к тому, что во время выполнения программы операционная среда языка Ада будет контролировать значения переменных типа Modular Jnteger и вызовет внезапную остановку программы, если эти значения выйдут за рамки намеченного интервала. После данного определения типа мы видим описания трех переменных этого подтипа, используемых в ходе вычислений, потом переменную, представляющую показатель. Данная переменная относится к (предопределенному) типу Long Jnteger, несовместимому с типом Integer. Замечания. Ада имеет несколько предопределенных типов, которые мы не будем здесь подробно рассматривать; их список можно найти в приложении F в справочнике, сопровождающем любой компилятор, достойный этого названия. Однако, мы скажем несколько слов о целых типах. Компилятор языка Ада дол-
44 1-3 Введение в программирование на языке Ада жен предоставить, как минимум, один предопределенный целый тип, называемый Integer, кроме того, он может давать другие целые типы с названиями Short-Integer, Long-Integer, ShortJShort-In- teger, ... характеризуемые тем, что, например, тип Short-Integer не может быть больше типа Integer, который в свою очередь не может быть больше типа Long-Integer ... как скучно все это объяснять! Это наложение на целые типы позволяет высказать дополнительные критические замечания по поводу предыдущей программы. Действительно, идентификатор Long-Integer появляется там отчетливо несколько раз, и это означает, что нужно будет сделать много модификаций при переносе этой программы на машину, компилятор которой не содержит типа Long-Integer. Этот недостаток исправлен в последующих Ада-программах. Данная первая версия представляет только первый опыт программиста, привыкшего писать на Паскале. Переменная Ведгп-Тхте принадлежит типу Time, определенному в пакете Calendar и обозначающему набор время-дата. Без дополнительного уточнения после спецификатора контекста этот тип не является непосредственно видимым, и нужно задать компилятору Ада путь, позволяющий обнаружить определение в описанных модулях, что и делается с помощью выражения Calendar. Time, обозначающего, что тип Time определен в пакете Calendar. Во избежание тяжеловесности записи, вызванной этим феноменом, нужно, чтобы объекты пакета Calendar стали видимыми, начиная с подпрограммы, что и делается в строке программы, содержащей спецификатор ► use Calendar 4 : с этого оператора все происходит так, с точки зрения видимости, как если бы описания пакета Calendar фигурировали в тексте подпрограммы. Последняя переменная программы, Computation-Time, типа Dura- tion, используется для выражения результатов измерений времени, выполненных в программе. Тип Duration — это предопределенный тип, позволяющий найти продолжительность, выраженную в секундах: это реальный тип с фиксированной точкой, т.е. с точностью абсолютной, а не относительной, как в случае реальных типов с плавающей точкой. Язык Ада типизирован до такой степени, что, к примеру, процедуры ввода-вывода отличаются для объектов различных типов; это придает языку большую однородность. Однако, было бы не очень удобно определять такие процедуры для каждого численного типа, который хотят использовать, — на самом деле способ вывода чисел целого типа всегда одинаковый, независимо от того, о каком целом идет речь: обыкновенном, длинном или о любом другом целом типе, определенном
1-3.1 Программа сравнения двух методов возведения в степень 45 пользователем. Рассуждение совершенно аналогично для определенных пользователем действительных, символьных и других типов. По этим причинам и по многим другим, которые возникнут позднее, язык Ада обладает понятием настраиваемого объекта, позволяющим более легко воплотить абстрактные типы. Таким образом, стандартный пакет Text J О содержит определенное число настраиваемых подпакетов, позволяющих без труда создать для каждого особого типа процедуры ввода-вывода, соблюдая типовые ограничения, необходимые для связности и точности языка: для целых типов, например, настраиваемый пакет ввода-вывода — TextJOJnte- gerJO. В определении настраиваемого модуля некоторые параметры функционирования модуля не уточняются, но прежде, чем использовать такой модуль, нужно явно указать эти параметры. Таким образом, параметры настраиваемого пакета IntegerJ0 определяются целым типом, для которого предполагается реализовать ввод-вывод; во время своей конкретизации — фазы, позволяющей вызвать генерацию, — исходя из общей совокупности объектов, предназначенных для использования, нужно уточнить целый тип, который придется обрабатывать. В примере этой программы имеются два целых типа, для которых необходимо зарегистрировать методы ввода-вывода; итак, находим две конкретизации пакета Integer JO. Два новых пакета определены; в дальнейшем можно будет на них ссылаться. package LongJntegerJO is new Text JO .IntegerJO (LongJnteger); package ModularJntegerJO is new TextJOJntegerJO (Modular Jnteger); Затем в исходном тексте находим конкретизацию для типа Duration настраиваемого пакета Fixed JO, позволяющего производить ввод- вывод действительных типов с фиксированной точкой. Потом, для облегчения записи последовательности программы, четыре пакета ввода- вывода перечисляются в описанном выше операторе use (что делает видимым все объекты внутри пакетов, и при отсутствии конфликтов позволяет использовать эти объекты без упоминания их источника). После всех этих описаний находим в тексте две функции возведения в степень, которые служат для сравнения двух разработанных методов. Эта часть Ада-программы не требует много комментариев потому, что она точно отражает алгоритм, изученный в разделе 2.2 (страница 36); единственная неизвестная команда — это return, которая вызывает остановку функции и определение ее значения. Важно отметить, что все параметры функции в языке Ада являются входящими, или в режиме in. Таким образом значения фактических параметров вызова функции передаются соответствующим формаль-
46 1-3 Введение в программирование на языке Ада ным параметрам во время активации этой функции (с помощью метода, который нет необходимости здесь описывать). Синтаксис языка Ада не позволяет подпрограмме изменять свои формальные параметры режима т, рассматриваемые как константы в теле подпрограммы. Это приводит, в частности, к тому, что вызов функции не может привести к изменению параметров вызова (это противоречило бы логике и духу программирования). И, наконец, программу завершает тело главной процедуры, требующее лишь небольших комментариев: • функция Clock определена в пакете Calendar и возвращает дату и время; • функции Put и Get позволяют, соответственно, считывание и запись; однако на этом этапе напрашивается замечание: хотя процедуры считывания различны для целых и вещественных, а также различны для разных целых типов, обычно названия у них одинаковые. Это так называемая перегрузка идентификаторов, которая может использоваться только с идентификаторами функций, операторов или процедур. В зависимости от контекста, в частности, от типа параметров, компилятор устраняет двусмысленности; • работу программы достаточно легко понять: по очереди считы- ваются два целых: одно х типа Modular-Integer, второе п типа LongJnteger и вычисляется хп сначала с помощью простого метода, потом с помощью дихотомического. Во время каждой операции время выполнения измеряется и выводится на экран. Наконец, после оценки результата двумя методами, так как речь идет об экспериментировании, два результата вычисления сравниваются (никто не застрахован от ошибки программирования!), и в случае (очень маловероятном), когда будет расхождение, программа возбуждает предопределенное исключение NumericJError, что приводит к ее немедленному завершению, как если бы дело касалось ошибки выполнения. Этот механизм исключения является методом, избранным разработчиками языка Ада для обработки ошибок и их устранения. Нам еще представится случай к нему вернуться. Программа останавливается, когда для переменной х берется значение, равное нулю.
1-3.2 Об использовании типов 47 3.2 Об использовании типов После этой первой версии, представим теперь другую программу, где дихотомический алгоритм возведения в степень еще фигурирует, но в виде, который больше приближается к тому, что мы считаем программированием на языке Ада. В частности, обрабатываемые объекты там намного более типизированы, чем в первоначальной версии, что позволит впоследствии без больших усилий построить настраиваемую версию дихотомического возведения в степень. Но прежде всего пример выполнения (таблица 2) позволяет констатировать, что при значениях показателя, близких к допустимому максимуму, время вычисления на большинстве машин не всегда будет значимым. Входные р 46337 X 31 37 41 43 47 53 59 61 : данные п 262144 1048576 4194304 16777216 67108 864 268435456 1073741824 2147483647 Время (сек.) Дих. возв. в ст. 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 Результат хп mod р 1 3951 43153 1430 29703 26840 43887 13314 5770 1 Таблица 2. Вычисление хп mod p Комментарии будут краткими: • число 46337 — наибольшее простое число р такое, что (р — I)2 ^ 231 — 1, следовательно, можно выполнять умножения по модулю р без риска переполнения на машине, обладающей целыми 32-битовыми числами со знаками1, • как в предыдущей таблице, целые х являются простыми числами, а целые п, все (кроме последнего) — степени двойки (более точно, п имеет форму 24Л), • целое 2147483 647 — это наибольшее положительное целое, которое может быть представлено в машине, оперирующей 32-битовыми словами и использующей целую, знаковую арифметику в дополнительном коде (оно равно 231 — 1). 1В языке Ада числа могут задаваться программе с использованием символа подчеркивание (_) для того, чтобы сделать их более понятными; и возможно даже, что они будут выражены не в десятичной системе счисления! Так, число 46337 может быть задано в тексте программы или при считывании в виде 46_337, или 7#252_044#, когда его хотят выразить в системе с основанием 7.
48 1-3 Введение в программирование на языке Ада Основное отличие двух первых версий программы (это мы отметили в предыдущем параграфе) состоит в различии (на уровне используемых типов) между элементами моноида, в котором они работают, и показателями, которые всегда целые; что, впрочем, не нарушает общности изложения. Итак, рассмотрим исходный текст этой программы: Дихотомическое возведение в степень with Text-IO; use Text-IO; with Calendar; use Calendar; procedure Exponentiation-Second-Version is p : constant ;= 46-337; type Modular-Integer is range 0 .. p - 1; type Exponent is new Long-Integer; n : Exponent; x , Result : Modular-Integer; Begin-Time : Time; Computation-Time : Duration; package Exponent-IO is new Integer-IO (Exponent); package Modular-Integer-IO is new Integer-IO (Modular-Integer); package Duration-IO is new Fixed-IO (Duration); use Exponent-IO, Modular-Integer-IO, Duration-IO; function Multiply (a, b : Modular-Integer) return Modular-Integer is — переопределение умножения для типа Nodular-Integer begin return Modular-Integer ((a * b) mod p); end Multiply; function Dichotomic-Exponentiation (xO : Modular-Integer; nO : Exponent) return Modular-Integer is x : Modular-Integer := xO; n : Exponent := nO; Correction : Modular-Integer; begin if n mod 2 /= 0 then Correction := x; else Correction := 1; end if/ loop n := n / 2; exit when n = 0; x := Multiply (x, x); if n mod 2 /= 0 then Correction := Multiply (Correction, x); end if; end loop; return Correction; end Dichotomic-Exponentiation;
1-3.2 Об использовании типов 49 Дихотомическое возведение в степень (Продолжение) . . . begin — Exponentiation-Second-Version Put-Line (/,,Дмхотоюсческое1_эоэведение1_Э1_|Степень ,1_эторая(_эерсияму); loop Get (х); exit when x = 0; Get (n); Begin-Time := Clock; Result := Dichotomic-Exponentiation (x, n); Computation-Time := Clock - Begin-Time; Put (x); Put (n); Put (Computation-Time); Put (Result); New-Line; end loop; end Exponentiation-Second- Version; В начале этого текста стоит, как обычно в любой программе, спецификатор контекста, который указывает на два пакета, а за ним сразу же следует соответствующий спецификатор использования use. Спецификатор use может появиться в контекстной части блока компиляции или в любом месте описательной части: место, где появляется спецификатор use, определяет области видимости объектов, содержащихся в пакетах, на которые он указывает. В описательной части снова видим описание константы р, но в данной версии она недостаточно типизирована: это, так называемая, универсальная константа, что означает ее совместимость со всеми целыми типами. Нормой языка Ада является то, что вычисления, выполняемые на универсальных константах, должны быть точными, и для удовлетворения этой нормы любой компилятор способен производить расчеты на любых больших универсальных константах; в дальнейшем мы увидим это использование. Константа р используется затем, чтобы определить целый тип; этот тип определяется абсолютным способом, как интервал натуральных чисел (в терминологии языка Ада целые математические числа называются целыми универсальными). Преимущество этого метода в том, что он делает определения используемых типов независимыми от предопределенных типов, существующих в конкретной используемой реализации. При компиляции программы могут происходить два события, относящиеся к этому определению типа: • тип не может быть представлен в реализации: в этом случае компилятор делает предупреждение и отказывается компилировать, • тип может быть представлен, и язык Ада гарантирует, что результаты вычисления будут идентичными, каковы бы ни были 4-1017
50 1-3 Введение в программирование на языке Ада используемая машина или реализация языка, при условии, что не будет переполнения. После этого определения находим второе определение типа: ► type Exponent is new LongAnteger 4. Это определение производного типа, что означает: тип Exponent идентичен по всем пунктам типу LongAnteger, но эти два типа несовместимы; тип LongAnteger — это родительский тип типа Exponent. Во время записи программы, при условии преобразования явных типов, будет совершенно невозможно соединить переменные этих двух типов в одно выражение; эта несовместимость обеспечивает большую надежность программирования, не допуская смешения (часто легкого) идентично представленных объектов (по причинам, связанным с реализацией данной программы), значения которых полностью отличаются друг от друга (не складывают, например, числа, представляющие вольты, с числами, представляющими амперы — техническая версия детской задачки о картошке и моркови). В этой программе два объектных типа — показатели и множество модулярных целых, на котором действует возведение в степень, — должны быть полностью несовместимыми. Определения типов нас убеждают в этой несовместимости. Разделение типов дает второе немаловажное преимущество: возможность переопределения операций и подпрограмм, воздействующих на объекты родительского типа; но это уже другой случай, к которому мы обратимся впоследствии. Когда выводится тип, производный тип наследует, априори, все свойства родительского типа, и, в частности, все происходит так, при отсутствии явного противоположного указания, как если бы все процедуры и функции, в спецификации которых появляется родительский тип, были повторно определены, и в этот раз с упоминанием типа, производного от родительского типа (это не совсем точно, но на данный момент достаточно; чтение справочника, который мы не будем здесь перефразировать, поможет в затруднительных случаях). В частности, это приводит к тому, что обычные элементарные операции, определенные на целых числах (сложение, умножение...) наследуются типами Exponent и ModularAnteger. К счастью! Если пришлось бы повторно определять все операции каждый раз при определении нового типа, программирование было бы очень трудным! После нескольких определений переменных (без новшеств по отношению к предыдущей программе) находим конкретизации настраиваемых пакетов ввода-вывода для всех обрабатываемых типов; созданные таким образом пакеты сразу же применяются в качестве объекта спецификатора use, чтобы облегчить использование процедур, которые
1-3.3 Итерация в моноиде — Настраиваемые функции 51 они содержат. Затем идет определение функции умножения целых модульных чисел; эта функция использует стандартное умножение целых чисел — умножение, которое унаследовал тип Modular Jnteger при своем построении. И, наконец, эта программа очень похожа на предыдущую, и мы теперь сможем направить наши усилия на более общую версию функции дихотомического возведения в степень. 3.3 Итерация в моноиде — Настраиваемые функции Если мы хотим реализовать метод более общим способом, перед началом программирования нужно задать себе несколько вопросов: 1. В каких границах применяется этот метод? В случае необходимости, в каких особых границах он будет применяться? 2. Каково формальное определение обрабатываемых объектов? 3. Какие ошибки могут возникнуть при использовании модуля, реализующего метод? Будут ли обнаружены эти ошибки во время компиляции или же они появятся при выполнении? 4. Каков тип потенциальных пользователей этого модуля? Существуют ли такие пользователи? 5. В каком виде он будет реализован? И каков его интерфейс? Когда можно ответить на эти вопросы или, по крайней мере, дать частичные ответы, тогда можно приступать к программированию. В интересующем нас случае представляем некоторые элементы ответа: 1. Метод может применяться в любом моноиде, как уже неоднократно говорилось, хотя никогда до сих пор мы не были поставлены в столь общие рамки. Окончательное наше желание — применить его в любом моноиде, при условии, что такая структура будет определена в программе1. 2. Рассматриваемый объект — это моноид, математическое определение которого следующее: моноид — это структура, состоящая из некоторого множества, закона внутренней композиции, ассоциативного на этом множестве, и выделенного элемента множества, который для этого закона является нейтральным элементом. Дополнительно, метод использует множество натуральных чисел — для показателей — и, хотя в математике этот объект универсален, нужно его точно определить в программе. 1В действительности, в этой версии будет еще существовать ограничение в представлении моноида. Но это уже тонкости программирования на языке Ада. 4*
52 1-3 Введение в программирование на языке Ада 3. Основные ошибки, которые могут появиться: • ошибки вычисления, вызванные переполнением разрядной сетки; эти ошибки будут, в принципе, обнаружены средой выполнения Ада-программы (дальше мы увидим, что лучше распространять определенные исключения, чем предопределенные исключения языка; но в данный момент и без этого все достаточно сложно); • ошибки, возникающие вследствие округлений или потерь точности, когда используют метод на неточно представленных структурах, например, числах с плавающей запятой; такие ошибки, если провести исследование числового поведения программы, неизбежны и не поддаются обнаружению, если серьезно не изучать результаты выполнений. Однако, этот тип ошибок не должен появиться при использовании данного метода, поскольку речь идет о точном, алгебраическом вычислении; • ошибки в использовании метода: либо используемые типы неадекватны, что компилятор обнаружит, либо эти же самые типы не соблюдают определенный диапазон использования; например, если используемый показатель — целое отрицательное число, то в конце программы, вероятно, будет ошибка. Можно, не перегружая слишком алгоритм, исправить этот особый дефект. Зато использование этого алгоритма с неассоциативным законом — т.е. не в моноиде — среди таких законов есть очень известные (вычитание и деление, например) приведет к получению непредсказуемых результатов, которые невозможно будет исправить; но в этом случае мы выходим за рамки применимости метода. 4. Желание каждого уважающего себя программиста состоит в том, чтобы его продукция использовалась повсеместно. В данном случае наша цель — не увеличивать ограничения, изложенные ранее, помня о том, что спецификация должна быть подтверждена очень точными документальными данными. 5. Учитывая вышеизложенные моменты, мы решили реализовать окончательную версию дихотомического возведения в степень в виде настраиваемой функции. Это позволит определить параметры модуля, построенного с помощью типа элементов обрабаты-
1-3.3.1 Настраиваемая функция дихотомического алгоритма... 53 ваемого множества, ассоциативного закона и нейтрального элемента этого закона, т.е. с помощью рассматриваемого моноида. 3.3.1 Настраиваемая функция дихотомического алгоритма возведения в степень Настраиваемая функция или, в более общем виде, настраиваемый блок компиляции в основном образован из двух частей: спецификации, содержащей описание формальных параметров настройки, и соответствующей реализации. Описание формальных параметров настройки позволяет установить характер и тип объектов, которые очень точно определяют функцию при ее реализации. В нашем случае этих параметров четыре, и первые три в точности соответствуют триплету, определяющему моноид: • тип элементов моноида, • закон композиции моноида, • нейтральный элемент моноида, • тип, представляющий множество натуральных чисел. Вот спецификация настраиваемой функции дихотомического возведения в степень: Спецификация настраиваемой функции generic type Monoid-Element is private; with function "*" (a, b : Monoid-Element) return Monoid-Element; Monoid-Unit : in Monoid-Element; type Exponent is range <>/ function Dichotomic-Exponentiation (xO : Monoid-Element; nO : Exponent) return Monoid-Element; Спецификация любой настраиваемой функции начинается с ключевого слова generic, затем следует список формальных параметров настройки и заголовок функции. Спецификацией называют видимую часть функции: она содержит все необходимые сведения для потенциального пользователя. Способ реализации функции не имеет никакого значения для пользователя (несколько оптимистический взгляд, но мы будем его придерживаться); спецификация играет роль способа употребления, списка указаний и противопоказаний. Формальные параметры настройки представлены в особом виде: • Тип элементов множества, соответствующий моноиду, является личным типом: ► type Monoid-Element is private; <*. Это означает, что при определении функции не нужно знать точную струк-
54 1-3 Введение в программирование на языке Ада туру этих элементов. Это позволяет получить стиль программирования, очень независимый от конкретных обрабатываемых объектов. В данном частном случае, например, мы вынуждены явно задать настраиваемому блоку умножение и нейтральный элемент (который не должен быть 1) и впоследствии ничто не помешает использовать эту функцию, чтобы выполнить вычисления в матричном моноиде. • Формальные параметры типа функции или процедуры вводятся ключевым словом with: ► with function "*" (a,b: Monoid-Element) return ^, что позволяет их отличить от настраиваемого объекта, которому задается спецификация. Здесь закон моноида обозначен операцией "*". Это означает, что, если мы хотим, чтобы в определении функции возведения в степень появилось произведение двух элементов моноида, то нужно использовать операцию умножения. Разумеется, это не приводит к переоценке конкретной функции, которая используется как фактический параметр во время реализации и которая может быть стандартным сложением, стандартным умножением или любой другой функцией, определенной пользователем. • Третий формальный параметр настройки - это нейтральный элемент моноида, который должен быть явно задан при реализации: ^ Monoid-unit: in Monoid-Element; <*. Ключевое слово in, появившееся в этом описании, означает, слегка упрощенно, что объект является константой. • Наконец, тип показателей — это последний формальный параметр настройки. Этот тип должен быть целым типом машины; это уточнение выражено в виде: ► type Exponet-Type is range <>; 4. В момент реализации может быть использован любой целый тип, будет ли это целый предопределенный тип или целый тип, определенный пользователем («целый тип» подразумевается в значении языка Ада). Последняя часть спецификации настраиваемого блока — это описание самой функции, т.е. описание типа параметров и результата: заголовок функции. Блок компиляции состоит из спецификации и тела; однако, иногда спецификация интегрирована в тело; в частности, это случай процедуры, которая играет роль главной программы во всех примерах. После того, как мы изучили текст спецификации настраиваемой функции, нам остается изучить ее тело. Тело настраиваемой функции очень похоже на тело функций, которые мы изучали до сих пор, и, за ис-
1-3.3.1 Настраиваемая функция дихотомического алгоритма... 55 ключением некоторых особых моментов, оно потребует не очень много объяснений. . Тело настраиваемой функции function Dichotomic-Exponentiation (xO : Monoid-Element; nO : Exponent) return Monoid-Element is begin if nO < 0 then raise Numeric-Error; end if; Calculate-X-Power-n : declare x : Monoid-Element := xO; n : Exponent := nO; Correction : Monoid-Element; begin if n mod 2 /= 0 then Correction := x; else Correction := Monoid-Unit; end if; loop n := n / 2; — Correction * ( x ** 2 ) ** n * xO ** nO exit when n = 0; x := x * x; if n mod 2 /= 0 then Correction := Correction * x; end if; end loop; return Correction; end Calculate-X.Power-n; end Dichotomic-Exponentiation; Первое замечание по тексту программы касается обработки одной из ошибок использования, отмеченной в начале этого раздела: использование функции с отрицательным показателем. Эта ошибка легко поддается обнаружению, и о ней несложно сообщить: для этого используют один из сильных моментов языка Ада, обработку исключений. Команда ► raise Numeric-Error А, позволяет возбудить предопределенное исключение Numeric-Error^ предусмотренное в начальных спецификациях языка Ада, которое появляется, когда ошибка вычисления (например, вызванная переполнением) возникает в программе1. Исключение — это конкретизация исключительного события (именно так!), кото- 1В современных версиях компиляторов языка Ада в таких случаях генерируется не это исключение, а исключение Constraint-Error. Однако, это позволяет отличить, при желании, например, ошибку использования от переполнения разрядной сетки.
56 1-3 Введение в программирование на языке Ада рая может появиться во время выполнения программы. При появлении исключения возможны два вида поведения: • разработчик программы не предусмотрел ничего специального, в этом случае программа просто прекращает работать и сообщает об исключении, которое вызвало остановку программы; именно так и будет при использовании экземпляра этой настраиваемой функции со вторым отрицательным аргументом; • программист предусмотрел эту проблему и ввел в программу обработчик исключения, т.е. множество команд, к которым и обращается программа при появлении этого исключения; в этом случае программа может продолжать нормально работать. Далее мы увидим примеры устранения исключений. Остальное тело функции состоит из блока, структуры, включающей описательную часть (множество описаний), последовательность команд и, в случае необходимости, обработчик исключений. Этот тип структуры позволяет, например, описать объекты после определения их основных характеристик. В частном случае данной функции это позволяет описывать локальные переменные только в том случае, когда они необходимы (если не было ошибки в значении показателя). Этот блок вводится ключевым словом declare, перед которым стоит (что необязательно) имя блока; затем идет описательная часть, потом ключевое слово begin, список команд и, наконец, ключевое слово end, за которым следует, для большей ясности, имя блока. Этот блок без всяких хитростей реализует дихотомическое возведение в степень и не нуждается в дополнительных объяснениях. 3.3.2 Использование настраиваемой функции Прежде, чем представить главную программу, показывающую пример использования настраиваемой функции, предлагаем несколько вычислений времени выполнения. В данной таблице больше не фигурируют времена вычислений, так как эти времена совершенно несущественны для показателей, которые могут быть представлены машинным словом (менее 32 итераций). Следует отметить, что в этот раз нас интересует именно результат! Используемые целые числа Fn являются числами Ферма, т.е. числами вида 22 +1; простые числа Ферма — это: Вычисление 5* mod F„ с k = Fn2 x п 2 3 4 Fn 17 257 65537 к 8 128 32768 5* mod Fn 16 256 65536 F0 = 3, Fi = 5, F2 = 17, F3 = 257, F4 = 65 537, F5 = 4 294 967 297,...
1-3.3.2 Использование настраиваемой функции 57 Число вида 2я + 1 может быть простым, только если q — степень двойки (если т нечетно, то х + 1 | хт + 1). Ферма подтвердил (ручным способом, конечно), что Fo, Fi, F2, F3 и F4 являются простыми, и высказал гипотезу, которую ему не удалось доказать даже для Fs, что числа Fn — все простые. Это предположение оказалось ложным. Действительно, Эйлер доказал, что число Fs — составное: его два множителя — 641 и 6 700417. Теорема Гаусса (см. Мютафиан [133]) гласит, что если число Ферма Fn — npocroef то правильный многоугольник с Fn сторонами может быть построен с помощью циркуля и линейки; и этот результат эффективно применялся, потому что построение правильного многоугольника с Fn сторонами было сформулировано для п, равных 0, 1, 2, 3 и 4, — значений, соответствующих только тем числам Ферма, простота которых была доказана [113]. Другой результат, принадлежащий Пепину (см. Рибенбойм [154]), показывает, что число Ферма Fn является простым тогда и только тогда, когда 5(Fn-1)/2 = —1 (mod Fn). Как раз этот метод используется в приводимой нами программе. Кроме 3 и 5, простых чисел Ферма, но которые по явным причинам программирования (каким?) не входят в набор данных этой программы, числа F2, F3 и F4, как показывают результаты, являются простыми. Число Fs не может быть представлено в данных этой программы (понятно, почему?). Сегодня известно [184], что при 5 ^ п ^ 21 число Ферма Fn — составное; также известно [154], что F23471 — число, имеющее более Ю7000 десятичных цифр, является составным. Пора, наконец, перейти к изучению программы, использующей настраиваемую функцию, представленную в предыдущем разделе. . Проверка, простоты чисел Ферма with Text.I0;u8G Text.IO; with Dichotomic-Exponentiation; — USE отсутствует, так как он не имеет смысла procedure Fermats-Numbers is type Modulus is new Long-Integer; n : Modulus; package Modulus-IO is new Integer-IO (Modulus); use Modulus-IO; procedure Pepins-Test (n : Modulus) is separate; begin — Fermat-S-Iumbers Put-Line ('иПроверка|_простотн1_нисели>ермам>)/
58 1-3 Введение в программирование на языке Ада Проверка простоты чисел Ферма (Продолжение) loop Get (n); exit when n = 0; Pepins-Test (n); end loop; end Fermats-Numbers; Парадоксально, но эта программа является самой сложной из представленных до сих пор. Одно только замечание по поводу оператора контекста: здесь нужно описывать блок компиляции, образованный при помощи настраиваемой функции, так как она входит в контекст компиляции, но нельзя с этим оператором контекста ассоциировать спецификатор use, который имеет смысл, только когда применяется с пакетом. В описательной части описываются тип Modulus (произвольный тип), пакет ввода-вывода, адаптированный к типу Modulus, потом процедура, названная Pepins-Test, параметр которой обозначает индекс проверяемого числа Ферма. Эта процедура описана только посредством конструкции ► procedure Pepins-Test (n : Modulus) is separate; 4, ключевое слово separate сообщает, что тело процедуры определено в другом месте и скомпилировано отдельно несколько позднее, после компиляции процедуры FermatjS-Numbers. Кроме того, при компиляции отдельного тела, все будет происходить так, как если бы оно компилировалось внутри родительского тела, т.е. контекст (видимые объекты и т.д.) будет таким же. При отладке одной части программы очень полезно отделить эту часть; небольшая модификация данной части приведет к повторной компиляции только отделенной части, а не всей программы, это может значительно уменьшить время компиляции (особенно с таким языком, как Ада). Остальная часть программы — очень простая. Итак, вся работа, необходимая для применения критерия Пепина, проводится в отделенной процедуре Pepins-Test, которую мы сейчас будем изучать. Именно в этой процедуре используется настраиваемая функция дихотомического возведения в степень. Вот текст процедуры: . Реализация (слабая) проверки Пепина . separate (Fermats-Numbers) procedure Pepins-Test (n : Modulus) is Fn : constant Modulus := 2 ** (2**Integer(n)) -f 1; subtype Modular-Integer is Modulus range 0 .. Fn - 1;
1-3.3.2 Использование настраиваемой функции 59 Реализация (слабая) проверки Пепина (Продолжение) k : Modulus; Result : Modular-Integer; function Multiplication (a, b : Modular-Integer) return Modular-Integer is function Plus (a, b : Modular-Integer) return Modular-Integer is begin return (a + b) mod Fn; end Plus; function SOS-Multiplication is new Dichotomic-Exponentiation ( Exponent => Modular-Integer, Monoid-Element => Modular-Integer, n*n => Plus, Monoid-Unit => 0); begin — Функции Multiplication return (a * b) mod Fn; exception when Constraint-Error => return SOS-Multiplication (a, b); end Multiplication; function %*w is new Dichotomic-Exponentiation ( Exponent => Modulus, Monoid-Element => Modular-Integer, %" => Multiplication, Monoid-Unit => ij; begin — ПроверкаЛепина к := (Fn - 1) / 2; Result := 5 ** k; Put (Fn); Put ("u"); Put (k); Put ("u"); Put (Result); New-Line; Put-Line (иЧмслои>ериаи & Modulus'Image (Fn)); if Result = Fn - 1 then Put-Line ("^простое",); else Put-Line ("исоставное"); end if; end Pepins-Test; Текст отдельного модуля должен всегда начинаться со ссылки на главный модуль, от которого он был отделен; это нужно для того, чтобы компилятор знал точный контекст компиляции этого подмодуля. Команда ► separate (Fermatjs-Numbers) procedure Pepin.s.Test ... ^ обеспечивает эту функцию. Затем находим вычисление числа Ферма Fn, которое использует стандартную операцию возведения в степень. Показатель в языке Ада должен быть предопределенного типа Integer. Это объясняет выполненное в выражении преобразование типа. Потом можно определить тип Modular Jnteger, и останется только конкретизировать настраиваемую функцию дихотомического возведения в степень, а для этого нужно определить умножение целых модульных чисел. Эта операция может быть определена так:
60 1-3 Введение в программирование на языке Ада function Multiplication (a, b : Modular-Integer) return ModularJnteger is begin return (a * b) mod Fn; end Multiplication; , где знак операции «*» обозначает обычное умножение целых чисел, унаследованное типом Modulus при его определении (выводом). Но в таком способе действия есть и отрицательная сторона. Действительно, при оценке обратного значения выражение а * 6 должно быть вычислено на компьютере перед тем, как возьмут его остаток по модулю Fn. Однако это не всегда возможно, и в частности, в предварительной версии, реализующей это умножение, вычисление, связанное с числом F4, вызвало ошибку. В случае, когда произошло внутреннее переполнение, условиями выполнения Ада-программ предусмотрено возбуждение предопределенного исключения Constraint-Error, такое исключение можно устранить и обработать следующим образом: function Multiplication (a, b : Modular Jnteger) return Modular Jnteger is begin return (a * b) mod Fn; exception when ConstraintJZrror => — вычисление возвращаемого значения другим способом end Multiplication; Для этого нужно суметь иначе вычислить произведение двух целых модульных чисел, чтобы при вычислениях не возникало переполнения. Как мы видели в начале изучения дихотомического алгоритма возведения в степень, такой способ существует и известен как египетское умножение — применение дихотомического алгоритма возведения в степень в аддитивном моноиде целых чисел. Все это объясняет относительную сложность модульного умножения, которое должно быть задано при конкретизации. Вот отделенное от своего контекста используемое умножение: function Multiplication (a, b : Modular Jnteger) return Modular Jnteger is function Plus (a, b : Modular Jnteger) return Modular Jnteger is begin return (a -f b) mod Fn; end Plus; function SOS-Multiplication is new Dichotomicexponentiation ( Exponent => Modular Jnteger, MonoidJSlement => Modular Jnteger, "*"=> Plus, Monoid-Unit => 0);
1-3.4 Необычное использование компилятора языка Ада 61 begin — Функции Multiplication return (а * Ь) mod Fn; exception when Constraint-Error => return SOS.Multiplication (a, b); end Multiplication; Работа функции заключается в следующем: когда вычисление возможно, она использует стандартные операции языка Ада, а если возникает ошибка, то выполняет дихотомическое вычисление (сложность которого пропорциональна логарифму множителя). Со структурной точки зрения эта функция должна выполнить конкретизацию настраиваемой функции на аддитивном моноиде целых чисел и, следовательно, должна предоставить настраиваемому блоку модульное сложение — функцию, названную Plus, простые вычисления которой всегда возможны. Сама конкретизация может выполняться следующим образом: function Multiply is new Dichotomic-Exponentiation (ModularJnteger, Plus, 0, Modular-Integer); ' передавая параметры настройки в том порядке, в каком они представлены в спецификации настраиваемого блока (ассоциация по расположению), но можно также передавать их по имени. В данном случае это позволит перегруппировать два целых типа, чтобы подчеркнуть особенность этой конкретизации. Ассоциации параметров по имени, которые можно также использовать для передачи параметров процедур и функций, соответствуют синтаксису ► Имя-формального-параметра => Фактический-параметр <*. Кроме того, очень часто ассоциация по имени позволяет значительным образом повысить удобочитаемость программ. Последовательность действий программы теперь понятна. Определенное таким образом модульное умножение используется в конкретизации для построения операции возведения в степень в множестве целых чисел по модулю Fn — операции, которая применяется в исполнительной части процедуры. 3.4 Необычное использование компилятора языка Ада Предлагаем теперь иллюстрацию к одному из самых удивительных моментов языка Ада, в котором компилятор используется для проверки непростоты числа Ферма F5.
62 1-3 Введение в программирование на языке Ада Ведя речь об оценке универсальных выражений, справочник говорит в абзаце 4.10(4) ARM1: "... Furthermore, if a universal expression is a static expression, then the evaluation must be exact."2 Статическая проверка, непростоты Fs with TextJO; use TextAO; procedure Teat-Fermats-Number is n : constant := 5; Fn : constant := 2 ** (2**n) + 1; — 4J294.967.297 x-0 : constant := 5; xA : constant := (x.O ** (2**6)) mod Fn; — 5 ** (2**6) x-2 : constant ;= (xA ** (2**6)) mod Fn; — 5 ** (2**12) x-3 : constant := (x-2 ** (2**6)) mod Fn; — Б ** (2**18) x-4 • constant := (x.3 ** (2**6)) mod Fn; — Б ** (2**24) ar-5 : constant := (xJ^ ** (2**7)) mod Fn; — Б ** (2**31) begin if r-5 = Fn - 1 then PutJjine ("F-Выростов"); else Put-Line ("FJ^jcoставное"); end if; end Test-Fermats-Number; Отличительная черта этой программы заключается в том, что вычисления выполняются в описательной части программы, с использованием универсальных целых констант (а не типизированных целых констант). Именно при компиляции, а не во время выполнения, оцениваются все выражения. По вполне понятным причинам невозможно прямо вычислить 5 а , а потом взять остаток по модулю F$ (кстати, сколько десятичных цифр содержит число 5~^г~?). Итак, вычисление разбито на части, используя статическую и улучшенную версию дихотомического возведения в степень. Следовательно, выполнение программы ограничивается обработкой результатов, полученных при компиляции. Замечание. Помимо прочего, этот пример показывает, что любой компилятор языка Ада обладает встроенным калькулятором произвольно большой точности (с точностью в пределах возможностей конкретной машины), и можно только сожалеть, что этот *Ada Reference Manual, имеется перевод на русский язык: см. [186]. — Прим. перев. 2«... Более того, если универсальное выражение — статическое, то выраже ние также должно быть точным.»; см. абзац 4.10.(4) в переводе ARM ([186]). — Прим. перев.
1-3.4 Необычное использование компилятора языка Ада 63 калькулятор не доступен при выполнении программ. Разумеется, таким способом можно проверить непростоту некоторых других чисел Ферма, если разлагать вычисления так тщательно, чтобы избежать переполнения разрядной сетки компилятора (числа Ферма растут очень быстро!) 4 Хорошее приближение к бесконечности! Все задачи в информатике можно условно разделить на два класса: задачи, имеющие решение, вычисляемое за разумное время, и задачи, решение которых требует слишом большого времени вычисления. Изучение многочисленных классов программ (или задач) составляет особую, самостоятельную область информатики, названную теорией сложности (книга D. Harel, Algorithmics: The spirit of computing1 — это увлекательнейшее введение в эту теорию). Цель этого раздела — доказать, что некоторые решения простых математических задач выходят за рамки возможностей современных машин. Не делая чрезмерных обобщений, можно все же сказать, что эти решения никогда не будут вычисляться на машине, какой бы она ни была! Чтобы проиллюстрировать этот факт, мы решили реализовать вычисление целочисленных определителей при помощи метода, исходящего прямо из математического определения детерминанта2. Итак, вот определение детерминанта, которое будет использоваться в этом разделе. (7) Определение. Пусть А = (a,ij) i<i<n — квадратная матрица с целыми элемен- тамя. Детерминант (определитель) матрицы А, обозначаемый \А\ или detA, — это число, определенное через \А\ = ^2aeSn £{<г)о>\о(\)й2о(2) • • • ana(n)} где Sn — это множество перестановок интервала [l,n], a e — функция, дающая знак перестановки. Это определение обладает некоторой инвариантной эффективностью (по крайней мере, внешне): действительно, определитель, кажется, может быть вычислен при помощи конечной суммы, любимой операции в программах. Однако, прежде, чем приступить к программированию этого метода, можно, а любой разумный человек должен, задать себе вопрос: сколько слагаемых имеет эта сумма? Математик тотчас же !Д. Харел, Алгоритмика: Дух вычислений (англ.). — Прим. перев. 2Впрочем, метод, вполне применимый (хотя, может быть, правильнее было бы сказать неприменимый) к вычислениям детерминантов, какова бы ни была природа элементов, т.е. для любого базового кольца.
64 1-4 Хорошее приближение к бесконечности! ответит: в этом выражении имеется, очевидно, п! слагаемых (каждое состоит из п множителей)! И обсуждение закончено. Но кто знает, каково значение п!, когда п принимает значения 10, 20, ..., т.е. значения очень скромные для любой практической задачи, имеющей матричное решение (например, задачи метеорологии или моделирования течения жидкостей, где нередко приходится оперировать матрицами, имеющими тысячи строк и столбцов)? И снова математик может ответить, используя приближение Стирлинга, что п! » ппе~~п\/27гп и даже п\ > ппе~пу/2тгп , а любая хорошая система алгебраического вычисления дает точные результаты: 101 = 3 628 800 и 201 = 2432 902008176 640000. Последнее значение производит некоторое впечатление, оно приблизительно равно 2 • 1018. Зная, что современные микро-ЭВМ способны совершать около миллиона сложений в секунду, естественно спросить: сколько времени затратит такой компьютер, чтобы выполнить 2 • 1018 сложений? Этот пример без дополнительных выкладок не убеждает скептиков, которые считают, что стали жертвами фокуса. Вот по этой причине мы и решили практически доказать сложность таких программ, взяв в качестве примера вычисление определителя. 4.1 Элементы обработки массивов в языке Ада Матрицы обычно представлены в алгоритмах и программах с помощью массивов (если речь не идет о разреженных матрицах, для которых в большинстве случаев представление оптимизируют). Кроме того, как мы увидим в дальнейшем, перестановки тоже можно представить с помощью этой структуры. Следовательно, нужно изучить обработку массивов в языке Ада. Обработка массивов в языке Ада имеет только отдаленное отношение к обработке, которую можно сделать в классических языках, таких как Паскаль, а средства, предоставленные в распоряжение пользователя разработчиками языка, удовлетворяют все его (разумные) ожидания. Хотя в языке Ада и невозможно определить массив переменного размера, но существует понятие, позволяющее обрабатывать массив неизвестного размера во время построения программы: это понятие шаблона (pattern в англосаксонской терминологии).
1-4.1 Элементы обработки массивов в языке Ада 65 В качестве первой иллюстрации принципа шаблонов мы покажем, как в языке Ада построить процедуры или функции, число аргументов которых кажется переменным. Этот метод использования шаблонов не очень принят, но дает блестящие результаты в задачах такого вида (см. работу Буха [27]). Выбранный нами этого пример является построением функции, позволяющей находить ее наибольший аргумент (среди любого их количества). Для начала рассмотрим массив, в котором множество индексов (подынтервал целых положительных чисел) и тип основных элементов произвольны. Массив называется Т, а тип элементов массива — Object. Так как мы ничего не знаем о типе элементов, то если мы хотим вычислить максимум элементов массива, нужно располагать оператором сравнения; этот оператор обозначен «<». Вычисляемое значение «Мах» должно удовлетворять условию: при любом индексе i массива Т : Т{г) = Мах или Т{г) < Мах. В этом выражении внимательный читатель отметит использование двух операторов, «=» и «<», а не единственного оператора «^»: программистская шероховатость, которая будет сглажена при реализации этой функции в языке Ада. Алгоритм вычисления максимума очень прост, и нет необходимости его подробно объяснять. Итак, предлагаем сразу реализацию этой функции в языке Ада, учитывая тот факт, что единственные допустимые операции на элементах типа Object — это: описание, присваивание и сравнение оператором «<». function Мах (Т : Objects-Array) return Object is Temporary.Maximum : Object := T (T'First); begin for i in T'First -hi.. T'Last loop if Temporary.Maximum < T(i) then Temporary.Maximum := T(i); end if; end loop; return Temporary.Maximum; end Max; Основная характеристика этой части Ада-программы — это полное отсутствие явной ссылки на любое особое свойство обрабатываемого массива: точно не известно, каковы индексы массива, и также не известны элементы, составляющие массив, а единственные используемые операции — это три операции, названные выше. Однако можно обработать массив, обработать его границы благодаря предопределенным функциям в языке Ада, которые назыв.ают атрибутами. Таким образом, если Т — массив, выражение T'First обозначает наименьший индекс массива Т, a T'Last обозначает наибольший индекс Т. Это доказыва- 5-1017
66 1-4 Хорошее приближение к бесконечности! ет, что функция, имеющая массив в качестве формального параметра, может каждый раз заново определять некоторые характеристики массива, который ей передан в качестве фактического параметра (длина, границы...): атрибуты позволяют определить эти характеристики динамически, т.е. во время выполнения. Хотя это явно не выражено, но в этой функции используется особое свойство индексов: их целочисленный характер, который позволяет записать выражение T'First + 1. Логическое следствие всего этого заключается в том, что текст функции Мах всегда один и тот же и что обрабатываемые объекты — это целые числа, действительные числа, литералы перечисления или любой другой объект при условии, что пользователь задаст операцию сравнения. Другими словами, очень легко записать на основе всего сказанного настраиваемый алгоритм вычисления максимума. Таким образом, спецификация, обозначения которой слегка отличаются от предыдущих, выглядит так: Спецификация настраиваемого алгоритма вычисления максимума . generic type Object is private; with Function " < " (a, b : Object) return Boolean is <>/ package Maximum is type Objects-Array is array (Positive range <>) of Object; function Max (T : Objects-Array) return Object; end Maximum; Рассмотрим сначала формальные параметры настройки для этого пакета. Тип Object — это приватный тип; это означает, как мы видели в разделе 3.3 (стр. 53), что единственными операциями, допустимыми неявно внутри пакета на объектах этого типа, являются описание, присваивание, тест на равенство и использование в качестве параметра подпрограммы. Следовательно, разработчик функции Мах ничего не знает о типе Object) он не может знать, идет ли речь о целом типе, последовательности знаков... Второй формальный параметр — это оператор сравнения элементов типа Object, необходимый для вычисления максимального значения, но который невозможно прямо ввести из-за незнания типа Object. Кроме того, этот формальный параметр настройки имеет значение по умолчанию; описание ► with function "<" (afb : Object) return Boolean is О; ^ означает, что в случае, когда пользователь настраиваемого пакета не задает явно эту функцию в момент конкретизации, то функция, которая должна быть использована, — это функция <, имеющая соответствующий тип параметров и видимая в месте конкретизации. Формальным параметрам настройки
1*4.1 Элементы обработки массивов в языке Ада 67 могут быть заданы другие виды значений по умолчанию, в дальнейшем мы еще с ними встретимся. Имея эти два параметра, разработчик функции Мах задает пользователю, с одной стороны, тип Objects-Array, который, в основном, не будет использоваться, и функцию Мах, которая нас интересует. Тип Objects .Array служит только для описания типа параметров функции Мах. Как будет видно в применении функции, пользователь может его полностью игнорировать. Описание типа Objects-Array— это несколько своеобразное описание массива: ► type Objects-Array is array (Positive range <>) of Object; ^. Это будет точное описание шаблона, и говорить о типе, имеющем отношение к идентификатору Objects-Array, значит злоупотреблять языком. Действительно, невозможно описать переменные типа Objects-Array, потому что Ада, как любой другой язык, должен иметь возможность предоставить в памяти место, необходимое для массива. Впрочем, вполне возможно использовать этот шаблон для описания типа формальных параметров подпрограммы: при фактическом использовании подпрограммы ее параметрами будут описанные переменные (обратное было бы удивительным) или выражения, построенные в момент вызова, характеристики которых хорошо известны, когда контроль идет внутри подпрограммы. Тело пакета Maximum записывается прямо, непосредственно и является, по существу, ни чем иным, как переформулировкой функции Мах, представленной выше. , Реализация функции Мах . package body Maximum is function Max (T : Objects-Array) return Object is I Temporary-Maximum : Object := T (T'First); begin for i in T'First -f 1 .. TLast loop if Temporary-Maximum < T(i) then Temporary-Maximum := T(i); end if; end loop; return Temporary-Maximum; end Max; end Maximum; Перейдем теперь к использованию этой функции. Неинтересно подробно объяснять всю программу, использующую эту функцию (в самом деле, длина такой программы была бы огромной по сравнению с необходимым пояснением функции Мах), однако несколько фрагментов такой программы разъяснят возможности функции. 5*
68 1-4 Хорошее приближение к бесконечности! with Maximum; — Продолжение контекста компиляции procedure Using-Function-Max is type My.Integer is ... — В этом месте уже определен оператор м<" на целых числах типа My .Integer package Integer-Maximum is new Maximum (My.Integer); use Integer-Maximum; x , a , b , с , d : My-Integer; — Продолжение описании (переменные, типы ...) begin — Начало вычислений х := Мах ((а,Ь,с));— Продолжение вычислений х := Max ((afbfcfd));— Конец вычислений end Using.FunctionJtfax; Эта программа использует конкретизацию пакета Maximum для целых чисел; как видим, она начинается с оператора контекста (может быть неполного в примере), ссылающегося на настраиваемый пакет. Внутри главной процедуры после определения целого типа, который наследует обычные операции на целых числах, и в частности, оператор сравнения «<», находим конкретизацию настраиваемого пакета, в которой задан только фактический параметр, соответствующий типу Object; так как второй параметр явно не задан, при конкретизации для него используется значение по умолчанию, т.е. стандартный оператор «<»сравнения целых чисел. Можно уже заметить, что если бы вместо использования оператора «Опередали в качестве второго параметра оператор «>», как в команде package Integer-Minimum is new Maximum (My.Integer, "> ")\ то построенная таким образом функция Мах вычислила бы наименьший из своих аргументов, а не наибольший. После спецификатора видимости ► use Integer.Maximum 4 и нескольких дополнительных описаний находим тело главной процедуры, которое содержит определенное количество дополнительных вычислений и (что нас интересует) два обращения к функции Мах: х := max ((a,b,c)); x := max ((a,b,c,d)); Выражения, которые образуют фактические параметры этих двух обращений, являются агрегатами, т.е. явными структурными конструкциями. Фактический параметр первого обращения к функции Мах — это агрегат (а, 6, с), который вне своего контекста представляет структуру с тремя компонентами типа MyJnteger. Это выражение (агрегат) совместимо с точки зрения типа как с записью с тремя полями типа MyJnteger, так и с индексируемым типом с тремя компонентами, индексы которого абсолютно произвольны. Контекст
1-4.2 Работа с матрицами 69 использования этого агрегата определяет точным образом тип выражения (а, 6, с): так как это параметр функции Мах, то мы имеем дело с индексируемым типом с тремя компонентами (потому что в агрегате их три), индексированным посредством подынтервала типа Positive. О нем больше ничего не известно, и точное определение данного интервала не представляет здесь никакого интереса (за дополнительными сведениями читатель может обратиться к ARM). В этих условиях второй вызов функции Мах существенно не отличается от первого: эта функция может применяться к массивам любой длины, и если бы не перегруженность скобками, то можно было бы сказать, что функция Мах обладает переменным числом параметров. Теперь должно быть ясно, что пользователю этой функции нет необходимости представлять тип Objects-Array в программе; один из случаев, когда это будет необходимо, соответствует использованию функции Мах, применяемой к переменной индексируемого типа, но это уже другая история... 4.2 Работа с матрицами Следующий этап обучения обработке массивов в языке Ада заключается в изучении представления матриц, базовых операций над матрицами, ввода-вывода матриц — короче, в определении так называемого абстрактного типа данных и в построении нескольких средств управления такого типа. Первая фаза — определение абстрактного типа данных — начинается с распознавания того, что называют простейшими операциями на типе. Сначала можно отметить, что эти операции подразделяются на два вида: конструкторы и селекторы1. Конструкторы — это операции, которые модифицируют состояние (значение) данных, тогда как селекторы позволяют только узнать это состояние. Каковы же будут фундаментальные операции, когда объект — матрица? Прежде всего, имеется конструктор, который позволяет присваивать значение элементу матрицы, а также симметричная операция селектор, позволяющий узнать значение одного из элементов. Например, если А — рассматриваемая матрица, а а^ — интересующий нас элемент, то обычно обозначаем A(i,j) <— v и v <— A(i,j) те действия, которые реализуют эти операции. Но такой способ действия имеет мно- хЭта терминология кажется повсюду принята программистами, она произошла из разработки технологии программного обеспечения. Можно обратиться к книге Буха [27], которая дает более полные определения с последующим стилем программирования.
70 1-4 Хорошее приближение к бесконечности! го последствий и, в частности, приводит к тому, что матрицы всегда представляются с помощью массивов. Однако хорошо известно, что это не так! Некоторые матрицы — разреженные: матрицы, у которых только небольшое количество элементов не равно нулю; было бы совершенно неразумно, с точки зрения информатики, представлять матрицу больших размеров, например, 1000 х 1000, с помощью массива в миллион клеток, если всего лишь 10 000 элементов не равны нулю. Следовательно, если все программы, составленные для работы с матрицами, используют понятие индексируемого типа, то эти программы становятся полностью непригодными, когда хотят применить их алгоритмы к разреженным матрицам. Иначе говоря, программы слишком зависимы от внутреннего представления обрабатываемых объектов. Конкретно, этот тип представления обязывает программиста выражать присваивание и оценку элемента матрицы, соответственно, посредством вызова процедуры и функции, даже если это, возможно, будет тяжелее записывать (что справедливо лишь отчасти). Конструктор обозначен Set-Coefficient, а селектор — Coefficient-Of, со спецификациями, которые мы увидим в пакете, представленном далее. Этих двух операций недостаточно, чтобы выполнить все возможные манипуляции на матрице; не хватает селекторов, позволяющих узнать размер матриц, чтобы знать, какие элементы существуют. Так как тонкая структура матрицы совершенно не известна пользователю матрицы (но не разработчику, роль которого мы сейчас выполняем), невозможне использовать различные атрибуты массива, как в предыдущем разделе, а нужно явно задать функции, позволяющие оценить границы матрицы: First-Row, Last-Row, First-Column, Last-Column. Чтобы модуль был как можно более автономным, нужно предусмотреть и классифицировать возможные ошибки и сопоставить им исключения. В случае матрицы единственная ошибка обработки — эте ссылка на несуществующий элемент; эту ошибку символизирует исключение Index-Out-Of-Bounds, которое может появиться только при выполнении простейших операций Set-Coefficient и Coefficient-Of. Вот полная спецификация настраиваемого пакета, реализующего абстрактный тип данных. . Матрица с целыми элементами generic type Row-Index is range <>; type Column-Index is range <>; type Coefficient is range <>/
1-4.2 Работа с матрицами 71 Матрица с целыми элементами (Продолжение) package Matrix-Nonsparse-Integer is type Matrix (First-Row : Row-Index; Last-Row : Row-Index; First-Column : Column-Index; Last-Column : Column-Index) is private; procedure Set-Coefficient (OJ-The-Matrix : in out Matrix; At-Row : in Row-Index; And-Column : in Column-Index; To-The-Value : in Coefficient); function Coefficient-Of (The-Matrix : Matrix; At-Row : Row-Index; And-Column : Column-Index) return Coefficient; function First-Row (Of-The-Matrix : Matrix) return Row-Index; function Last-Row (Of-The-Matrix : Matrix) return Row-Index; function First-Column (Of-The-Matrix : Matrix) return Column-Index; function Last-Column (Of-The-Matrix : Matrix) return Column-Index; Index-Out-Of-Bounds : exception; private type Matrix-Template is array (Row-index range <>, Column-Index range <>) of Coefficient; type Matrix (First-Row : Row-Index; Last-Row : Row-Index; First-Column : Column-Index; Last-Column : Column-Index) is record The-Coefficient : Matrix-Template (First-Row .. Last-Row, First-Column .. Last-Column); end record; pragma Inline (Set-Coefficient, Coefficient-Of, First-Row, Last-Row, First-Column, Last-Column); end Matrix-Nonsparse-Integer; Первое замечание касается имени пакета, Matrix-Nonsparse-Integer. В этом имени соблюдаются простейшие правила построения: первый радикал означает, что абстрактный тип данных, который в нем определен, — матрица, второй, что эти матрицы не разреженные (алгоритмы доступа к разреженным матрицам, в основном, другие), и, наконец, суффикс указывает на тип элементов. Это имя позволяет сразу же узнать примерные характеристики определенного объекта1. Рассмотрим теперь видимую часть этой спецификации (т.е. все то, что предшествует ключевому слову private). Прежде всего, формаль- хЭта проблема может показаться устаревшей, но в программировании выбор идентификаторов— важная и тонкая операция, и некоторые труды по разработке технологии программного обеспечения посвящают этой проблеме целую главу.
72 1-4 Хорошее приближение к бесконечности! ных параметров настройки три и их семантика должна быть ясной... Читатель педантичный (и усидчивый, см. раздел 3.3) сможет нас упрекнуть в том, что мы не определили, что элементы — личного типа (т.е. почти любого), это позволило бы обрабатывать одинаковым способом матрицы целых чисел, чисел с плавающей запятой, многочленов и т.д. Этот выбор основан на том, что обычно не совершают один и тот же тип вычислений и на матрицах с целыми и на матрицах с действительными элементами и что алгоритмы вычисления на матрицах многочленов не являются простым применением в кольце многочленов алгоритмов для матриц с элементами из числового кольца. Другими словами, алгоритмы вычисления на алгебраических структурах соответствуют структурному типу, который подлежит обработке. Например, если А — матрица и если мы хотим вычислить Ап, то для этого можно взять великолепную настраиваемую функцию дихотомического возведения в степень, изученную в разделе 3.3; но намного более экономично, при условии, что п — достаточно большое, вычислить характеристический многочлен (или минимальный, если умеем его вычислять) от А и прежде, чем вычислить произведения матриц, привести Ап по модулю этого многочлена. Все эти примеры показывают, что можно фиксировать тип элементов матрицы: что теряем в общем, то выигрываем в полезном... Собственно спецификация начинается с определения личного типа Matrix, который обладает четырьмя дискриминантами с красноречивыми именами. Когда этот пакет получит начальные значения, тогда будет возможно описать, например, переменную ► А : Matrix (2, 4, 3, 7)\ < это означает, что А — это матрица 3 х 5, у которой индексы строчек находятся в интервале [2,4], а индексы столбцов — в интервале [3,7]. Конкретизация этого пакета порождает не единственный матричный тип, а, скорее, класс матриц, имеющих некоторые общие характеристики (тип индексов и конкретный тип элементов). Преимущество этого способа действия состоит в том, что он позволяет обрабатывать матрицы различных размеров, исходя только из начальных значений. Перейдем теперь к точному определению типа Matrix — определению, которое обычному, среднему пользователю знать необязательно. Так как реализуются «полные» матрицы, внутреннее представление использует двумерные массивы. Но синтаксис языка Ада предписывает, чтобы определение типа, фигурирующее в личной части, имело то же начало, что присутствует у него в спецификации. Следовательно, этот тип должен быть типом дискриминанта записи, его единственное поле (отличное от дискриминантов) — это двумерный массив, о котором
1-4.2 Работа с матрицами 73 мы говорили. На распечатке спецификации можно увидеть определения типов, которые должны быть представлены в личной части. Все это может показаться невероятно сложным и неэффективным. Это действительно сложно для того, кто не имеет достаточного опыта в программировании. Эта сложность кажется бесполезной тому, кто никогда не пытался повторно использовать свои программы в контекстах, слегка отличных от контекста разработки: с опытом приходит понимание, что эту цену необходимо платить один только раз — лишь во время первого написания. Некоторые могут еще сослаться на то, что теряется четкость: пишем ► Set-Coefficient (A, i, j,...) 4 вместо ^ A(i,j) := ... 4. И опять, все это вопрос опыта: если стиль — однородный, программы читаются так же легко, как и программы, записанные обычным способом. В том, что касается эффективности, язык Ада предоставляет нам некоторые средства, позволяющие влиять на скорость выполнения программ или на объем их памяти. Для этого компилятору передаются указания, называемые прагмами. Возможно, что эти указания будут безрезультатны (это зависит от используемого компилятора), но не составит большого труда их предусмотреть. Как это можно увидеть в личной части, прагма Inline — которая указывает, что обращения к подпрограммам Set-Coefficient, Coefficient-Of,... нужно развернуть «в строке», т.е. заменить обращения к этим подпрограммам разложением их тела, — применима для всех простейших операций этой спецификации. Вторая фаза определения типа Matrix— его реализация, очень простая операция. Действительно, внутренняя структура представляет собой двумерный массив, реализация примитивов — это перезапись процедур и функций спецификации в терминах массивов. Вместо долгих объяснений проще прямо представить тело пакета. Реализация матриц с целыми элементами , package body Matrix-Nonsparse-Integer is procedure Set-Coefficient (Of-The-Matrix : in out Matrix; At-Row : in Row-Index; And-Column : in Column-Index; To-The-Value : in Coefficient) is begin Of-The-Matrix.The.Coefficient (At-Row, And-Column) := To-The.Value; exception when Constraint-Error => raise Index-Out-0f-Bounds; end Set-Coefficient;
74 1-4 Хорошее приближение к бесконечности! Реализация матриц с целыми элементами (Продолжение) function Coefficient.Of (TheJAatrix : Matrix; At-Row : Row.Index; And-Column : Column-Index) return Coefficient is begin return The-Matrix.The-Coefficient (At-Row, And-Column); exception when Constraint-Error => raise Index-Out-Of-Bounds; end Coefficient-Oj; function First-Row (Of-TheJAatrix : Matrix) return Row-Index is begin return Of-The-Matrix.The-Coefficient'First (1); end First-Row; function Last-Row (Of-The-Matrix : Matrix) return Row-Index is begin return Of-The-Matrix.The-CoefficientfLast (1); end Last-Row; package body Matrix-Nonsparse-Integer is function First-Column (Of-The-Matrix : Matrix) return Column-Index is begin return Of-The-Matrix.The-Coefficient'First (2); end First-Column; function Last-Column (Of-The-Matrix : Matrix) return Column-Index is begin return Of-The-Matrix.The-CoefficientyLast (2); end Last-Column; end Matrix-Nonsparse-Integer; Можно сразу отметить простоту кода (нельзя по-настоящему говорить об алгоритме), но, тем не менее, нужно уточнить несколько моментов. При определении типа мы представили некоторые ошибки, которые могут появиться при использовании этого пакета. Следовательно, надо выявить эти ошибки в теле имеющих к этому отношение простейших операций. Для этого существует несколько способов: • в начале каждого модуля, в котором может появиться ошибка, выполняют тест, позволяющий узнать, не произойдет ли ошибка. Для этого нужно уметь предусмотреть все потенциальные ошибки и надо уметь распознавать их предпосылки, что не всегда легко и возможно; • другое решение состоит в том, чтобы использовать механизм исключений языка Ада, т.е. дать возможность модулям следовать
1-4.2 Работа с матрицами 75 обычному ходу их выполнения и предусмотреть в конце модуля обработчик исключений, восстанавливающий предопределенные исключения и распространяющий одно из исключений, которое было определено для этого типа данных. Это второе решение, заранее привлекательное из-за своей эффективности, — в некоторых реализациях языка Ада обработка исключений не требует дополнительных издержек, пока не появятся исключения — имеет тот недостаток, что не гарантирует связности данных. В случае матриц, как они были только что реализованы, эта проблема не требует особого внимания. Исключение представляет собой асинхронное или непредусмотренное событие, которое может вызвать прекращение обработки информации, обеспечивающей связанность некоторых данных. Например, при реализации динамических структур, связность которых обеспечивается указателями, очень важно, чтобы ошибки не возникали в момент, когда связи между структурами несогласованы, что часто происходит при модификациях. Если это возможно, нужно обязательно выявить потенциальные ошибки перед их появлением, и следовательно, применить первый метод. Вновь эти проблемы возникают потому, что от пользователя хотят скрыть истинное представление обрабатываемых объектов, при этом маскирование информации доходит до утаивания внутренних ошибок! Итак, находим обработчики исключений в реализации двух элементарных операций Set-Coefficient и Coefficient-Of. предопределенное исключение Constraint-Error, возбуждаемое в случае ошибки выхода индекса матрицы за его пределы, устраняется и далее распространяется исключение Index-Out-Of-Bounds. Выполнение четырех небольших примитивов, позволяющих узнать границы матрицы, не может вызвать ошибку, следовательно, там не должно быть никакой обработки ошибки. Мы уже встречали атрибуты, действующие на массивах, в разделе 4.1, и в этих последних функциях снова находим атрибуты First и Last, это показывает, каким образом данные атрибуты применяются в случае многомерного массива, например, в ► return Of.The-Matrix.The-CoefficienVFirst (1)\ А, параметр атрибута First указывает номер размерности, к которой применяется First. Замечание. Хотя только что изученные операции на матрицах являются, действительно, единственными элементарными операциями, может случиться, что в эту спецификацию добавят операции, которые очень часто используются. Это в большинстве
76 1-4 Хорошее приближение к бесконечности! случаев очень простые операции, но которые по причинам эффективности и простоты выигрывают за счет информации о точном представлении данных. 4.3 Ввод-вывод матриц Второй модуль обработки матриц позволит нам научиться использовать один тип абстрактных данных. Для задачи, которая нас сейчас занимает, первым необходимым нам инструментом является множество функций ввода-вывода. Такой аппарат содержит, как минимум, процедуру чтения Get и процедуру записи Put для терминала, которых пока достаточно. Эти две процедуры предоставляют минимальное удобство для пользователя: Put имеет параметр, позволяющий задать размер поля для вывода элементов матрицы, которую хотят вывести; a Get имеет параметр, который задает выводимое для ввода одной строки матрицы. У этих двух параметров есть, однако, одна особенность: они имеют значение по умолчанию. Благодаря этому, если выполняется команда ► Get (Моя-Матрица); 4, при отсутствии второго параметра в вызове, программа будет использовать его значение по умолчанию, и никакого приглашения при чтении матрицы не появится. Зато если уточнить ^ Get (Моя-Матрица, "?и")) 4, каждое чтение одной строки будет предваряться вопросительным знаком, позволяя пользователю знать, где он находится. Значение по умолчанию второго параметра процедуры Put есть Coefficient'Width, результат применения предопределенного атрибута Width к целому типу Coefficient: этот атрибут задает максимальное число символов для вывода какой-либо величины типа Coefficient. После того как описаны средства, предлагаемые модулем, т.е. услуги, которые он способен предоставить, нужно познакомиться и с услугами, в которых он нуждается, чтобы реализовать все это. Эти услуги появятся в качестве формальных параметров настройки и должны быть обеспечены предыдущим пакетом. Тогда получится следующая полная спецификация: . Ввод-вывод матриц . generic type Row-Index is range <>; type Column-Index is range <>; type Coefficient is range <>;
1-4.3 Ввод-вывод матриц 77 Ввод-вывод матриц (Продолжение) type Matrix is private; with procedure Set-Coefficient (Of-The-Matrix : in out Matrix; At-Row : in Row-Index; And-Column : in Column-Index; To-The-Value : in Coefficient) is <>; with function Coefficient-Of (The-Matrix : Matrix; At-Row : Row-Index; And-Column : Column-Index) return Coefficient is <>; with function First-Row (Of-The-Matrix : Matrix) return Row-Index is <>; with function Last-Row (Of-The-Matrix : Matrix) return RowJfndex is <>; with function First-Column (Of-The-Matrix : Matrix) return Column-Index is <>; with function Last-Column (Of-The-Matrix : Matrix) return Column-Index is <>; package Matrix-Nonsparse-Integer-IO is procedure Put (The-Matrix : in Matrix; Width : in Natural := Coefficient'Width); procedure Get (The-Matrix : in out Matrix; Prompt : in String := nn); end Matrix-Nonsparse-Integer-IO; «Это не упрощает дела!» — сразу скажет читатель. Еще раз повторим сказанное: только опыт позволит судить об этом, и во время заключительного построения будет видно, что описанный способ действия имеет, скорее, тенденцию к упрощению архитектуры программы. Однако сделаем несколько уточнений: • процедуры ввода-вывода нуждаются в информации о типе Matrix, и поскольку он определен как личный тип, то здесь он тоже должен быть объявлен личным; • для считывания и записи должны быть известны границы обрабатываемых матриц, так же как и природа элементов, ибо, в конечном счете, именно над ними производятся действия; это объясняет присутствие первых четырех параметров настройки; • наконец, нужно ввести все примитивы, определенные в предыдущем разделе. Данная спецификация, которая кажется довольно громоздкой, полна и очень мало связана с другими модулями. Это означает, что использовать указанный модуль весьма просто и что модификации описания типа абстрактных данных Matrix или других тяготеющих к нему модулей мало скажутся на этом особом модуле.
78 1-4 Хорошее приближение к бесконечности! Приводим реализацию описанной процедуры, которая пока не представляет никакой особой трудности. Ввод-вывод матриц with TexUO; use Text-IO; package body Matrix-Nonsparse-Integer-IO is package Coefficient-IO is new Text-IO.Integer-IO (Coefficient); use Coefficient-IO; procedure Put (The-Matrix : in Matrix; Width : in Natural := Coefficient'Width) is begin for t in First-Row (The-Matrix) .. Last-Row (The-Matrix) loop for j in First-column (The-Matrix) .. Last-Column (The-Matrix) loop Put (Coefficient-Of (The-Matrix, i, j), Width => Width); end loop; New-Line; end loop; end Put; procedure Get (The-Matrix : in out Matrix; Prompt : in String := nn) is The-Coefficient : Coefficient; begin for t in First-Row (The-Matrix) .. Last-Row (The-Matrix) loop Put (Prompt); for j in First-column (The-Matrix) .. Last-Column (The-Matrix) loop Get (The-Coefficient); Set-Coefficient (The-Matrix, i, j, To.The-Value => The-Coefficient); end loop; end loop; end Get; end Matrix-Nonsparse-Integer-IO; Отметим способ, с помощью которого здесь используются примитивы работы с матрицами, а также ассоциацию по именам фактических параметров самих этих примитивов. Сделаем последнее замечание, касающееся имени рассмотренного пакета: что хоть и следует избегать этого в общем случае, в данном идентификаторе используют аббревиатуру 10 — общепринятый акроним, означающий Input/Output, как, например, в Text J О. 4.4 Описание генератора биекций Перейдем теперь к вычислению определителя матрицы, пользуясь формулой определения 7 в начале раздела 4 и предполагая, что мы обладаем
1-4.4 Описание генератора биекций 79 генератором биекций между двумя целыми интервалами. Реализация самого генератора отнесена в конец главы, чтобы не отвлекаться от нашей первоначальной задачи. Даже если на время не стоит вопрос о деталях построения генератора перестановок, нужно, по крайней мере, знать способ его применения и инструменты, которые он предлагает, — короче, его описание. Первый шаг на этом пути — выбор структуры данных, допускающей представление одной перестановки. Существует несколько стандартных обозначений для перестановок: в форме произведения циклов, в форме таблицы, представляющей граф перестановки, и т.п. Например, перестановка а интервала [1,5], определенная равенствами а(\) = 2, <т(2) = 4, о-(З) = 5, о-(4) = 1 и <т(Ь) = 3, представляется в форме произведения циклов как: а = ( 1 2 4 )( 3 5 ), а в форме таблицы, как а — [ А ]. Этот второй способ представления дает более непосредственный взгляд на перестановку (по крайней мере, на нашем уровне) и больше подходит для алгоритмической обработки, чем запись через произведение циклов. Обычно это представление упрощают, записывая только вторую строку таблицы и подразумевая первую. По этому соглашению перестановка <т предыдущего примера представляется пятеркой (2,4,5,1,3). Выбрав структуру данных, остается найти процедуру перебора множества перестановок. Канонический метод просмотра конечного множества состоит в полном его упорядочении от минимального (соответственно, максимального) элемента для этого порядка и функции следования (соответственно, предшествования). Вот описание настраиваемого пакета, определяющего такой генератор. Генератор биекций generic type Source is range <>/ type Target is range <>; package Lexicographic-Bijection-Generator is type Bijection is array (Source range <>) of Target; type Signature is range -1 .. 1; function MinimaLBijection (Source-Min : Source; Source-Max : Source; Target-Min : Target; Target-Max : Target) return Bijection; procedure Successor-Of (The-Bijection : in out Bijection; With-Signature : in out Signature);
80 1-4 Хорошее приближение к бесконечности! Генератор биекций (Продолжение) pragma Inline (Successor.Of); Bijection-Overflow : exception; Not-A-Bijection : exception; end Lexicographic-Bijection-Generator; Этот модуль определяет, как указывает его имя, генератор биекций, а не перестановок. Разница между двумя понятиями очень незначительна, но рассмотрение биекций допускает, как увидим во время реализации, более простой подход. Заглавные параметры этого модуля суть типы (целые) интервалов от начальной точки до конечной, на которых действует биекция. В нашем случае эти интервалы будут интервалами изменения индексов строки и столбца обрабатываемой матрицы. С помощью этих двух типов целых программа выдаст нам также два типа: один, позволяющий представить перестановки в форме таблицы, другой — тип-сигнатуру. Затем, основывая принцип перечисления биекций на некотором порядке, используют функцию, определяющую наименьшую биекцию относительно этого порядка, и процедуру вычисления последующей за данной биекций, а также ее сигнатуру. Когда обрабатывают перестановки, наименьшей перестановкой в выбранном порядке является тождественная, как это увидим ниже, чья сигнатура равна 1; это указывает инициализацию, которую должна осуществить программа вычисления детерминанта. Тогда можно легко перебрать множество биекций между двумя интервалами целых чисел. Возможны две ошибки. Bijection-Overflow выполняется, когда пытаются вычислить биекцию, которая следует за самой большой в выбранном порядке; и вторая — если пытаются вычислить минимальную биекцию между двумя множествами с разными мощностями. 4.5 Вычисление определителя Чтобы достичь нашей цели — вычисление определителя — остается только объединить множество небольших кусков, которые мы построили до сих пор: матричный тип, ввод-вывод, генератор перестановок и написать, собственно, подпрограмму вычисления. Матрицы, которые мы будем обрабатывать, — квадратные, с целыми элементами, и мы будем предполагать, что индексы строк и столбцов имеют тот же тип. Когда этот выбор сделан, нужно конкретизировать оба настраиваемых пакета по оперированию с матрицами и
1-4.5 Вычисление определителя 81 вступить в диалог с пользователем. Именно это делает первый модуль программы, представленный здесь: . Вычисление определителя with Text-IO, Matrix-Nonsparse-Integer, Matrix-Nonsparse-Integer-IO; use Text-IO; procedure Compute-Determinant is type Index is new Positive; type Coefficient is new Long-Integer; package Matrix-Handler is new Matrix-Nonsparse-Integer (Row-Index => Index, Column-Index => Index, Coefficient => Coefficient); package Matrix-IO is new Matrix-Nonsparse-Integer-IO (Row-Index => Index, Column-Index => Index, Coefficient => Coefficient, Matrix => Matrix-Handler. Matrix, Set-Coefficient => Matrix-Handler.Set-Coefficient, Coefficient-Of -=> Matrix-Handler. Coefficient-Of, First-Row => Matrix-Handler.First-Row, Last-Row => Matrix-Handler.Last-Row, First-Column => Matrix-Handler.First-Column, Last-Column => Matrix-Handler.Last-Column); package Index-IO is new Text-IO.Integer-10 (Index); use Index-IO; Size : Index; function Determinant (A : Matrix-Handler.Matrix) return Coefficient is separate; begin loop Put ^,Вычислвнив|_рпрвдвлитвля.1_Разнври_цатрицы:1_)му); Get (Size); declare A : Matrix-Handler. Matrix (1, Size, 1, Size); begin Matrix-IO.Get (A, "? n); Matrix.IO.Put (A, 3); New-Line; Put-Line ^и0првделителЬ|_|1атриш1:|_|м & Coefficient'Image ( Determinant (A))); end; New-Line; end loop; exception when Data-Error => null; end Compute-Determinant; Начинают, таким образом, с построения матричного типа и его фимитивов; тогда можно конкретизировать пакет ввода-вывода ма- -1017
82 1-4 Хорошее приближение к бесконечности триц (эта последняя конкретизация довольно громоздка для записи) Конкретизация пакета Integer JO позволяет считывать размер матрицы, подлежащей обработке. Это чтение размера находится в основной цикле, который содержит также блок, в котором объявляют матрицу, считывают ее элементы и проводят вычисление определителя. Исключение Data-Error, вставленное в обработчик в конце этой основное процедуры, позволяет изящно остановить программу, задавая нулевую размерность матрицы (так как тип Index является производным от типа Positive). Функция, осуществляющая непосредственное вычисление определителя, для большей ясности отделена от основной процедуры. Вот запись этой функции, которая ничем особенным не отличается, это лишь переписанное определение 7, данное в начале раздела 4: . Функция вычисления определителя with Lexicographic-Bijection-Generator; separate (Compute-Determinant) function Determinant (A : Matrix-Handler.Matrix) return Coefficient is package Permutation-Generator is new Lexicographic-Bijection-Generator (Source => Index, Target => Index); use Permutation-Generator, Matrix-Handler; First-Line : constant Index := First-Row (A); Last-Line : constant Index := Last-Row (A); Sigma : Bijection (First-Line .. Last-Line) := MinimaLBijection (First-Line, Last-Line, First-Line, Last-Line); s : Signature := 1; Result : Coefficient := 0; Term : Coefficient; begin loop Term := Coefficient (s); for t in First-Line .. Last-Line loop Term := Term * Coefficient-Of (A, i, Sigma (i)); end loop; Result := Result -f Term; Successor-Of (Sigma, s); end loop; exception when Bijection-Overflow => return Result; end Determinant; Заметим, однако, что для облегчения записи для пакета Matrix-Handler был добавлен спецификатор use. Кроме того, во вре-
1-4.6 Вычисление определителя: несколько цифр 83 мя вычисления нужно осуществлять преобразование типа ► Term := Coefficient (s); Ч> чтобы связать элементы и сигнатуру перестановки. 4.6 Вычисление определителя: несколько цифр Прежде чем продемонстрировать несколько шагов выполнения, и даже прежде чем выполнять что бы то ни было, нужно оценить сложность процедуры, которую мы только что описали. Дорогостоящим элементом в программе, которую мы только что изучили, является функция Determinant, а точнее, самый внешний цикл, который находится в этой функции (тот, который повторяется для всех перестановок). Что видно в этом цикле? Во-первых, вложенный цикл, выполняемый п раз, где п — размерность обрабатываемой матрицы; затем суммирование, далее вычисление последователя какой-либо перестановки, что требует времени (по максимуму), пропорционального п. Внешний цикл, будучи выполненным п! раз, дает сложность вычисления определителя порядка 0(п • п\). Первые примеры определителей суть определители Майе (см. гл. III). Это определители матриц X, определенных для простого р через: <-ш- 1 Значение Р 11 13 17 19 | 23 Размерность 3 4 6 7 9 **(р) 1 1 1 1 3 Время счета (сек.) | 0.00 0.00 0.72 5.65 501.58 | где г и j находятся в интервале [3, (р — 1)/2]. Абсолютная величина определителя Майе для простого р обозначена h*(p). Эти определители имеют очень тесную связь с большой теоремой Ферма; точнее, если р \ Л*(р), то уравнение хр + у? = zp не имеет целых нетривиальных решений. Основываясь на этих примерах, можно Таблица 3. Определители Майе констатировать, что большая теорема Ферма справедлива для простых р, заключенных между 11 и 23. С другой стороны можно также констатировать, что время вычисления определителя размера 9x9 немного больше 8 минут (то, что величины даны с двумя знаками после запятой, означает только, что точность составляет 0, 01 сек.) Чтобы дополнить измерения времени счета, которые мы только что проделали, и, таким образом, оценить коэффициент прогрессии времени счета, мы также вычислили определители для порядков, которые не фигурируют в предыдущей таблице. 6*
84 1-4 Хорошее приближение к бесконечности! Установлено, что вычисление определителя размера 10 х 10, независимо от его значения, требует около 1 часа 30 минут; для определителя 11 порядка нужно примерно один день для определителя 12 порядка потребуется около 10 дней... Таким образом, экспериментально установлено, что когда переходят от определителя порядка п к определителю порядка п + 1, время счета приблизительно умножается на (п + 1)2/п, что подтверждает теоретическую оценку сложности: 0(п • п\). Конечно, можно упрекнуть программирование в его неэффективности — маскировка информации, вынуждающая обращаться к подпрограммам там, где обычно присутствует только ссылка на элементы массива, и широкое использование настраиваемых модулей. По этой причине приведены две другие таблицы 4: они показывают времена вычислений, полученные при реализации, одна — без применения настраиваемых модулей, а другая — без маскировки информации. Размерность определителя 5 6 7 8 9 10 Время счета (в секундах) 0.11 0.77 5.88 51.41 499.93 5404.67 Размерность определителя 5 6 7 8 9 10 Время счета (в секундах) 0.06 0.50 3.68 31.75 299.78 3173.87 Таблица 4. Время вычисления определителей Первая из этих двух таблиц соответствует выполнению программы вычисления определителя по методу, описанному в этой главе, но посредством реализации без применения настраиваемых блоков, кроме стандартных пакетов ввода-вывода. Из этой таблицы видно, что улучшение времени вычислений, полученное данным методом, невелико — улучшение касается, очевидно, только константы, на которую умножается п • п\ в оценке сложности — но не является пренебрежимо малым по отношению к полученному времени вычисления. Во всяком случае не меняется скорость возрастания времени счета. Вторая таблица касается измерения времени счета определителей с помощью вполне классической реализации, которая не содержит настраиваемых блоков и в которой представление матриц не замаскировано; в функции вычисления определителя появляются в явной форме такие выражения, как ► Term := Term * Of-TheJAatrix (i, Sigma (г)); <4. Размерность определителя 5 8 10 Время счета (в секундах) 0.11 52.79 5666.83
1-4.7 Перестановки конечного множества 85 Здесь улучшение гораздо больше (примерно на множитель 1, 6 по отношению ко всему первому методу), но ясно, что если меняется представление матриц, нужно полностью переписывать функцию вычисления определителя. Таким образом, краткое сравнение издержек показывает, что часто выгоднее купить машину, которая в два раза быстрее по сравнению с имеющейся, чем написать программу, которая действует в два раза быстрее по сравнению с первоначальной. Кроме того, и это здесь убийственный довод, использованный метод очень плохой (так называемый метод «Барейса» — это эффективный метод вычисления определителей в целых числах). Ну, а каково время счета определителя размера 20 х 20 этим наивным методом? 4.7 Перестановки конечного множества В пункте 4.4 мы выбрали представление перестановок, которое могло бы, ко всему прочему, подойти для представления отображений одного множества в другое: таблицу, содержащую элементы множества образов (данного отображения), индексированные элементами исходного множества. Это представление в форме таблицы напоминает некоторыми аспектами понятие слова (в смысле элемента свободного моноида, см. пункт 3.3). Например, множество перестановок интервала [1,5] может быть идентифицировано с множеством слов, образованных из пяти различных букв и построенных в алфавите {1,2,3,4,5}. Тогда в голову естественно приходит мысль наделить множество перестановок индуцированным порядком, который существует для слов и который называется лексикографическим. (8) Определение (лексикографический порядок на декартовом произведении двух множеств). Пусть (Е^е) и (F,^.p) — два линейно упорядоченных множества. Лексикографический порядок на Е х F определяется для (а, 6), (а', Ь') Е Е х F следующим образом: (а, 6) ^ExF {d',&') <==> [ a = а' и b ^f V или a <e a']. Определенное таким образом отношение дает линейное упорядочение на Е х F, которое может удобно обобщаться по индукции на любое декартово произведение линейно упорядоченных множеств. Замечание. Существуют другие способы, позволяющие определить линейный порядок на декартовом произведении данных
86 1-4 Хорошее приближение к бесконечности! множеств. Один из них, в частности, упорядочивает перестановки, чередуя их сигнатуры, чего не делает лексикографический порядок. Заинтересованный читатель может обратиться к упражнениям 17, 23 и 24 в конце главы. Рассмотрим перестановку а множества £, представленную пока таблицей из двух строк, и отыщем другую перестановку о-', непосредственно превосходящую а в лексикографическом порядке, индуцированном на второй строке таблицы. fa\ а2 ... an»i ап \ , _ fax а2 ... an_i an \ а-\Ьг 62 ... б,,.! Ьп) И а-\Ь'1 Ь'2 ... Ь'п_, Ь'п)> выражения, в которых элементы а, и 6j из Е удовлетворяют для всякого г Е [1, п — 1] условию а,- < a,+i. Поскольку элементы а,- расположены в порядке возрастания, они не несут никакой полезной информации и могут быть подразумеваемы, что приводит нас к представлению перестановок в форме n-ок. Множество, которое мы пытаемся пронумеровать, есть, следовательно, множество всех n-ок различных элементов из Е (мощности п). Предыдущее определение лексикографического порядка без труда распространяется на множество n-ок различных элементов из £, и задача теперь становится такой: считая данной п-ку 6 = (61,62, •• j6n) элементов из £, найти следующую за ней n-ку Ь' = (61,62,.. .,6^), удовлетворяющую условиям: (г){61,62,...,6п} = {6'1,6'2,...,6'п}, (и) 6 = (6Ь 62,..., 6п) <1ех (6'l5 6'2,..., 6'п) = 6', (ггг) с > b => с ^ V, что можно также записать для линейной упорядоченности через ]6,6'[= 0. Прежде чем вычислять последователя какой-либо такой n-ки в общем случае, можно поинтересоваться существованием этого последователя. (9) Свойство. Пусть Е — линейно упорядоченное множество. Тогда единственная строго убывающая (соответственно, возрастающая) последовательность, образованная из всех элементов Е, представляет наибольшую (соответственно, наименьшую) перестановку Е и не имеет, таким образом, последователя (соответственно, предшественника). Это очень простое свойство позволяет применить рекурсию для построения следующего элемента для какой-либо n-ки в общем случае.
1-4.7 Перестановки конечного множества 87 Действительно, имея определение лексикографического порядка на Епу для вычисления последователя какого-либо элемента нужно попытаться вычислить последователя в Еп~х для (п — 1)-ки, образованной последними составляющими первоначальной n-ки; и этот процесс редукции может повторяться до тех пор, пока не достигнем набора из (п — к) элементов, который не имеет последователя. Предыдущее свойство позволит нам охарактеризовать такой набор из (п — к) элементов: он образован убывающей последовательностью элементов. Таким образом, первый этап в вычислении последователя для n-ки элементов из Е есть поиск финальной убывающей максимальной части этой n-ки; затем нужно переупорядочить элементы, и следующее свойство указывает, каким образом. (10) Свойство (последователя для n-ки различных элементов). Пусть Е — множество из п элементов и пусть 6 = (61,62,.. . ,6п). Предположим, что существует такое I ^ 1, что для всякого i из ]/, п — 1] имеют место соотношения 6,- > 6,+i и 6/ < 6{+i; тогда последователь n-ки в множестве п-ок различных элементов из Е определяется как (6i,62,.. .,6/_i, 6*, 6n,6n_i,.. .,6*+1, 6/, 6*_i,.. .,6/+i), где k — наибольший индекс, превосходящий I и такой, что 6* > 6/. Другими словами, чтобы вычислить следующий за 6 элемент, достаточно обратить финальную убывающую часть Ь, затем поменять элемент, предшествовавший этой части, с его последователем в этой части. Доказательство. I • Прежде всего, должно быть ясно, что если индекс / не существует, то мы будем находиться в ситуации, выраженной в свойстве 9: п-ка не имеет последователя. • Обозначим 6' новую n-ку, определяемую этим свойством. Тогда ясно, что 6' >/ех 6. Действительно, эти две n-ки совпадают на их (/—1) элементах, и их элементы с индексом / удовлетворяют условию Ь\ = bk > bi. • Остается показать, что Ь' является наименьшей мажорантой 6 в лексикографическом порядке; а это можно сделать, показав, что открытый интервал ]6,6'[ пуст (в силу линейного лексикографическо- | го порядка). Предположим, что существует такое с, что 6 < с < 6х:
88 1-4 Хорошее приближение к бесконечности &1 ... &/_i | 6/ < &/+i > &/+2 > ... > &*_1 >bk> &*+1 > ... > Ьп II II | С\ ... C/_i | С/ С/+1 С/+2 ... Cfc_i Ck Cfc + i ... Cn *'l ••• M-l l M > 4+1 < 4+2 < •• < 6i-l < ■ II II II II I bk bn 6n_i ... 6/j+i < К < &£+1 < ... < 6; II II II Заметим прежде всего, как это подсказывает схема, что части слева от вертикальной черты равны во всех строках, следовательно, нет нужды учитывать их в дальнейшем. Рассмотрим только элементы каждой перестановки, чьи индексы превосходят или равны /, Следующее свойство, которое мы не будем повторять по ходу доказательства, является основным: части трех перестановок, расположенные справа от вертикальной черты, образованы из однил и тех же элементов, различных между собой. Теперь мы покажем, что если предположить, что 6 < с < &' то 6/ < с/ < Ь\. Действительно, предположим 6/ = с/; поскольку 6 < с, то из этого следует, что в лексикографическом порядке Ь/+1...п < С/+1...П) но часть 6/+1...П, будучи строго убывающей, максимальна в лексикографическом порядке, а так как она образован* из тех же элементов, что и часть c/+i...n, то не может быть меньше последней. Следовательно, 6/ ф с/ и, значит, 6/ < с/. Рассматривая части c/+i...n и 6{+1 п, где последняя является минимальной i лексикографическом порядке, аналогичным образом получаем, чтс с/ < Ь[. Итак, Ь\ = 6*, и выбор 6* делает невозможным найти сред» элементов &/+i, ..., Ьп элемент с/, заключенный строго между 6/ i &{, что противоречит первоначальному предположению (существует с, удовлетворяющее Ь < с < Ь'). Значит, &' есть последовател! для 6. Замечания. Предыдущее свойство позволит нам эффективно вычислять последователя п-ки различных элементов из множества Е мощности п. Кроме того, как будет видно из записи алгоритма — который уже должен просматриваться из этого рассуждения — нетрудно вычислить отношение между сигнатурами исходной п-ки и новой.
1-4.7 Перестановки конечного множества 89 Наконец, перестановка — первоначальный объект нашего изучения — полностью исчезла, а все эти результаты могут применяться в более общих рамках: для нумерации биекций конечного множества. Теперь есть возможность разработать алгоритм, который реализует результаты предыдущего свойства. Перестановка будет представлена таблицей элементов из Е, индексированной целыми числами, заключенными между р и q. Перестановка, или скорее таблица, которая ее представляет, будет называться Sigma. Дальнейшие построения уточняют преобразование Sigma в ее последователя в лексикографическом порядке. Эта конструкция осуществляется в три этапа и очень точно следует изложению предыдущего свойства. Первая фаза Первое, что нужно сделать, — это определить конечный максимальный убывающий сегмент. Соответствующая часть алгоритма очень проста (смотри рядом). В этом фрагменте р и q суть границы таблицы Sigma. Цикл, который здесь видим, позволяет определить FirstJndex, начало финальной убывающей максимальной подпоследовательности (величину / свойства 10). Кроме того, переменная Length выражает длину этого сегмента, что позволяет определить, (что, как это уже было видно, означает отсутствие у перестановки последователя) . Вторая фаза Затем нужно обратить конечный сегмент, определенный в первой фазе; алгоритм, который осуществляет эту операцию, тоже очень прост. Ascending Judex <— First-Index + 1 Descending Jndex i— q while Ascending Jndex < Descending Jndex loop Sigma(AscendingJndex) 4^? Sigma(DescendingJndex) Ascending Jndex <— Ascending Jndex + 1 Descending Jndex i— Descending Jndex — 1 end loop Length <— 1 for i in reverse p .. q — 1 loop if Sigma(i) > Sigma(i + 1) then Length <— Length + 1 else First Jndex i— t exit end if end loop if Length = q — p + 1 then raise NoSuccessor end if не максимальной ли он длины
90 1-4 Хорошее приближение к бесконечности! Нужно заметить, что это последнее преобразование перестановки Sigma сделано через транспозиции, и поэтому отсюда можно вывести отношение между сигнатурами начальной перестановки и полученной из нее (число осуществленных перемен s = Length/2, и, значит, это отношение равно (—I)5). Третья фаза Наконец, нужно отыскать в только что обращенной части таблицы наименьший элемент, превосходящий элемент с индексом First Jndex (т.е. элемент с индексом / из свойства 10), и for i in First.Index .. q loop if Sigma(i) > Sigma(First-Index) then Sigma(i) V^$ Sigma(First-Index) exit end if end loop поменять их местами, что добавляет еще одну дополнительную транспозицию к преобразованию. Полный алгоритм генерации биекций формируется очень просто, достаточно склеить все фрагменты, которые мы только что изучили. Целиком это будет видно в следующем разделе, посвященном реализации всего этого. 4.8 Настраиваемый модуль генератора биекций Мы закончим эту главу реализацией алгоритма перечисления биекций и, таким образом, построим тело цикла, спецификация которого была дана в разделе 4.4. Как это было видно в предыдущем рассуждении, названные биекций действуют на целых интервалах, что вовсе не лишает решение общности; всякая биекция между двумя конечными множествами может трактоваться как целая биекция. Напомним все-таки, что этот пакет, кроме типа биекций между двумя целыми интервалами и процедуры вычисления последующего элемента, дает также наименьшую биекцию в лексикографическом порядке (которая является и единственной строго возрастающей биекцией между двумя рассматриваемыми интервалами). Кроме того, процедура Successor имеет два параметра: исходная биекция и ее сигнатура, и эта процедура вычисляет следующую биекцию и ее сигнатуру. Реализация генератора биекций package body Lexicographic-Bijection-Generator is function MinimaLBijection (Source-Min : Source; Source-Max : Source; Target-Min : Target; Target-Max : Target) return Bijection is
1-4.8 Настраиваемый модуль генератора биекций 91 Реализация генератора биекций (Продолжение) subtype Source-Interval is Source range Source-Min .. Source-Max; subtype Target-Interval is Target range Target-Min .. Target-Max; Sigma : Bisection (Source-Interval); Source-Index : Source-Interval := Source-Interval'First; Target-Index : Target-Interval := Target-Interval'First; begin if Sigma'Length / = Target-Interval'Last — Target-Interval'First + 1 then raise Not-A-Bisection; end if; loop Sigma (Source-Index) := Target-Index; exit when Source-Index = Source-Interval'Last; Source-Index := Source-Index + 1; Target-Index := Target-Index + 1; end loop; return Sigma; end MinimaLBijection; procedure Successor-OJ (The-Bijection : in out Bijection; WithSignature : in out Signature ) is Length : Positive := 1; First-Index : Source; Ascending-Index , Descending-Index : Source; procedure Swap (a , b ; in out Target) is X : constant Target := a; begin a := b; b := X; end Swap; pragma Inline ( Swap ); begin for t in reverse The-Bijection'First .. The-Bijection'Last — 1 loop if The-Bijection (i) > The-Bijection (i 4- I) then Length := Length + 1; else First-Index := i; exit; end if; end loop; if Length = The-Bijection'Length then raise Bijection-Overflow; end if; Ascending-Index := First-Index + 1; Descending-Index := The-Bijection'Last; while Ascending-Index < Descending-Index loop Swap (The-Bijection (Ascending-Index), The-Bijection (Descending-Index)); Ascending-Index ;= Ascending-Index + 1; Descending-Index := Descending-Index — 1; end loop;
92 1-4 Хорошее приближение к бесконечности! Реализация генератора биекций (Продолжение) for t in First-Index + 1 .. The-Bijection'Last loop if The-Bijection (i) > The-Bijection (FirstJndex) then Swap (The-Bijection (i), The-Bijection (First-Index)); exit; end if; end loop; if (Length/2 + 1) mod 2 /= 0 then WithSignature := - WithSignature; end if; end Successor-Of; end Lexicographic-Bijection-Generator; for t in Sigma'Range loop Sigma(i) := i; end loop; Первая функция, включенная в тело цикла, есть функция Minimal-Bijection. Ее реализация требует особой заботы, если хотим избежать переполнения индексов и иметь возможность осуществлять те или иные проверки. Начинают с определения двух подтипов, которые точно соответствуют целым интервалам исходного и конечного множеств биекций. Эти два типа позволяют очень точно контролировать множество возможных значений локальных переменных, а также проверять прежде всего, что интервалы действительно могут быть подвергнуты биекций. С этой проверки и начинается функция, и, возможно, возбуждается исключение Not-A-Bijection. Если все увязано с этой точки зрения, нужно предпринять еще другие меры предосторожности; простой цикл, записанный слева, не может быть использован в случаях несоответствия типов. Нужно напротив пройти «вручную» по элементам исходного и конечного множеств, внимательно проверяя число осуществленных итераций. Для этого используют две переменные Source Jndex и Target Jndex, придавая им первоначально наименьшие значения соответственно исходного множества и множества конечного и просматривая каждое из этих двух множеств. Цикл заканчивается, когда одна из этих двух переменных достигнет своего максимального значения (другая переменная достигает своего максимального значения одновременно). Принимая во внимание сказанное в предыдущем разделе, заключаем, что реализация функции Successor не требует дополнительных объяснений. Однако отметим присутствие pragma: в этой процедуре часто бывает необходимо делать обмен значениями двух элементов таблицы, поэтому естественно определить процедуру Swap, которая это делает. Прагма Inline, которая применена к этой процедуре, означает, как это
1-4.8 Настраиваемый модуль генератора биекций 93 показано в разделе 4.3, что нужно заменить обращения к процедуре Swap развертыванием «в линию» ее тела. Совершенно очевидно, что это указание не может применяться к рекурсивной подпрограмме. 5 Заключение ... as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem. In this sense the electronic industry has not solved a single problem, it has only created them — it has created the problem of using its products. To put it in another way: as the power of available machines grew by a factor of more than a thousand, society's ambition to apply these machines grew in proportion, and it was the poor programmer who found his job in this exploded field of tension between ends and means...x Edsger W. Dijkstra, The humble programmer (1972 [66]) Сделаем маленькое отступление. Около четверти века назад Дейкс- тра [65] опубликовал статью "Go to statement considered harmful", в которой он вскрывал недостатки команды безусловного ветвления. Несколько лет спустя Вирт ввел язык Паскаль, который установил затем свою диктатуру в обучении более, чем на десять лет. Этот длительный период ригоризма структур управления позволил структурному программированию завоевать свои титулы и лавры и был совершенно необходим, чтобы умерить беспорядочное разбухание информатики. Однако некоторые авторы, и среди них Кнут (Structured programming with goto statements), настаивали на запрещении более гибкого стиля программирования, такого, за который ратовали Дейкстра, Хоар и Дал [58] или Вирт [182]. Но, как говорит Кнут [98]: "... During the 1... пока не было машин, программирование вовсе не было проблемой; когда у нас появилось некоторое число слабых компьютеров, программирование стало представлять некоторую проблему, а теперь, когда мы имеем гигантские компьютеры, программирование стало столь же гигантской проблемой. В этом смысле электронная индустрия не решила ни одной проблемы, она только создала их — она создала проблему использования своей продукции. Другими словами: как только мощь доступных машин возросла более, чем в тысячу раз, так общество захотело использовать их в той же пропорции, и бедному программисту пришлось трудиться в этой стремительно расширяющейся области напряжения между целями и средствами... Э.В. Дейкстра, Смиренный программист (1972)
94 1-5 Заключение programming, because I couldn 't bear to be found guilty of writing unstructured programs"2у и однако, в течение многих лет никто не осмеливался заявлять миру в лицо, что он не программирует структурным образом (в смысле Паскаля). Язык Ада, имеющий прямое родство с Паскалем (и, конечно, с другими языками), сделал заметно более гибкой позицию структурного программирования; зато в сравнении с Паскалем язык Ада еще крепче закрутил гайки относительно типов данных. С этой точки зрения он действительно суров! Но соображения, которые являлись определяющими при создании языка Ада, уходят гораздо дальше простых задач программирования. Речь шла о построении стандартного языка, который, помимо всего прочего, позволил бы пользователям всех уровней обмениваться программами; мы же пока еще далеки от достижения этой цели. Мы полагаем, однако, что язык Ада обладает выразительной силой и четкостью, достаточными для того, чтобы служить основой для трансляции алгоритмов; но этого недостаточно... Гордое восклицание сПошло с первого раза!» обнаруживает в программировании черты искусства. Это утверждение, вполне понятное, но редко произносимое, означает следующее: написать программу, которая правильно работает с первого раза, возможно, но это не типично. Так как программисты, несомненно, стараются писать программы, которые идут с первого раза, встает вопрос: шесли это возможно, почему это необычно?». Ответ на этот вопрос двойной: во-первых, программировать трудно, и во-вторых, имеется очень мало общих методов для разработки и написания хороших программ. Поскольку общих методов мало, каждый программист должен развивать свои собственные, часто с минимальным успехом. Успех этих методов зависит от способа, каким они адаптированы к конкретной задаче. По этой причине качество программ меняется не только от одного программиста к другому, но еще и от одной программы к другой у одного и того же программиста. Анри Ледгар, Пословицы программирования (1975 [115]) Программирование все еще является, в основном, техникой, требующей умений, которые не приобретаются из книг; в нем отсутствует строгость, которая приносит успех в математике. Как мы уже говорили, проверка программы имеющимися методами так же трудна, как и 2 " ... в 70-е годы я, как и все остальные, был вынужден принять идеи структурного программирования, так как я не мог допустить, чтобы меня обвинили в написании неструктурных программ". — Прим. перев.
1-5 Заключение 95 математическое доказательство, если не позволять себе никакого отклонения от обозначений в смысле логики; это выше человеческих сил, даже если предположить, что все необходимые для этого средства существуют. Однако представляется вполне возможным убедить разумного человека в том, что программа корректна, при условии ее представления в форме небольших модулей, поведение которых является понятным. Сопровождая эти модули просто проверяемыми утверждениями, мы делаем важный шаг в процессе передачи умений и навыков. Сколько мы изучили алгоритмов, постижение которых потребовало от нас длительных часов потому, что их авторы (которые, быть может, провели еще больше времени, составляя их) опубликовали их без всякого обоснования! Тогда как одно маленькое высказывание в нужном месте позволило бы быстро понять суть алгоритма. Что касается программирования, были также сделаны попытки для упрощения передачи понимания программ от разработчика пользователю. Кнут [101], который является для нас объектом постоянных ссылок, работал в этом направлении, создавая свою систему документированного программирования WEB. Это направление, даже если оно не решает всех задач программирования — в частности, оно не дает удовлетворительного решения проблемы архитектуры программ — очень помогло нам на этапах программирования, которые мы уже прошли. Конечно, применение этой методологии программирования требует заметного напряжения, а время получения результата больше, чем обычно, что идет вразрез с философией программистов, для которых верхом изящества является возможность составить и выполнить программу одним нажатием кнопки. Но уже выбор языка Ада четко отделяет нас от этих программистов. В дальнейшем на страницах этой книги читатель найдет сравнительно мало Ада-программ по сравнению с насыщенной ими первой главой. Причина, в основном, в недостатке места, которое было бы необходимо для представления этих программ. Однако мы реализовали большинство алгоритмов, которые представляем здесь, скорее для того, чтобы подтвердить наши утверждения (что не составляет доказательства как такового), нежели для нахождения конкретных примеров или контрпримеров; и все эти алгоритмы представлены в форме, допускающей прямую реализацию. Сверх того, мы строго привержены принципу документирования, и в дальнейшем не найдется — кроме тривиальных случаев — алгоритма, не сопровожденного небольшим инвариантом, что и делает жизнь приятной.
Упражнения 1. Вычисление целого квадратного корня Это упражнение показывает, что классический метод Ньютона для вычисления квадратного корня из действительных чисел равно применим в случае вычисления для целых чисел. Пусть а — целое строго положительное число; определим последовательность натуральных чисел (ап) следующим образом: а^а и an+i = 1- л- , Vn G N. Можно считать, что если а и 6 — целые положительные числа, то [а/Ь\ есть частное от деления а на 6 с помощью алгоритма Евклида. a. Прежде всего, нужно точно сформулировать проблему. Что означает «х есть целый квадратный корень из а»? Для х G N доказать, что [(х + [a/xj)/2j = [(х2 + a)/2xj. Для какой формы вычисления наиболее эффективны? b. Написать программу, которая вычисляет последовательность (an), начиная с некоторого значения а, вводимого с клавиатуры, что позволяет наблюдать формирование последовательности и высказывать правдоподобные предположения об условиях ее сходимости. Затем можно написать программу, позволяющую проверить предположение на примере целых чисел, гораздо больших, чем в предварительных рассмотрениях. Продолжение упражнения состоит в доказательстве этого высказывания. c. После изучения числовой функции F(x) = (х + а/х)/2, доказать, что последовательность (an) обладает начальным строго убывающим сегментом, т.е. существует целое р такое, что для всякого г < р имеет место а,- > a,-+i и ар ^ ap+i (указание: показать, что а\ > а => а, > a«+i)- d. Показать, что (ар + I)2 > а. Вывести отсюда алгоритм вычисления целого квадратного корня из а. e. Изучить также последовательность, определенную с помощью соотношений а2 > а и an+1 = [±±°±±hl±dJ .
Упражнения 97 2. Целая часть функций a. Показать, что [\/LxJj = Lv^J • В более общем случае показать, что если / — возрастающая непрерывная функция и если f(x) E N => *€N,toL/(1*J)J = L/(*)J. b. Если обозначить через \х] наименьшее целое, превосходящее или равное х (его наибольшая целая часть), то при каком условии c. Пусть / — строго возрастающая непрерывная функция такая, что f(x) G N => х G N. Показать, что для всякого целого х выполняется равенство \f(x + 1)] = [f(x) + lj. 3. Вычисление целого корня п-й степени Требуется для а Е N вычислить [>/я]> гДе п — целое ^ 2. Метод Ньютона, примененный к уравнению f(x) = хп — а = 0 на множестве действительных чисел, предполагает рассмотрение действительной функции F(x) = z—j7tt = nln-*a- Тогда естественно для целых чисел рассмотреть последовательность (х,), определенную как: x»+i = " ^fi для г ^ 0 и х0 е N, xj ^ а. Руководствуясь упражнением 1 по вычислению квадратного корня в целых числах, доказать свойства последовательности (х,),^о (в случае необходимости — с помощью программы) и вывести отсюда эффективный алгоритм, позволяющий вычислять [ у/а\ (нужно особенно внимательно отнестись к выбору первого члена последовательности, если хотим, чтобы все вычисления оказались возможны). 4. Вычисление десятичных знаков числа у/2 Это упражнение описывает элементарный метод, позволяющий генерировать один за другим десятичные знаки числа V2, который был использован Лалем в 1967 году для вычисления 19600 десятичных знаков у л/2. С тех пор были сконструированы многочисленные другие методы. Читатель может обратиться к главе 5 из [135], где также присутствует вычисление других известных математических констант таких, как тг и е. Пусть ао,а1а2...а* ... — разложение у/2 по основанию 10 (>/2 = 1,41421356...). Положим Ак = {а0ах.. .а*)ю = [Юку/2\ и Rk = 2 • 102* - А\ = (10*л/2)2 - А\. МОП
98 I Ллгоритмика и программирование на языке Ада Это означает, что Ak есть целое число, образованное к + 1 первыми цифрами \/2, тогда как Rk — ошибка, обнаруживаемая при возведении двух этих величин в квадрат. Показать, что а = a*+i есть наибольшее целое (заключенное между 0 и 1) такое, что 20aAk + а2 ^ ЮОЛ*, затем показать, что ДЛ+1 = ЮОЛ* — (20a/j+iAfc + a!+i)- Отсюда вывести алгоритм, позволяющий получить заданное число десятичных знаков л/2- Хорошо видно, что Ak — это неограниченное целое; таково ли Л*? Каким бы ни был ответ, дать порядок величины интервала, в котором находится Rk. 5. Точный корень из целого числа Для nGH*, обозначим е(п) наибольшее к ^ 1 такое, чтобы п было точной к-и степенью (п всегда точная к-ая степень только для к = 1); например, имеем е(18) = 1 и е(248 832) = 5, ибо 248 832 = 125. Это упражнение посвящено алгоритму вычисления пары (г, е(п)) такой, что п = ге(п). Этот алгоритм часто используется перед алгоритмами разложения и не может поэтому использовать в своей реализации, по крайней мере, каноническое разложение п. a. Рассматривая каноническое разложение п, установить несколько свойств функции е : N* —У М*. Показать, в частности, что e(nq) = qe(n). b. Используя в качестве примитивов функции [ \/~~\ (т ^ 2) и функцию Next-Prime, дающую простое число, следующее за данным целым, написать алгоритм (сопровождаемый доказательством), реализующий вычисление пары (г,е(п)) для данного целого п. Каков диапазон целых п, поддающихся обработке с помощью набора простых чисел < 103? 6. Порождение простых чисел В этом упражнении устанавливаются алгоритмы, позволяющие последовательно находить нечетные простые числа, начиная с 3, которые будем обозначать pi, P2, Рз, • • • (в отличие от общепринятых обозначений, когда pi = 2). а. Написать алгоритм, который вычисляет pi, рг? • • •, Рп для фиксированного п. Метод: определив все простые числа до р*, выбирают в качестве кандидата pk +2 и пробуют делить его на уже вычисленные р,. Обязательно ли проверять делимость на все уже вычисленные простые числа?
Упражнения 99 b. Прежде чем читать формулировку этого вопроса, внимательно рассмотреть доказательство корректности (обеспечиваемое решением) алгоритма из предыдущего вопроса. В одном из циклов этого алгоритма для всякого нечетного q осуществляется проверка р? > q, что сводится к многочисленным бесполезным вычислениям квадратов. Можно без использования таблицы квадратов сократить этот счет, сохраняя две переменные, которые обозначают, соответственно, номер i наименьшего простого р,-, квадрат которого превосходит испытываемые числа, и квадрат этого простого. Это возможно благодаря постулату Бертрана, который утверждает, что pl+i < 2p,-. Построить новый алгоритм, реализующий эту оптимизацию. 7. Правильный пятиугольник для всех (без Ферма и Гаусса) Показать, что cos j = |, где ф есть число золотого сечения. Вывести отсюда построение правильного пятиугольника с помощью циркуля и линейки. 8. «Двоичное» деление нацело Цель этого упражнения — вычисление частного и остатка от деления алгоритмом Евклида целого а на целое 6, используя только сложение, вычитание, умножение и деление на 2. a. Выразить частное и остаток от евклидова деления а на 6 как функцию частного и остатка от евклидова деления а на 26. b. Написать алгоритм (рекурсивный) евклидова деления двух целых чисел у основанный на предыдущем свойстве. Этот алгоритм принимает на входе пару целых чисел и дает на выходе пару целых чисел. c. Очень вероятно, что предыдущий алгоритм, если он прямо реализует свойство пункта а, дает большую ошибку. Для примера попробуйте деление 31001 на 15 и представьте, что произошло бы, если бы все целые числа, с которыми проводятся вычисления, были заключены между -215 и 215- 1. d. Если алгоритм пункта Ъ не вызвал особых сложностей при работе с предыдущим примером, написать итеративный алгоритм евклидова «бинарного» деления. e. В конце упражнения рассматривается случай, наиболее вероятный для возникновения проблемы. В наиболее вероятном случае, когда возникает проблема, конец упражнения посвящен корректировке этой проблемы. Предполагая, что &о ^ а, показать, что два следующих алгоритма эквивалентны. 7*
100 I Алгоритмика и программирование на языке Ада I 6 <— 6о; к <— 0; loop 6 <— 2 х 6; к <— к + 1; exit when 6 > а; I end loop; Отсюда вывести итеративный алгоритм евклидова деления двух целых чисел двоичными операциями, не содержащий ошибку, указанную в вопросе с. 9. Построение прямых линий методами DDA DDA — аббревиатура, означающая Digital Differential Analyser1, — имя, данное методам построения геометрических фигур на основе дискретного разрешения (экран или графическое печатающее устройство), использующим только простые арифметические операции и целые числа (в частности, эти методы никогда не применяются к вычислениям над числами с плавающей точкой). В дальнейшем предполагается, что «светящиеся» точки имеют целочисленные координаты. В этом упражнении описаны два алгоритма, позволяющие строить отрезки прямых на экране; предполагается, что прямые проходят через начало координат, имеют положительный наклон и находятся только в первом квадранте; уравнение прямой имеет тогда вид у = xv/u, где v > 0 и и > 0 (вертикальные и горизонтальные прямые не составляют проблемы). a. Во всех этих алгоритмах можно считать и и v взаимно простыми. Почему? b. Предположим сначала, что и > v > 0 (т.е. отрезок, который требуется построить, находится в первом октанте); как следствие, рисуемый отрезок будет сформирован из маленьких горизонтальных отрезков. Разрешаются диагональные и горизонтальные движения точки на экране (чисто вертикальные движения бесполезны, так как угловой коэффициент прямой меньше 1). Написать алгоритм, осуществляющий построение по предыдущим правилам. Указание: если (х,у) — точка дискретной прямой, у должен быть наилучшим приближением величины vx/u. c. Предположим только, что и > 0 и v > 0; требуется построить прямую в первом квадранте. Разрешаются только вертикальные и горизонтальные движения точки на экране (не диагональные!). Написать алгоритм, который строит сегмент прямой [0, (u,v)], соблюдая 6 <—bo] к i—0; while 6 ^ а/2 loop 6 <— 2 х 6; к <— к + 1; end loop; 6 i— 2 х b; k i— к + 1; Цифровой дифференциальный анализатор. — Прим. перев.
Упражнения 101 правило перемещения и ставя точки как можно ближе к действительной прямой. Указание: поддерживать положение точки, аппроксимирующей прямую, в полосе, расположенной между двумя прямыми, параллельными искомой прямой и проходящими через точки (—1/2, 1/2) и (1/2, -1/2) (см. рис. 1). Рис. 1. Аппроксимация прямой линии. 10. Построение окружности методами DDA Речь идет еще об одном из методов DDA, который позволяет построить часть окружности в верхнем правом октанте (каждой точке, построенной в этом октанте, соответствует 1 точка в каждом из 7 других октантов). Ставится задача построить окружность с центром О и радиусом R. Уравнение окружности известно: х2 + у2 = Л2, и в верхнем правом октанте имеем: у ь [Дл/2/2,Д] и х е [0,Ял/2/2]. Два метода, представленные ниже, строят восьмую часть окружности как кривую у = /(х), а это означает, что на каждом шаге этих алгоритмов отыскиваются точки, расположенные на вертикали и минимизирующие (в смысле, который еще предстоит определить) удаленность по отношению к окружности. а. Показать, что если (х,у) есть точка на вертикали х, близкая к действительной окружности, то одна из точек (х + 1, у) или (х + 1, у — 1) есть точка с целыми координатами, ближайшая к действительной окружности на вертикали х + 1. В дальнейшем полагаем
102 I Алгоритмика и программирование на языке Ада b. Первый метод: для целой точки (х, у), аппроксимирующей точку (х, /(х)), полагаем, что у — 1/2 ^ /(х) < у+ 1/2. Установить алгоритм, который строит восьмую часть окружности. c. Второй подход: алгоритм Брезенхама (см. [38]) использует для построения дискретной окружности точки с целыми координатами, ближайшие к окружности в следующем смысле: если Р = (х,у) — точка дискретной окружности, то из двух точек Pi = (х + 1, у) и Р2 = (х + 1, у — 1) выбирают ту, которая минимизирует расстояние до окружности. Это правило могло бы привести к исключительно сложным вычислениям, если бы Брезенхам не доказал (это нужно будет еще доказать) следующее свойство, которое мы принимаем: с предыдущими обозначениями и предположениями минимизировать разность между квадратами длин ОР{ и Л, что позволит минимизировать разность между этими же длинами. После этого замечания составить алгоритм, который строит окружность Брезенхама во втором октанте. Какие замечания можно сделать при сравнении полученного алгоритма с тем, который был составлен в вопросе Ъ. 11. Сложность возведения в степень Цель этого упражнения — показать, что всякий алгоритм вычисления Р = хп, использующий только умножение (как алгоритмы, представленные в книге), имеет минимальную сложность log2 n. В этом исследовании нас интересует только число перемножений; процесс же счета может быть схематично представлен следующим образом: P\ = y\z\ , где yuzi e {1,*}, Рч = 3/2*2 , где у2, *2 е {1, х, Pi}, Pt-Vtzt , гдеуг,гг G {1,х,РЬР2,...,P*_i}; здесь t есть сложность алгоритма. 12. Последовательность Фибоначчи и золотое сечение Числа Фибоначчи определены с помощью соотношений: Ро = 0, Pi = 1 и Рп = Рп-1 + Рп-2- Они тесно связаны с числом золотого сечения ф » 1,618, которое является положительным корнем уравнения х2 — х — 1 = 0; второй корень этого уравнения традиционно обозначается ф.
Упражнения 103 a. Установить соотношения, возможно проще выражающие Fn как функцию от ф и ф. Указание: установить свойства порождающего ряда F = J2n>o FnXn (или, иначе, производящей функции). b. Представить фп + фп как функцию от чисел Фибоначчи. c. Записать фп как функцию от чисел Фибоначчи наиболее простым возможным способом. 13. Соотношения в последовательности Фибоначчи ■0i> a. Рассмотрим матрицу А = ( 1 п J. Вычислить Ап. Отсюда вывести соотношения ^n+i^n-i — Fn = (~"1)п и Fn+m = FnFm+i + Fn_iFm. b. Вычислить fn = $3*=o FkFn-k- Указание: каков общий член произведения двух формальных рядов? 14. Линейные рекуррентные последовательности к-го порядка a. Исследовать последовательность целых чисел (хп), определяемую соотношением xn+2 = xn+i+xn, где первые члены Хо и xi — произвольные фиксированные числа. Какую связь она имеет с последовательностью Фибоначчи? b. Фиксируются к чисел ао, а\у ...; вк-i и рассматриваются все линейные рекуррентные последовательности к-го порядка, т.е. определяемые соотношениями вида: хп+* = aoxn+fc_H a*_ixn. Какал связь существует между этими последовательностями и матрицей Фробени- уса /а0 а\ ... а*_2 a*_i\ 1 0 ... 0 0 А= 0 1 0 0 \ 0 0 1 0 / Указание: найти базис пространства этих последовательностей. 15. Дихотомия по Горнеру Классический алгоритм дихотомического возведения в степень основан на том факте, что если п = п*2* + п*_12*-1 -| \-n\21 + по2°,
104 I Ллгоритмика и программирование на языке Ада то хп = хПк2 xnk~l2 .. . xni2 хп°2 ; алгоритм действует, вычисляя х2' и перемножая те из них, которые соответствуют ненулевым цифрам щ. Существует другой способ использования разложения п по основанию 2, который состоит в применении для вычисления п метода Горне- ра, как для многочлена, и использовании этого разложения для вычисления хп. Например, для вычисления х11 традиционным дихотомическим способом, берут п=1х8 + 0х4+1х2+1х1и вычисляют х, х2, х3, х4, х8, х11 возведением в квадрат и перемножением, тогда как при дихотомии «по Горнеру» записывают п = (((1) х 2 + 0) х 2 + 1) х2+1и вычисляют х, х2, х4, х5,х10, х11 возведением в квадрат и перемножением. Упражнение посвящено созданию этого алгоритма возведения в степень «по Горнеру». a. Рассмотрим многочлен Р = J2i=oai^% и обозначим Pi = J2j=iajX^~%- Каковы Pq и Р/с? Каково соотношение между Р{ и P»-i, определяющее традиционный метод Горнера, используемый для вычисления многочлена в некоторой точке? Вывести отсюда алгоритм вычисления многочлена Р в некоторой точке и указать число умножений и сложений, осуществляемых алгоритмом. b. Рассматривая запись величины п по основанию 2 как вычисление некоторого многочлена Р в точке 2, вывести отсюда алгоритм вычисления хп, точно следуя процессу вычисления «по Горнеру» этого многочлена. Для этого следует предполагать, что известны цифры числа п по основанию 2. Полученный алгоритм не должен быть, очевидно, рекурсивным. c. Как можно действовать в предыдущем алгоритме, не зная бинарного разложения п, но зная, что 2к ^ п < 2*+1 (тут есть тонкость!). d. Оценить сложность этого алгоритма количеством умножений, предполагая затраты на одно умножение постоянными. 16. Вычисление чисел Фибоначчи а. Написать эффективный алгоритм вычисления чисел Фибоначчи. Напомним, что числа Фибоначчи определяются последовательностью F0 = 0, Fi = 1 и Fn+2 = Fn+1 + Fn.
Упражнения 105 b. Используя соотношения между последовательностью Фибоначчи (Fn)n^o и числом золотого сечения ф или матрицей ( ), рассмотренные в упражнении 12, написать эффективный алгоритм вычисления n-го числа Фибоначчи. c. Прочитав решение предыдущего пункта и используя упражнение 15, придумать другой алгоритм вычисления Fn, основанный на тех же соотношениях. Является ли он более эффективным, чем предыдущий? 17. е-лексикографический порядок и знакопеременный лексикографический порядок Для заданного отношения порядка ^ условимся использовать следующие обозначения: def _ def а ^ b = а ^ 6 и а ^ 1 b = 6 ^ а. Пусть Е и F — два упорядоченных множества и б — отображение Е в множество {—1,1}. Рассматривается отношение порядка, определенное на Е х F посредством (х, у) $: (х', у') <=?=>► х < х' или х = х' и у ^с(*) у'. a. Проверить, что это отношение — действительно порядок; оно называется с-лексикографическим порядком. Что можно сказать, если отношения порядка, заданные на Е и F, суть отношения линейного порядка? Каков порядок, получаем на Ex F, если функция с тождественно равна 1? b. Для х G Е} х х F есть подмножество множества Е х F, которое можно рассматривать как «вертикальную плоскость». Сравнить порядок в F и порядок на х х F (индуцированный на х х F порядком на ExF). c. Каждому конечному линейно упорядоченному множеству Е, Е = {хо < х\ < Х2 <•}, по определению поставим в соответствие функцию б, заданную как е(х{) = (—1)' и называемую сигнатурой Е. Для данных двух конечных линейно упорядоченных множеств знакочередующимся лексикографическим порядком называется е-лексикографический порядок на Е х F, где с есть сигнатура Е. Каков первый элемент в Е х F? Последний? Написать функцию следования в Е х F. Выразить сигнатуру ExF как функцию сигнатур Е и F.
106 I Алгоритмика и программирование на языке Адо d. Пусть JE?i, jE,2, ..., Еп — п конечных линейно упорядоченных множеств. Объяснить, как наделить Е\ х JE72 х ... х Еп структурой знакочередующегося лексикографического порядка. В качестве примера продемонстрируйте описание [0,2] х [0,3] х [0,5] в порядке возрастания. e. Написать алгоритм вычисления последующего элемента для элемента из Ei х jE,2 x ... х Еп- 18. Перебор делителей целого числа Оценить, используя лексикографический порядок, как перебрать все делители целого числа, чье разложение на простые множители извест- но:р?'|£а. "Р?*. 19. Код Грея a. Для данного целого п рассматриваются все последовательности из п двоичных разрядов; показать, что можно перебрать эти 2П цепочек так, что между двумя последовательными цепочками различие будет состоять в одном двоичном разряде; это свойство также является верным для последней цепочки и первой. Такой перебор называется кодом Грея. b. Написать программу, основанную на рекурсивном алгоритме, который выводит на экран все слова кода Грея из п двоичных разрядов. c. Написать итеративный алгоритм, позволяющий реализовать код Грея для данного п. 20. Изменение слов в обратном коде Грея В этом упражнении мы интересуемся не столько словами кода Грея, сколько модификациями, которые позволяют перейти от одного слова к следующему. Коды Грея, которые нас интересуют, суть обратные коды, определенные рекурсивным способом, как в первом примере ответа на вопрос (а) упражнения 19. Если выписать все слова одного из этих кодов и разделить полученный список на две последовательности одинаковой длины, то полученные последовательности представят почти зеркальное отражение друг друга. Напри- Алгоритм 3. Код Грея мер, рассмотрим код Грея порядка 3: 000, 100, ПО, 010, 011, 111, 101, 001 и разделим его на 2 последовательности из 4-х слов; если убрать while Stack(l) ^ k loop t i— Stack(l)\ output t; Stack(l) <— 1; Stack(t) i— Stack(t+l)\ Stack(t+1) <— *+l; end loop;
^Упражнения 107 г ' Последний знак каждого слова, первая последовательность станет зеркальным отражением второй; это можно выразить более формально, ^говоря, что в обратном коде Грея длины п i-oe слово отличается от f(2n - i)-ro только последним знаком. Обозначим через U номер знака, который меняется при переходе от г-то слова кода к (i + 1)-му. Вот, например, полученная последовательность Тз = (t,-)o<i<23 Для обратного кода Грея из 3 знаков: 1(1,2,1,3,1,2,1). \ а. Показать, что последовательности Тп рекурсивно определяются fc помощью равенства Tn+i = Тп • (п + 1) • Тп, где операция • означает конкатенацию последовательностей. Построить рекурсивный алгоритм Получения всех слов какого-либо обратного кода Грея. Ь. Пусть Stack — таблица, индексированная от 1 до к +1, начиная с Stack(i) = г для 1 ^ г ^ к и Stack (к +1) = х ^ к +1. Показать, что алгоритм 3 порождает последовательность 7* и завершает работу, оставляя таблицу Stack в следующем состоянии: Stack(l) = x и Stack(i) = i для Исходя из этих результатов построить пакет получения обратного кода Грея, позволяющий простым образом вычислять последователя дакого-либо слова этого кода. 21. Вычисление перманента матрицы Перманент квадратной матрицы А порядка п х п, обозначаемый per Л, определяется формулой, аналогичной формуле для определителя: ретА= ^2 ai<7(i)a2<7(2)---<W(n), (4) где Sn обозначает группу всех перестановок интервала [1, п]. Это определение перманента было введено Коши (в его мемуаре об определителях) и Бине и применяется, в частности, в некоторых задачах комбинаторики (по поводу деталей читатель может проконсультироваться в работе Минка [130]). В этом упражнении нас интересует вычисление перманента. а. Доказать формулу Райзера: (-1)"регЛ = £ (-1)£1+-+£" П £ ei°« = - £ (-ч1*1 П 1> Ec[ltn] l^i^njeE
108 I А лг о ритмика и программирование на языке Аде Ъ. Используя перебор кода Грея, показать, что формула Райзера позволяет вычислить перманент с помощью (2П —1)(п—1) перемножений и (2П — 2)(п + 1) сложений. Сравнить эту сложность со сложностью, даваемой прямой формулой 4. 22. Перманент матрицы (продолжение) a. Доказать для квадратной матрицы А порядка п х п следующую формулу: 2п_1регА= ^2 wi.-.Wn-i П (flin+wiaii + '-' + Wn-iain-i). ы€{-1,1}Л"1 1^п b. Предполагается, что 2 обратимо в базовом кольце; используя предыдущую формулу и код Грея с п — 1 знаками, написать алгоритм вычисления перманента и оценить его сложность. c. Тот же вопрос, но на этот раз в предположении, что кольцо имеет характеристику, отличную от 2. 23. Массив инверсий перестановки a. Какую структуру данных можно использовать, чтобы представить отображение интервала [1,п] на себя (т.е. элементы множества Sn)? b. Каким образом можно убедиться, что при выбранной в вопросе а структуре данных такое отображение является перестановкой (т.е. биекцией)? Написать алгоритм, который осуществляет эту проверку. Указать временную и пространственную сложность этого алгоритма. Пусть а — перестановка интервала [1, п]. Если р Е [1, п], то числом его инверсий в а называется ар — число величин q} удовлетворяющих условиям: q < p и ct~1(q) > a_1(p). Аналогичное определение состоит в том, чтобы сказать: ар есть число величин, меньших, чем р, и расположенных правее (или после) величины р в массиве, представляющем биекцию а. Массив инверсий перестановки а является функцией, которая всякому р из интервала [1, п] ставит в соответствие его число инверсий в а (это массив значений ар). c. В качестве примера дать таблицы инверсий следующих перестановок: /12 3 4 5 6 7^ /1234567^ \1 2 3 4 5 6 7J} \7 6 5 4 3 2 l)}
^Упражнения 109 /l 2345678 9\ \S 2 9 4 3 7 6 5 \)' И обратно, дать перестановки, таблицы инверсий которых следующие: (0113246), (011334675). d. Показать, что массив инверсий а некоторой перестановки а удовлетворяет условиям: 0 ^ а* < к для к = 1,2,...,п. Каков массив инверсий единственной возрастающей перестановки интервала [1, п]? Тот же вопрос для единственной убывающей перестановки. e. Написать алгоритм, который некоторой биекции а интервала [1,п] ставит в соответствие ее массив инверсий а. f. Пусть дана последовательность а целых чисел п, удовлетворяющих условиям: 0 ^ а* < к для к = 1,2,..., п; показать, что существует одна и только одна перестановка <т интервала [1, п], таблица инверсий которой есть а. Ответ на этот вопрос является не только свойством существования, но и алгоритмом вычисления, позволяющим получить а, исходя из ее таблицы инверсий. Дать элементы обоснования этого алгоритма. Проверить алгоритм на следующих примерах таблиц инверсий: (0,0,2,1,3,4,6), (0,1,0,3,4,2,1), (0,0,0,2,4,0,5), (0,0,0,0,0,0,0) и (0,1,2,3,4,5,6). 24. Перебор перестановок транспозициями (г, г + 1) a. Показать, что можно расположить перестановки интервала [1, п] в последовательность <т\у <Т2>..., <тп\ такую, что перестановка o-t+i получается из перестановки cr,- транспозицией образов двух последователь- вых целых чисел. Это упорядочение приводит также к тому, что первая из этих перестановок получается из последней применением в точно- Л'и того же правила — <т\ есть результат композиции транспозиции (i, i+ 1) и перестановки <тп\. b. Рассмотрим множество Е таблиц инверсий интервала [1, п], которое наделяется знакочередующимся лексикографическим порядком. Пусть а,&Е#иа,/? — соответствующие перестановки интервала [1, п]; показать, что если 6 является последующим элементом для ав£, го перестановка /? получается из перестановки а транспозицией двух последовательных элементов.
по I Алгоритмика и программирование на языке Ада с. Вывести из предыдущего вопроса алгоритм, реализующий вопрос а: этот алгоритм должен быть способен по некоторой данной перестановке вычислить транспозицию, которую необходимо совершить, чтобы получить следующую перестановку. 25. Принцип включения-исключения или формула решета Это упражнение посвящено формуле перечисления, которая обобщает формулу для мощности объединения двух множеств: \А U В\ = \А\ + \В\ — \АГ\В\. Всюду в упражнении X обозначает конечное множество, a (Xi)i£j — семейство подмножеств X, индексированное конечным множеством индексов /; напомним, что |Ji€0 Х{ = 9и П$е0 %i = X. Если У С X, то через У обозначается дополнение У в X и через |У| — число элементов У. a. Доказать формулы: |(JX,|= J2 (-1)И+1|П*| и ДвойственнУю |П*|= £(-1)и+1|1И- Отсюда вывести формулу Сильвестра (называемую также формулой решета): In^B-D'IrH; • €/ JCI i€J термин «решето» происходит из того факта, что для перечисления множества элементов, которые не принадлежат ни одному из Х{} достаточно перечислить те, которые принадлежат X,, затем те, которые принадлежат Х{ C\Xj, и т.д. b. Доказать аналогичные формулы, когда кардинальная функция V(X) -t N заменяется весовой функцией р со значениями в некоторой абелевой группе, эта функция р определена на X и продолжена на множество V(X) подмножеств X в соответствии с равенством: р(П = Еу€ур(у)- c. Использовать формулу Сильвестра для доказательства, что число <гп перестановок из п элементов без фиксированной точки дается формулой: '—,(,-п+я-я+-+«-""а[)-.
Упражнения 111 d. Для nEN* обозначим через <р(п) число целых чисел из интервала [1,п], взаимно простых с п: (р(п) называется функцией Эйлера и будет изучена более полно в главе IV; здесь предлагается метод вычисления <р(п)у использующий формулу решета. Если р*1 ...р£* — разложение на простые множители числа п, доказать, что: rt-)-.(l-i)...(l-i;). e. Показать, что формула Райзера для вычисления перманента (см. упражнение 21) выводится из формулы решета. 26. Произведение многочленов, заданных массивами Условимся представлять многочлены массивами, индексированными, начиная с 0, в которых элемент с индексом г означает коэффициент одночлена степени г: type Polynome is array (Natural range <>) of Ring-Element; a. Исходя из умножения и сложения элементов базового кольца, реализовать функцию умножения двух таких многочленов. b. Предполагая, что умножение и сложение элементов базового кольца требует постоянного времени счета (какими бы ни были комбинируемые элементы), дать достаточно точную оценку времени перемножения двух многочленов в зависимости от их степеней. 27. Возведение в степень многочленов, заданных массивами a. С предположениями предыдущего упражнения — время умножения и сложения постоянно в базовом кольце — оценить сложность алгоритма возведения в степень через последовательные перемножения. b. Сохраняя те же предположения, определить время вычисления Рп через алгоритм дихотомического возведения в степень: сначала, если п является степенью 2, п = 2', затем, если п имеет вид 2' — 1. Какой Ыожно сделать вывод? 28. Небольшие оптимизации для произведений многочленов В принципе вычисление произведения двух многочленов степеней п И m соответственно требует (n+l)(m+l) элементарных перемножений. а. Пользуясь соображением симметрии, написать алгоритм, позволяющий возвести многочлен в квадрат, осуществляя приблизительно половину элементарных перемножений, которые кажутся необходимыми.
112 I Алгоритмика и программирование на языке Ада Ъ. Найти способ, позволяющий умножать два многочлена первой степени с помощью 3 элементарных перемножений вместо 4 (конечно, при этом число элементарных сложений возрастает). Рекурсивно применить этот способ для получения эффективного алгоритма перемножения двух многочленов, чья степень имеет вид 21 — 1. Выразить сложность этого алгоритма через число элементарных умножений и сложений. 29. Высота произведения двух многочленов Цель этого упражнения — установить некоторые соотношения между высотой (числом ненулевых одночленов) произведения двух многочленов и высотой исходных многочленов. Запись JP означает высоту многочлена. a. Если даны два многочлена Р и Q с высотой р и q соответственно, какова максимальная высота произведения Р на Q? Существуют ли многочлены, позволяющие достичь этой высоты? Ответ, полученный на этот вопрос, не удовлетворителен: действительно, оба многочлена, которые позволяют достичь теоретической границы высоты, очень специфичны, и мы вправе спросить, не является ли эта граница исключением и не является ли высота произведения двух многочленов в среднем гораздо более скромной. Последующие вопросы показывают, что даже если ограничиться степенями одного и того же многочлена, высота результата может расти очень быстро в зависимости от показателя. b. Пусть Р — многочлен высоты rf; показать, что JPn ^ (d+£-1)- c. Рассмотрим многочлен Р = Yli=i a,-^Fl+in, где Fj означает j-тое число Фибоначчи. Показать, что с этим многочленом граница вопроса Ъ достигается. 30. Представление многочленов списками Когда нужно обратиться к разреженным многочленам (т.е. имеющим много нулевых коэффициентов) или же к многочленам, высоту которых трудно ограничить, их обычно представляют не в виде массивов, а, скорее, в форме динамических структур типа списка. Алгоритмы, действующие с многочленами, представленными этим способом, очень специфичны и требуют тщательного изучения, если мы не хотим удесятерить их сложность. Чтобы упростить терминологию, ниже всюду будем называть несобственно разреженным многочленом всякий
Упражнения 113 многочлен, представление которого является цепным списком, независимо от того, действительно ли этот многочлен разрежен или нет (в целом не меняя представления многочлена по ходу вычислений, даже если окажется, что оно не самое оптимальное). Описать на языке Ада структуру данных, допускающих представление разреженных многочленов списками. Какие исходные данные априори необходимы в списках, чтобы выполнять действия над этими многочленами? Ввести эти исходные данные и обсудить выгоды и неудобства выбранных структур. 31. Сложение многочленов, представленных списками Написать алгоритм сложения двух разреженных многочленов, используя только исходные данные, описанные в предыдущем упражнении. Оценить сложность этого алгоритма. 32. Умножение многочленов, представленных списками Написать алгоритм умножения двух многочленов, представленных списками. Рассмотреть для этого сложность различных методов в зависимости от сложности алгоритма сложения, введенного в упражнении 31. 33. Действия с формальными рядами a. Принцип вычисления квадрата многочлена, показанный в упражнении 28, может также применяться к вычислению квадрата формального ряда. В соответствии с этим принципом написать алгоритм, который допускает на входе последовательность коэффициентов исходного формального ряда и который вычисляет по мере этого чтения коэффициенты квадрата этого же ряда. Можно заметить, что этот способ вычисления (волной) является фундаментальным для тех, кто хочет действовать с формальными рядами, т.е. по сути, с бесконечными объектами. b. Рассмотрим формальный ряд Л = ^а,^, п-ую степень которого хотим вычислить. Дифференцируя Лп} найти формулу, связывающую А и В = Лп. Вывести из нее алгоритм, позволяющий вычислить коэффициент одночлена степени г из 5, зная г первых коэффициентов ряда Л и г — 1 первых коэффициентов В = Лп. c. Применить оба предыдущих алгоритма к случаю многочленов. Какие улучшения это может принести? Какую получаем сложность? 8-1017
114 I А лг о ритмика и программирование на языке Ада 34. Определение нулей многочлена по модулю ра Целью этого упражнения является разработка алгоритма, позволяющего вычислить для простого числа р нули многочлена в Z/pnZ} если они известны в Ъ(рЪ. a. Этот вопрос слегка предвосхищает главу II, но разработанный алгоритм необходим для решения следующих вопросов. Указать алгоритм решения уравнения ах = 6 по модулю п в общем случае. b. Доказать, что произведение п целых последовательных чисел является кратным п\. c. Показать, что если а и t — целые числа, Р — многочлен с целыми коэффициентами и а Е N*, то Р(а + tpa) = Р(а) + tpaP'(a) (mod pa+1). Отсюда вывести, что если а есть корень Р по модулю ра, то Р(а + tpa) = 0 (modpa+1) тогда и только тогда, когда P(a)/pQ + tPf(a) = 0 (modp). Построить алгоритм, который по известным корням Р по модулю ра определяет их по модулю pa+1. d. Пусть а является нулем Р по модулю р таким, что Р'(а) £ 0 (modp). Вывести из предыдущего вопроса, что существует один и только один нуль Р по модулю р\ который был бы сравним с а по модулю р%. Если а,- обозначает этот нуль, показать, что a,+i = a, — Р(щ)Р,(а)~1 (mod p,+1), формулу, в которой Р'(а)-1 обозначает обратный к многочлену Р(а) по модулю р. e. Можно усилить свойство, доказанное в Ъ, и показать, что Р(а + tpa) = Р(а) + tpaP'(a) (mod p2a). С учетом этого свойства, каким становится результат, заявленный по поводу определения корней? Дать новый алгоритм, способный вычислять корни по модулю р2п многочлена, зная его корни по модулю рп. f. Какой синтез двух алгоритмов может быть сделан? 35. Циклическая перестановка элементов массива В этом упражнении п представляет собой целое, строго положительное число, которое будет предполагаться заранее определенным. a. Вспомнить алгоритм, который по заданному массиву, индексированному целыми числами от 0 до п — 1, осуществляет круговую перестановку элементов массива по одному шагу вправо (т.е. элемент с индексом 0 оказывается в ячейке 1, элемент с индексом 1 в ячейке 2... и элемент с индексом п — 1 в ячейке 0). b. Рассматривается аддитивная группа G = Z/nZ целых по модулю п и a — элемент из G. Каков порядок подгруппы Я группы G, порожденной элементом а? Ответ зависит от п и от а.
Упражнения 115 Показать, что целый полуоткрытый интервал [0, НОД(п,а)[ является системой представителей G/H. Отсюда вывести, что если х и у — два различных элемента этого последнего интервала, то множества {х + ка | к G Z} и {у + ка \ к Е Z} не пересекаются. c. Вывести отсюда алгоритм, обобщающий алгоритм вопроса а следующим образом: он осуществляет циклическую перестановку таблицы на р шагов вправо, где р — целое число, заданное в алгоритме. Очевидно, требуемое решение не состоит в применении р раз алгоритма из вопроса а. Сколько присваиваний элементов массива осуществляется этим алгоритмом? Сравнить это число с числом присваиваний, которое получилось бы при повторении р раз алгоритма из вопроса а. d. Написать алгоритм, который в массиве меняет местами две группы членов, расположенных соответственно в начале массива и его конце и ограниченных индексом к. e. Написать Ада-программу, реализуя алгоритм вопроса с и проводя (в случае необходимости) все этапы счета. Программа должна быть в высшей степени модульной (разделить чтение параметров, фиксирование промежуточных результатов и процедуру циклической перестановки). Можно будет протестировать эту программу, используя массивы целых чисел, автоматически заполненных целыми числами от 0 до п — 1; можно предусмотреть отдельную процедуру для такой инициализации. 36. Элементарные операции в арифметике повышенной точности Располагая фиксированным раз и навсегда основанием для вычислений, которое обозначается 6 (например, 6 = 2 или 6 = 10, или же степенью одного из этих чисел), рассмотрим положительные числа и, заданные их представлением по основанию 6: и = (umum_i... щи0)ь = итЬт + um-ibm-1 + • • • -|- щЬ + и0. Для всех искомых алгоритмов имеем в своем распоряжении только элементарные арифметические операции над цифрами по основанию 6. a. Написать алгоритм, позволяющий складывать два целых и = (ит ... г£0)б и v = {vm ... "о)б- b. Написать алгоритм, позволяющий вычислить и — v, если и предполагается большим или равным v. 8*
116 I Алгоритмика и программирование на языке Ада Если больше не предполагать, что и ^ v, модифицировать алгоритм таким образом, чтобы он мог сразу вычислять (и — v) mod 6m+1 и реализовывать проверку (и < v). c. Написать алгоритм, позволяющий умножать число и = (ит ... щ)ь веса ^ га на цифру v, т.е. v < 6, имея результатом число и; = (u>m+i ... и>0)б веса ^ т + 1. d. Написать алгоритм, позволяющий вычислять остаток и частное от деления числа и = (ит ... щ)ь веса ^ т на цифру v. 37. Деление в арифметике повышенной точности Показать, что деление каких либо двух чисел всегда сводится обычным делением вручную к следующей общей ситуации: • делимое имеет цифру большую, чем делитель, • отношение делимого к делителю является цифрой, т.е. строго меньше, чем основание. Более строго, зададимся двумя числами и = (ип .. .ихщ)ь1 v = (vm .. .viVo)b и предположим, что умеем вычислять их частное [u/v\, если они удовлетворяют следующим условиям: и = {ит+1ит...и1и0)ьУ v = (vm...viv0)b, u/v<b. (5) (Это означает, что [u/v\ есть цифра). Написать алгоритм, позволяющий определять цифры по основанию 6 частного q = [u/v\ и остатка г = и mod v при делении и на v. 38. Вычисление частного методом проб и ошибок Чтобы закончить разработку алгоритма деления каких-либо двух чисел, остается только установить способ деления двух чисел u, v, удовлетворяющих условиям (5) упражнения 37. Идея этого метода (см. Кнут [99]) состоит в действии с помощью метода проб и ошибок: используя критерии, изучаемые ниже, определяют кандидата в частные q ^ q = [u/v\, затем вычисляют и — qv\ эта величина должна удовлетворять условию: и — qv < v. Если это не так, меняют q (пробуя q—1, затем q—2,...). Теперь вопросы: как определить кандидата в частное наиболее экономным возможным способом и как его менять? Для этого примененный метод использует две наибольшие цифры чисел и и v.
Упражнения 117 a. Рассмотрим как первоначальную оценку величины q = [u/v\ частное от деления двух первых цифр числа и на первую цифру числа v, точнее: . /I Um+xb + Um I \ 9=mm(L—^—к-1)- (6) Как в этой формуле определить простым способом наименьшее из двух чисел? Показать, что q^q^q + (b + vm — l)/(vm + 1). Что нужно предполагать при реализации, использующей эту оценку? b. В этом вопросе предполагается, что v имеет более одной цифры, т.е. m ^ 1. Для некоторого данного целого числа q ^ 0 положим г = Um+ib + um- qvm} что можно рассматривать как остаток от деления (^т+1^т)б на vm. Показать, что (») ?Чп-1 > 6г + um_i =» q^q-1, (ii) qvm-i ^ 6f + г/т_! =» g ^ g - 1. Вывести из этого и предыдущего вопросов быстрый корректирующий тест, дающий оценку q величины q, удовлетворяющую соотношению q = q или же q = q — 1; будем говорить тогда о скорректированной оценке. Какова выгода от этого теста по сравнению с тестом и — qv < vl Дать примеры, в которых скорректированная оценка отлична от точного частного. c. Написать алгоритм деления и на vy используя оценку из вопроса а и быстрый тест корректировки из вопроса Ъ. 39. Деление: операция нормализации Сохраняем обозначения упражнений 37 и 38; в вопросах а и Ъ располагаем двумя числами u, vy удовлетворяющими предположениям (5). a. Вывести из упражнения 38, вопрос а, что предположение vm ^ [Ь/2\ — 1 влечет за собой 0 ^ q — q ^ 2. b. Предположим, что v имеет более одной цифры (га ^ 1), vm ^ [6/2J и что скорректированная оценка q отлична от q = \u/v\. Показать, что остаток г = и — qv от деления и на v удовлетворяет условию r/v > (1 — 2/6) (можно интерпретировать этот результат, говоря, что вероятность для q быть отличным от q меньше 2/6). c. Теперь рассмотрим два произвольных целых и = (ип .. .щ)ь и v = (vm ... vo)b> Доказать, что если положить d = [b/(vm + 1)J, и' = du, v' = dv, то v'm ^ [6/2J. Какова связь между делением и на v и делением и' на v'l Каков вес и' и v'l Написать общий алгоритм деления и на v.
118 I Алгоритмика и программирование на языке Ада 40. Самовоспроизводящаяся программа Во всяком достаточно мощном языке программирования (фактически, который имеет мощность машины Тьюринга) возможно написать программу, единственной целью которой было бы воспроизведение своего текста. Написать такую программу на языке Ада. Указание: прочитать главу о самовоспроизведении у Хофштадтера [88] или статью Томсона [170].
Решения упражнений 1. Вычисление целого квадратного корня Подлинная трудность этого упражнения кроется в возможном смешении целого частного от евклидова деления двух целых чисел и рационального числа, определяемого делением этих чисел: а/Ь = \а/Ь\ + (a mod Ь)/Ь. Результат упражнения состоит в том, что последовательность (ап) всегда дает квадратный корень целого числа а, а последующее исследование имеет целью показать, каковы условия сходимости этой последовательности. а. Целый квадратный корень из а есть целое х такое, что х2 ^ а < (х + I)2. Учитывая неравенство [у/2J ^ у/2 — 1/2, справедливое для целого у, можно написать: I х + [а/х\ I а? -I- [а/х\ 1 х + а/х — 1 1 _ х + а/х [ 2 J ^ 2 2 > 2 2 " 2 ' и отсюда выводится доказываемый результат. Конечно, начальная форма более эффективна для вычисления. с. Функция F, соответствующая методу Ньютона, является строго возрастающей в интервале [у/а, +оо[, удовлетворяет условию х > F(x) на открытом интервале и F(y/a) = у/а. Предполагаем впредь, что число а отлично от 0 и 1. Если это не так, легко видеть, что последовательность (ап) постоянна и тогда ее сходимость очевидна. Исследование, проведенное с помощью программ, показывает, что последовательность (ап) является строго убывающей, поскольку к квадратному корню приближаемся сверху. Если предположить а\ > а, имеем <*п > 1>/5|> что влечет ап > F(an) ^ l^(an)J = an+i. Последовательность целых положительных чисел (an) является, следовательно, строго убывающей, пока а\ > а; но это не может длиться бесконечно: существует целое р такое, что ар_х > а и а2 ^ а. Тогда имеем ap+i ^ ар — свойство, которое мы будем использовать для построения одного из алгоритмов. Упражнение показывает, и это легко можно доказать, что последовательность (an) является постоянной или периодической, начиная с номера р: интуитивно ар есть искомый квадратный корень.
120 I Алгоритмика и программирование на языке Ада d. Покажем, что если а„_1 > а, то (ап + I)2 > а (свойство, которое, будучи примененным к п = р, докажет, что ар является целым квадратным корнем из а). Имеем ап = [F(an_i)J > F(an_i) — 1 и, следовательно, ап + 1 ^ F(an_i). Но по предположению an_i > у/а, и, значит, F(an_i) > >/a, поскольку функция F строго возрастающая. х <— х0; щ £# while х х х > a loop ««-[*l$fcLj; end loop; return x; Вычисление целого квадратного корня Ранее было установлено, что aj* ^ a < (ap + I)2. Поэтому получаем: последовательность (an) обладает строго убывающим начальным сегментом, все члены которого, кроме последнего (с индексом р), строго больше а; этот последний член является целым квадратным корнем из а. Это приводит нас к указанным выше двум алгоритмам. Выбор первоначальной величины последовательности совершенно произвольный. Во втором алгоритме проверка завершения модифицирована, чтобы избежать в ней ненужных перемножений, правда ценой одного дополнительного деления. Сложность этого алгоритма, конечно, ниже сложности алгоритма в действительных числах, потому что убывание последовательности происходит быстрее (по причине целых частных). При выборе первоначального члена последовательности таким, что х% > a (если Xq = а, то последовательность постоянна), можно доказать следующие свойства: • последовательность (an) строго периодична тогда и только тогда, когда a + 1 является полным квадратом; в этом случае период имеет длину 2 и размах колебаний равен 1. • последовательность стационарна тогда и только тогда, когда a + 1 не является полным квадратом. е. Основной результат изучения этой новой последовательности состоит в том, что она стабилизируется на [у/а\ или на [у/а\ + 1. Замечание. Только что изученный алгоритм полностью пригоден для вычисления целого квадратного корня из действительного числа. х <— хо; loop exit when x' ^ x; x <— x'\ end loop; return x;
Решения упражнений 121 2. Целая часть функций a. Если х — целое число, результат тривиален. Предположим, что х £ N. Имеем [xj < х, что влечет /([xj) ^ /(х) и, следовательно, L/(lxJ)J ^ l/(x)J < f(x) (поскольку х — не целое, /(х) — и подавно). Предположим, что [/([xJ)J < [/(x)J, тогда имеем: l/(W)J<L/(W)J + Ul/(*)J </(*). и значит f([x\) «С [f([x\)\ + 1 ^ l/(*)J < /(*)• Тогда можно применить теорему о промежуточных значениях в интервале [[xj, x[ к величине [/(x)J, и найдем у в этом интервале, удовлетворяющий f(y) = [/(x)J. В соответствии с предположениями относительно / имеем у Е N и, следовательно, у = [xj. Снова обращаясь к последней строчке неравенств, получаем f(y) ^ f(y) + 1 ^ /(у), что дает нужное противоречие. Следовательно, [/([xJ)J = [/(x)J. b. Рассмотрев несколько примеров, быстро замечаем, что обе величины различаются, когда целая часть (меньшая) от х является квадратом. Действительно, легко показать, что [\/LxJ 1 Ф [Vх 1 тогДа и только тогда, когда т2 < х < т2 + 1 для целого т. Другими словами, можно утверждать, что |~\/lxJ 1 = [Vх 1 тогДа и только тогда, когда х является целым числом, или же \/[х\ не является целым. c. Положим у = [/(x)J. Имеем у ^ /(х) < у + 1, и поскольку / строго возрастает, она обратима и /_1(у) ^ х < f~x(y + 1). Итак, по предположению относительно /, /_1 принимает целые значения от целых, и значит, /_1(у) < х + 1 ^ /_1(у + 1), и применяя /, находим у < f(x + 1) ^ у + 1, что и доказывает требуемое соотношение. Замечание Свойство функций /, изученных в вопросах а и с, в действительности эквивалентно тому факту, что функция, обратная (когда она существует) к этим функциям, принимает целые значения для целых аргу- ментов. Например, это случай функций х •—У log10 х или х i—у у/х/2..., что доказывает в итоге, что такие функции весьма распространены. 3. Вычисление целого корня n-й степени Функция F строго возрастает на интервале [>/а, оо[ и удовлетворяет х > F(x) на открытом интервале, а также F( y/a) = y/a. Если я* > l>/aj, то х,- > tfa (так как х,- Е М) и значит, х,- > F(x,) ^
122 I А лг о ритмика и программирование на языке Ада [F(xi)\ = x,-+i. Следовательно, поскольку х,- > [-\/aJ, последовательность Х{ является строго убывающей. Тогда существует номер р ^ 1 такой, что хр ^ [>/aJ < Яр-ь Теперь покажем, что только предположение ж,- > [>/aJ влечет х|+1 + 1 > [^aj. Имеем х|+1 = [F(x,)J > F(x,)-1, т.е. х|+1 + 1 > F(x,). Но х,- > $/а и, значит, F(x,) > [у/а\ и x,+i + 1 > >/a, что и дает результат. Применяя его к г = р — 1, получим хр ^ [>/aJ < хр + 1; хр является, следовательно, целой частью искомого корня n-й степени. Нужно особо позаботиться о величине начального члена хо: он должен быть больше, чем [>/aJ и, конечно, можно выбрать xq = а (исключая случаи a = О или a = 1), но предпочтительнее из-за члена xj, участвующего в вычислении х\, взять его как можно меньшим. Можно, например, вычислить целое / такое, что 21 ^ а, потом взять Хо = 2Г'/П1 (что можно также представить в виде 2^/+n_1)/nJ, учитывая тот факт, что немногие машины располагают операцией нахождения верхней целой части). 4. Вычисление десятичных знаков числа Имеем А0 = 1, R0 = 1 и, конечно, Ak+\ = lOAk + a*+i; отсюда выводим, что: Д*+1 = 2.102/с+2-100^-20аЛ+1АЛ-а1+1 = 100Д*-(20а*+1Л* + а2+1). Так как Rk+i должно быть наименьшим положительным целым числом, удовлетворяющим данному ему определению, Я* может рассматриваться как остаток в смысле ^backward error analysis», т.е. как сознательно допущенная ошибка. А. Первоначальный алгоритм а «— 6; R «— 100Я; while R ^ 20аА + a2 loop а <— а + 1; end loop; Rir— Я-(20аЛ + а2); Л <— 10Л + а; В. Оптимизированный алгоритм 100Я; а «— 0; Я loop Ь := 20Л + 2а + 1; exit when R < 6; Я <_ я _ 6; а <—а + 1; end loop; Л <— ЮА + а; Алгоритм 4. Вычисление десятичных знаков
Решения упражнений 123 Объясняем: Rk не является ошибкой по отношению к \/2, но оно позволяет определить число, для которого Ак10~к является точным квадратным корнем; это число есть 2 — Л/Д0~2*. Как следствие, a*+i является наибольшей цифрой числа а, такой что lOORk — (20аAk + а2) положительно. Тогда получаем алгоритм 4-А, прямо используя эти результаты; этот алгоритм вычисляет a*+i, Ak+i и Л*+1, исходя из ак} Ak и Л*. Достаточно повторить к раз алгоритм, начиная с Л = 1 и й = 1, для вычисления к первых десятичных знаков у/2. Замечая, что сумма п первых нечетных чисел есть п2, можно легко оптимизировать алгоритм (алгоритм 4-В). Можно записать Юку/2 = Ак+есО<е<1 (неравенства строгие, потому что \/2 не имеет конечного десятичного разложения), что позволяет оценить Rk: Rk = 2 • 102* - А\ = 2 • 102* - (10*л/2 - е)2 = 2 • ЮкеуД - е2 = е(2Ак + е) < 2Ак + 1, следовательно, Rk — тоже неограниченное целое число. Предложенный алгоритм легко реализовать на языке формальных вычислений (который содержит неограниченные целые числа), но можно также и на более традиционном языке — операции над большими числами ограничиваются сложением, вычитанием, умножением на 10 (сдвиг на один десятичный знак) и умножением на 2. 5. Точный корень из целого числа a. Целое число п, разложенное в произведение простых: п = р"1 ... р?*, является к-тк степенью тогда и только тогда, когда к | а,- для 1 ^ i ^ 8 или когда к делит НОД чисел а,. Из этого выводим, что е(п) = НОД (а,) и что п является к-ik степенью тогда и только тогда, когда к | е(п). Отсюда удобно получить: е(пч) = qe(n), что позволяет вычислять е(пя), если известно е(п) (корень г — один и тот же для п ип*). b. Идея алгоритма 5 следующая: вычисляем п\ = у у/... \/п; поскольку результат — целый, это позволяет записать п = п\ 1, что дает e(n) = 2eie(ni). Продолжаем с п\у вычисляя пъ = у ^/... «$/пГ, что дает соотношение ni = nj'3, откуда e(n) = 2ei3eae(ri2), и подвергают пъ такому же преобразованию, \1 {/• • • ^2 и так далее.
124 I Алгоритмика и программирование на языке Ада Чтобы подтвердить конечность метода, нужно определить для целого г, когда е(г) = 1. Ясно, что е(г) = 1 тогда и только тогда, когда для всякого простого q tfr £ N; но если г < 29, всегда имеем tfr £ N. Следовательно, имеем е(г) = 1 тогда и только тогда, когда tfr £ N для всякого простого q ^ [log2 r\. е <— 1; г <— п; р <— 2 while p ^ [log2 r\ loop I <— О loop шШШШ \ г' <— ^ exit when r'p фг \ г <— г'; i <— 1 + 1 end loop е <— ер'; р <— NextJ>rime{p) end loop return (r, e) Алгоритм 5. Вычисление корня из целого числа В цикле этого алгоритма изменяются две величины: простое р возрастает и остаток г целого п убывает. При выходе из цикла имеем ге = п, и ни для какого простого q ^ [^°б2 rJ число г не является корнем q-й степени; как следствие, в соответствии с выводами предыдущего абзаца е(г) = 1. Все числа из интервала [0, 21009[ могут быть уменьшены этим алгоритмом с использованием только простых чисел, меньших 1000. Конечно, можно применить алгоритм к числам, расположенным вне этого интервала, но тогда получаемый с помощью алгоритма результат крайне ненадежен при отсутствии дополнительной информации по рассматриваемому числу. 6. Порождение простых чисел а. Для этого алгоритма используем таблицу целых чисел, которая содержит все уже вычисленные простые числа и которая возникает по мере вычислений. Что касается доказательства корректности этого алгоритма, то можно удовлетвориться рассмотрением того, что происходит в самом внутреннем цикле, который проверяет Candidate на простоту.
Решения упражнений 125 В этом тесте (алгоритм 6) просматривается последовательность уже вычисленных простых чисел и делается остановка, как только квадрат одного из них превосходит Candidate: действительно, в произведении двух нетривиальных множителей один из них меньше квадратного корня из этого числа (обычный критерий остановки решета Эратосфе- на). Если обнаруживается простое число, которое делит Candidate, то последний объявляется непростым, и цепочка циклов делает переход к проверке следующего нечетного числа. Зато, если Candidate преодолевает все простые числа, то он — простое число; в этом случае выходят из цикла Searching-ForMext-Prime, как только выполнено условие р? > Candidate в силу предыдущего замечания; найденное простое число помещается в таблицу. р\ <— 3; Candidate <— 3; for к in 2 .. п loop Searching-For-Next-Prime: loop Candidate <— Candidate + 2; t i— 1; loop exit Searching-For.Next-Prime when p? > Candidate; exit when Candidate mod pi = 0; i<—i + 1; end loop; end loop SearchingJ^or-Next-Prime; Pk <— Candidate; end loop; Алгоритм 6. Генерация простых чисел Несмотря на все аргументы здравого смысла, которые позволили провести неформальное доказательство этого алгоритма, это доказательство неполно. Действительно, условие остановки pf > Candidate имеет смысл, только если отныне и впредь в таблице имеется простое число, удовлетворяющее этому неравенству. Можно избежать этой проблемы, заменяя условие выхода из цикла Searching J'orMext-Prime на exit Searching-For-Next-Prime when г ^ к or else pf > Candidate В этом случае применяется чистый аргумент Эратосфена. Но в действительности эта модификация бесполезна, так как постулат Бертрана говорит нам, что такое р, уже вычислено. Почему? Ответ находится во втором вопросе, с другими оптимизациями, но здесь нужно немного поразмышлять...
126 I Алгоритмика и программирование на языке Ада Ь. Обратимся к переменной Ord, которая определяет номер наименьшего простого числа, квадрат которого превосходит Candidate и вторую переменную Square, которая имеет значение этого квадрата. Когда нужно менять эти переменные? Когда кандидат превосходит Squarel Это означает, что Candidate ^ Por^ a поскольку задействованные числа — нечетные, в действительности имеем равенство. Итак, непосредственным следствием постулата Бертрана является соотношение Pt+i < Р? (что попутно доказывает корректность алгоритма а). Следовательно, когда величина первого кандидата достигает Pord, имеем уже вычисленным pord + 1, и изменение переменных Square и Ord возможно. Кроме того, поскольку кандидат является квадратом простого числа, он — непростое число. Это приводит нас к модификации (алгоритм 7) метода из вопроса а. р\ <— 3; Candidate <— 3; Square i— 9; Ord i— 1; for k in 2 .. n loop SearchingJ'or-Next-Prime: loop Candidate <— Candidate + 2; if Candidate = Square then Ord <— Ord + 1; Square <— Роы\ Candidate i— Candidate + 2; end if; ii— 1; loop exit SearchingJror^Next-Prime when t > Ord; end loop; end loop SearchingJfor-Next-Prime; Pk i— Candidate; end loop; Алгоритм 7. Генерация простых чисел (оптимизация) Окончательный алгоритм — с несколькими дополнительными оптимизациями — был, кажется, представлен впервые Далом, Дейкстрой и Хоаром [58]; его можно найти также у Кнута [101] и Верса [182]. В заключение заметим, что для нас постулат Бертрана является теперь теоремой.
Решения упражнений 127 7. Правильный пятиугольник для всех (без Ферма и Гаусса) Зная, что 7Г 47Гл227Г.1л47Г.о7Г., — cos — = cos — = 2 cos — 1 = 8 cos — — 8 cos — + 1, 5 5 5 5 5 достаточно разложить на множители многочлен 8Х4 — 8Х2 + X + 1 (очевидными корнями которого являются —1 и 1/2). Единственное допустимое решение для cos ^ — это * у 5. Тогда построение проводится следующим способом (см. рис. 2): • построить окружность с центром О и радиусом 1, • построить диаметр АВУ радиус ОС перпендикулярно АВ и окружность радиусом 1/2 с центром в D — середине ОС, • прямая AD делит эту окружность в двух точках, из которых наиболее удаленная от А точка Е удовлетворяет условию: АЕ = ф (AD = у/Е/2 и DE= 1/2). Тогда достаточно постро- Рис. 2. Правильный пятиугольник ить на окружности радиуса 1 с центром О точку F такую, что AF = ф, и получаем прямоугольный треугольник, в котором угол (FAB) равен тг/5. Соответствующий центральный угол (FOB) равен 2тг/5 и позволяет построить правильный пятиугольник (Слейе-Мишо[48]). Существуют и другие решения, и вот одно из них, особенно простое: если z есть корень 5-й степени из единицы, соотношение z4 + z3 + z2 + z + 1 = 0 приводит к тригонометрическому уравнению 2 cos тр+2 cos ^£+1 = 0, которое просто решается, давая cos Ц- — v^"1. Сразу осуществимо построение. Если U — середина ОВ, строим точку 1У, расположенную на радиусе О А и удовлетворяющую равенству UW = UV = у/Ъ/2. Точка X, середина OW', есть ортогональная проекция точки У такой, что угол (AOY) равен 2 тг/5. 8. «Двоичное» деление нацело а. Вот евклидово деление а на 26: а = 26 х q + г, с 0 ^ г < 26. Если г < 6, то евклидово деление а на 6 получается сразу: а = 6 х 2q + r. Зато, если 6 ^ г < 26, деление таково: а = 6 х (2q + 1) + (г — 6). Yjd с[ /vL*=cr в и о X ~ W А ^чУу / Y
128 I Ллгоритмика и программирование на языке Ада Ъ. Предельный случай евклидова деления появляется, когда делитель больше делимого. Вот рекурсивный алгоритм вычисления частного и остатка, представленный в форме функции Divide: if 6 > a then return (0, а); else (Я> г) <— Divide (а, 26); if г < 6 then return (2g, г); else return (2q + 1, г — 6); end if; end if; d. Недостаток рекурсивного алгоритма следующий: в ходе счета второй параметр функции Divide, который удваивается при каждом вызове, может превзойти первоначальные величины переменных а и 6. Это означает, что хотя данные и результат деления поддаются кодированию, может случиться, что в какой-либо частной реализации величины приведут к переполнению. Например, когда применяют рекурсивный алгоритм к целым числам 31001 и 15, наблюдается ряд рекурсивных вызовов, последний из которых — Z>itrtde(31001,61440); если целый тип, который используют, записан и закодирован 16 битами, возникает переполнение, тогда как можно очень хорошо вычислить результат (2066,11), если остановить удвоение 6 перед последней итерацией. А. С переполнением k<— 0; if 6 > a then return (0, а); end if; while 6 ^ a/2 loop 6 <— 2 x 6; к <— к + 1; end loop; q i— 0; г <— a; for t in 1 .. к + 1 loop q i— 2xq; if г ^ 6 then q <— q + 1; r i— г — 6; end if; 6 <— 6/2; end loop; return (g, r); В. Без переполнения к «— 0; while b ^ a loop 6 <— 2 x 6; к <— к + 1; end loop; q <— 0; г i— a; for t in 1 .. к loop 6 i— 6/2; q i— 2 X q\ if г ^ 6 then q <— q + 1; г i— г - 6; end if; end loop; Алгоритм 8. Бинарные деления
Решения упражнений 129 Теперь уже можно — это пригодится в дальнейшем — написать итерационный алгоритм (8-А), который есть не что иное, как развитие предыдущего рекурсивного алгоритма (q и г образуют результат алгоритма: частное и остаток от деления). Этот алгоритм яснее выявляет поставленную задачу. е. Чтобы показать эквивалентность двух алгоритмов, можно начать с доказательства очень простого свойства: [а/2\ < 6 <=> а < 26. На выходе из цикла первого алгоритма имеем свойство 6/2 ^ а < 6 = Ьо2к с к > 0 — не забудем, что тело цикла используется, по крайней мере, один раз. Что касается второго алгоритма, если цикл использовался, по крайней мере, один раз, имеем свойство 6/2 ^ а/2 < 6 = 6о2* для к > 1 и b — четного. После выполнения последних присваиваний обнаруживаем то же свойство, что и для первого алгоритма. Если цикл не выполнен, это означает, что а/2 < 6о ^ а, и после исполнения последних команд получаем 6о = 6/2 ^ а < 6 = 26о. Последний алгоритм (8-В) получен, исходя из первой итерационной версии (8-А) извлечением из первого цикла итерации и ее слиянием с итерацией, взятой из второго цикла (для этого алгоритма, как и для предыдущего, результат — частное и остаток — представлен последними значениями переменных q и г). 9. Построение прямых линий методами DDA а. Если и и v не взаимно простые числа, отрезок [0, (u, v)] — не что иное, как повторение d = НОД(г/,^) сегментов, идентичных сегменту [Q,(u/d,v/d)]. Алгоритм у <— 0; d <— 0; Plot(0,0); for x in 1 .. и loop $(m *Шр);щ:£ ei'H* 4 4 < ч*. di—cf+2tr, ifd^u then y<—y + l;cf<—d-2u; end if; Plot(x}y); end loop; Рис. З. Построение прямой в первом октанте 9-1017 Построение
130 I Ллгоритмика и программирование на языке Ада Ь. Выбрать для у наилучшую целую аппроксимацию величины vx/u — это значит убедиться, что \vx/u — у\ ^ 1/2, или еще, что —и ^ 2(vx — иу) < и. Эта формула является в действительности инвариантом алгоритма. Поскольку нужная прямая имеет тангенс угла наклона меньше 1, есть только один зажигающийся пиксел на данной вертикали (т.е. х возрастает при каждой итерации). Этот алгоритм (рис. 3) избегает, следовательно, пересечений маленьких горизонтальных сегментов, что дает красивый результат, когда нужны тонкие линии; было бы совсем по-другому, если нужно «жирное» построение. Кроме того, если желаем построить этим способом прямую с наклоном, большим 1, нужен второй алгоритм, идентичный первому с точностью до перемены ролями х и у. Наконец, построение вертикальных, горизонтальных или диагональных линий может проводиться наивным способом, который будет всегда более быстрым, чем указанный. Алгоритм х <— 0; у <— 0; d <— v — u; loop Plot(x,y); d ss ${&+y) *f v ~ и с j£(gr|f)f ^ttf v< ifcJ>0then y<— y+l;d<— d-2u; else x i—x + l\d<—d + 2v; end if; exit when x = и and у = v; end loop; Plot(x,y); Рис. 4. Построение прямой в первой четверти с. Парадоксально, но этот алгоритм (рис. 4) — который может дать менее элегантные результаты, чем предыдущий, — оказывается немного более сложным для реализации. Действительно, нельзя больше предполагать, что координата х возрастает после включения точки; на самом деле, каждая координата является доминантой в полуквадранте, о котором рассуждаем. Если рассмотреть четыре точки квадрата, сразу замечаем, что невозможно требовать — если не разрешены диагональные перемещения — чтобы вертикальное расстояние правой точки было меньше 1/2. Если поддерживать включенную точку в полосе фигуры 1, это влечет, между прочим, что одно из расстояний справа, го- Построение
Решения упражнений 131 ризонтальное или вертикальное, может быть сохранено меньшим 1, это означает, что величина \vx — uy\ меньше, чем и или v. Сказать, что точка расположена в полосе, очень точно означает, что \2{vx — иу) | ^ и + v\ теперь покажем, что можно подтвердить это положение. Движение, осуществляемое на экране, будет определяться величиной 8(х,у) = 2(vx — иу), получаемой после этого движения. Возможны два (не исключительных) случая: увеличивают я, величина становится равной 6(х + 1, у) = 6(ху у) + 2vy и нужно убедиться, что она остается меньше и + v, т.е. что 6(х,у) ^ и — v. Аналогичным образом можно увеличить у, только если и — v ^ 6(х, у). Видим, что положение 6(х, у) по отношению к и — v определяет осуществляемые перемещения. Доказательство сходимости состоит в выявлении, что во время итераций х ^ и и у ^ v. Чтобы проверить это, зная, что х или у растут при каждой итерации, можно предположить, что x = uuy<v. В этих условиях оценим величину d: d ^ 6(uy v — l) + v — и = и + v > 0. Как следствие, очередная итерация увеличит у, и так будет до тех пор, пока у < v. Заметим, что по этому алгоритму построенные две вещественные прямые, симметричные относительно первой диагонали, не симметричны относительно этой же диагонали (тест, применяемый к d, не эквивалентен для х и у). 10. Построение окружности методами DDA a. Функция / убывает на интервале х Е [О, Я\/2/2], и ее производная здесь меньше 1. Как следствие, 0^/(я) — /(я+1) ^ 1, значит, учитывая это, можно ограничиться уменьшением у только на шаг, равный 1. b. Исходим из сделанного предположения, что у — 1 есть лучшее приближение f(x + 1) тогда и только тогда, когда у — 3/2 ^ f(x + 1) < у — 1/2, т.е. f(x + 1) < у — 1/2; второе неравенство вытекает из предположений по поводу f(x) и результата вопроса а. Следовательно, оцениваем на каждой итерации величину е(х,у) = 4у2 — 4Д2 — 4у + 4я2 -|- 8х + 5, и нетрудно доказать, что у — 1/2 > yjR? — (х + I)2 тогда и только тогда, когда е(х,у) > 0, и еще, поскольку оперируем целыми величинами, тогда и только тогда, когда d(x, у) = е(х, у) — 1 ^ 0. Кроме того, е(х + 1,2/) = е(х, у) + 8х + 12 и е(х + 1, у - 1) = е(ж, у) + 8(ж - у) + 20 и, конечно, е(0, R) = 4 - 4Д. 9*
132 I Алгоритмика и программирование на языке Ада Алгоритм у <— Я; х <— 0; з <— 1-Я; while x < у loop $ ж #($>#) Plot(x,y); if s ^ 0 then 5f-5 + 2(i-y) + 5; y<—y-i; else s <— s + 2x + 3; end if; x i— x + 1; end loop; if x = у then Plot(x, y); end if; Построе •jj/r яше Л = i = 14 ||^ Рис. 5. Построение окружности методом DDA Рассмотрим теперь более пристально последовательность величин е,- = rf(xi,y,) — 1. Имеем следующие рекуррентные определения: Яг + 1 = 3,--, яо = О, уо = Л, е0 = 4 - 4Д, если е* ^ 0, в противном случае, _ Г е,- + 8(х,- +1 - 2A+i) + 20, если е, ^ 0, +1 + 12 в противном случае. Значит, совершенно ясно, что эти соотношения могут упроститься (поскольку только последовательности (х,) и (у,) нас интересуют, и их определение зависит от знака (е,-)) следующим образом: Я| + 1 = Я хо = 0, уо = Л, so = 1 - Д, если Si ^ 0, в противном случае, 5/1+1 -{у, «Н: + 2(х1+1 - y,-+i) -|- 5, если с,- ^ 0, + 2х|+1 + 3 в противном случае. Это соотношения, используемые в алгоритме 5. Когда работа алгоритма заканчивается, х ^ у, и не обязательно зажигать точку (х, у). Действительно, если х > у, правила, которые применялись в верхнем октанте, больше недействительны (точка (х,у) — в нижнем октанте). Зато, если х = у, зажигать точку нужно.
Решения упражнений 133 с. Аргумент Брезенхама просто выражает тот факт, что если дана точка (я, у) дискретной окружности и \(х + I)2 + (у — I)2 — Д2| ^ ^ |(х + 1)2 + у2 - Д2|, то \у/(х + I)2 + (у - I)2-Я| ^ \у/(х + 1)2 + У2_ Д| (эта импликация верна также, если обратить знаки неравенств), и в этом случае будем брать (я + 1, 2/— 1) как ближайшую точку дискретной окружности; в противном случае ближайшей точкой будет (х + 1, у). Обозначим d(x,y) величину (положительную или отрицательную) х2 + у2 — R2. Ясно, что d(x + 1, у) > d(x + 1, у—1). Как следствие, знак суммы s(x, у) = d(x + 1, у) + d(x + 1, у — 1) указывает, какова лучшая (в смысле, определенном условием задачи) точка, аппроксимирующая окружность в этой окрестности: если s(x,y) ^ 0, то Р2 является этой точкой, в противном случае — это Pi. Из этого непосредственно вытекает алгоритм, и он соответствует эквивалентной версии алгоритма, построенного в вопросе Ъ: достаточно положить ^Бреэенхам = ^вопрос fell. Сложность возведения в степень Можно сразу заметить, что Р, есть степень я: Р,- = xai, кроме того, очевидно, что последовательность (a,)ai>o является почти цепочкой сложений для п: действительно, нет строгого возрастания а,, и цепь не обязательно начинается с 1; если исключить 1 из возможных значений у, и Zi, получили бы настоящую цепочку сложений. Как бы то ни было, легко видеть, что а\ ^ 2, а2 ^ 4, аз ^ 8 и т.д. Как следствие, at = п ^ 2*, а это доказывает, что t ^ log2 п. Это доказывает также, что невозможно сделать гораздо лучше, чем это делает дихотомический алгоритм возведения в степень, если разрешаются только перемножения; точнее, можно было бы получить улучшенные результаты с оптимизированными цепочками сложений, но от этого не изменится порядок величины сложности. 12. Последовательность Фибоначчи и золотое сечение а. Запишем равенства: F = F0 + FXX + F2X2 + F3X3 + F4X4 + • • • , XF= F0X + FXX2 + F2X3 + F3X4 + • • • , X2F= F0X2 + FXX3 + F2X4 + • • • , которые непосредственно (используя определение последовательности Фибоначчи) подтверждают, что F — XF — X2F = X. Формальный ряд
134 I Ллгоритмика и программирование на языке Ада 1 — X — Х2} будучи обратимым (так как его постоянный член — ненулевой), позволяет отсюда вывести, что F = х_х-х^' Остается только разложить эту последнюю рациональную дробь на простые слагаемые. Нулями многочлена X2 + Х — 1 являются — ф и — ф, и быстро получается разложение: -4> 1 ф_ 1 _ J_ / -1 1 \ ~V5X х + ф*^Дх х + ф " v^ \1-фх + i-Фх) ' с учетом того факта, что фф = —1. Еще раз беря разложения рядов, которые появляются в этом последнем выражении, выводим, что К = №-&)• b. фп + фп является общим членом ряда 1 1 2-Х 2F „ + =— = -* 77 =7~ = -ТГ - F. 1-фХ 1-фХ 1-Х-Х2 X Значит, i_x_x* ~ X является порождающим рядом последовательности (Fn+i), следовательно, фп + фп = 2Fn+i — Fn. с. фп есть общий член ряда 1 - 1-** =1_фК 1-фХ 1-Х-Х2 X Но фф = — 1, и тогда, умножая на ф равенство фп = F„+i— <£Fn, получаем 13. Соотношения в последовательности Фибоначчи а. Нетрудно установить, что характеристическим многочленом для А является X2 — X — 1 = (X — ф)(Х — ф). Матрица А тогда приводится к диагональному виду, и легко находим базис, образуемый собственными векторами (ф, 1) и (<£, 1). Следовательно, Ап_Л_(Ф Ф\(ФП ?\(1 -$\_(Fa+l Fn \ л ~ Vb\i 1Д0 *"А-1 ф)~\Рп Fn-ij- Конечно, простое рассмотрение первых величин Ап, вытекающих из рекуррентности, привело бы к тому же результату, но не будем отказывать себе в маленьком удовольствии (обратиться к упражнению 14 для более общей точки зрения).
Решения упражнений 135 Требуемые соотношения получаются соответственно вычислением определителя матрицы Лп и использованием равенства Ап+т = ЛпЛт. Эти соотношения обнаруживаются вновь в еще более общей форме в упражнениях главы II, относящимся к непрерывным дробям. Ь. Общий член произведения двух формальных рядов является сверткой п первых членов каждого ряда: J2i<n ai^n-i- Для задачи, которой мы занимаемся, имеем: порождающий ряд последовательности fn есть F2 (F — порождающий ряд последовательности Фибоначчи). F>=l-(—1- ? + —+—) 5\{1-фХ)* (1-фХ)(1-фХ) {1-фХ)у = I (Т,(п+1№хп - 2(E^n*n)(£^*n)+Dn + wnxn) = I (E(n+w+*n)*n -2 E(E ф{фп-*)хп) . Но мы знаем фп + фп (упражнение 12), и общий член второго ряда есть *П ф~~_*ф = ^n+i. Значит, ^^ „ 2nFn+1-(n + l)Fn или 2^ **#»-* = 1—г* — . 14. Линейные рекуррентные последовательности к-го порядка a. Действуем, выполняя преобразования над порождающими рядами. Пусть Т — порождающий ряд последовательности. Как для последовательности Фибоначчи, можно легко установить, что (1 — X — Х2)Т = хо + Х{х\ — хо). Следовательно, xq + X(xx -х0) F Т = 1-Х-Х2 = XoX ^Xl " Х°^ Значит, хп = x0Fn+i + (хх - x0)Fn = xxFn + x0Fn_i. b. Ясно, что множество рассмотренных последовательностей явля- гтся векторным пространством размерности fc, и существует изоморфизм между этим пространством и Кк: он ставит в соответствие ка-
136 I Ллгоритмика и программирование на языке Ада ждой последовательности ее к первых членов. Полным прообразом канонического базиса Кк является то, что называется фундаментальным базисом пространства последовательностей. Обозначим этот базис (х*-1,..., х°) (х° есть полный прообраз вектора (0,..., 0,1)). Матрица А, которая действует в Кк, соответствует при этом изоморфизме оператору сдвига последовательностей. Тогда столбцы матрицы А суть выборки (хгк,..., х\) из последовательностей х\ Это означает еще, что /Zn+*_1 хп+к-1 ••• Xn+*-l\ I т° т1 тк~1 лп I Хп+к-2 £п+к-2 *п+к-2 • * В случае, когда к = 2, фундаментальный базис пространства последовательностей образован последовательностью Фибоначчи и ее сдвигами. Тут же обнаруживается результат предыдущего вопроса и матричное равенство упражнения 13. 15. Дихотомия по Горнеру a. Конечно, Ро = Р и Р* = а*. Соотношение между Р, и P,_i, которое определяет метод Горнера, есть P,_i = ХР{ + a,_i. b. Если предположить, что п = J2 &t2*, то можно рассмотреть многочлен Р = Y1 Ь{ХХ и вычислить элементы xPi(2\ используя предыдущее рекуррентное соотношение. Это дает алгоритм: I R ♦— 1; for t in reverse О .. n loop Я <— Я2 х *\ Ешф^Ъ*»-**^1*-'1** ШИ»■ end loop; I return Я; Этот алгоритм может быть оптимизирован исключением ненужных перемножений следующим образом: I R ♦— 1; for t in reverse О .. n loop R<—R2\ if bi = 1 then R <— R x xbi\ end if; end loop; return R\
Решения упражнений 137 c. Если неизвестно двоичное разложение п, то ясно, что нужно будет тем или иным способом вычислить его более или менее неявно по ходу выполнения алгоритма. Если известно, что 2к ^ п < 2*+1, то это влечет, что двоичный разряд порядка к числа п равен 1, что позволяет запустить счет. Затем достаточно определить, принадлежит ли п — 2к интервалу [2*-1,2*[, чтобы узнать величину двоичного разряда порядка к — 1. Все это приводит к следующему алгоритму (который не касается случая п = 0): \ а<— 1; while а ^ п — a loop а <— 2а; end loop; R i— x\ m i— n — or; loop exit when a = 1; a<—a/2\R<—Я2; if m ^ a then R <— R x x\ m <— m — or; end if; end loop; | return R\ В этом алгоритме все начинается с определения а = 2к такого, что 2к ^ п < 2*+1 (только без того, чтобы результаты промежуточных вычислений превосходили п), затем продолжается вычисление хп. d. В этом случае, когда сложность одного перемножения постоянна (независимо от размеров сомножителей), устанавливаем, что имеется самое большее к итераций, каждая из которых содержит 1 или 2 умножения; следовательно, сложность оценивается сверху числом 21og2 п. В случае, когда сложность элементарного умножения не постоянна, результат совершенно другой. 16. Вычисление чисел Фибоначчи а. Несложно написать рекурсивный аглоритм, подобный следующему: I if п = 0 then return 0; elsif п = 1 then return 1; I else return Фибоначчи(п — 1) + Фибоначчи(п — 2); Число рекурсивных вызовов в действительности равно 2 Y!aZ\ ^i = 2(Fn+i — 1) (доказать этот результат), что дает экспоненциальную сложность.
138 I Алгоритмика и программирование на языке Ада Вдохновившись, напротив, методом, использованным для алгоритма Евклида, состоящим в преобразовании пар последовательных элементов в последовательность: (Fn+2, Fn+i) = (Fn+i + Fn, Fn+i) (формула, которая имеет связь с матрицей упражнения 14), приходим к алгоритму, который для п вычисляет пару чисел Фибоначчи (Fn+i, Fn): I if n = 0 then return (1,0); else (Fn, Fn-i) <— Фибоначчи(п - 1); return (Fn + Fn-i, Fn); | end if; Этот алгоритм, который легко может быть сделан нерекурсивным, имеет сложность, пропорциональную п (линейную, а не экспоненциальную). Ь. Любое из соотношений: '->+**-*• (£)-(! !)"(!)• '-*£ приводит к мысли, что Fn может быть вычислено методом дихотомического возведения в степень. Это действительно так! Обоснуем наше решение с помощью, например, первого соотношения (другие приводят к тому же методу). В несколько научной манере можно сказать, что ф принадлежит кольцу Щф], состоящему из а + фЬ с целыми а, Ь. Устойчивость относительно произведения в Ъ[ф] вытекает из уравнения ф2 = ф+ 1: (а + фЬ)(с + фв) = ас + ф{ай + 6с) + фЧй = (ас + bd) + ф(ай + Ь(с + d)). Эта формула показывает, к тому же, как считать в Щф] с помощью целых операций. Следовательно, вычисление фп может быть осуществлено через дихотомию; как это видим по вышеупомянутой формуле, сложность одного перемножения в Щф] есть 4 целых перемножения и 3 целых сложения, тогда как сложность возведения в квадрат — 3 целых перемножения и 2 сложения: (а + фЬ)2 = (а2 + б2) + фЬ(2а + 6), что приводит к алгоритму 9-А. Но можно сделать лучше; соотношение (а + ЬХ){с + dX) = ac+ ((а + Ь)(с + d)-ac-bd^X + bdX2 доказывает, что можно умножать два многочлена первой степени с помощью только 3 перемножений, но 4 сложений (об этом снова пойдет
Решения упражнений 139 речь в главе V). Применительно к кольцу Щф] оно позволяет вычислить произведение с помощью 3 целых перемножений и 4 целых сложений: (а + фЬ){с+фв) = ас + bd + ф((а + Ь)(с + d) - acY и, конечно, использовать при реализации. с. Можно вычислить фп через дихотомию, но применяя метод упражнения 15 (использование метода Горнера). Заметим, что одна из компонент аддитивных перемножений в этом способе постоянна (равна элементу, степень которого хотим вычислить): здесь это умножение на ф, которое не является настоящим умножением, так как (а + Ьф)ф = 6 + ф(а + 6). В алгоритме 9-В последовательные степени ф вычислены в паре (д,д'), представляющей д + фд'. А. Традиционная дихотомия (/,/') <— (1,0); Ь,дГ)<— (0,1); t <— n; loop (t+jf) X (ff + V)* » 4>* if t est impair then fg' + fb + g')); end if « <— L*/2j; С/+*Г)Х <* + *?* «*» exit when t = 0; (*,*')<—to2+0в.*'(2* + </')); end loop; return/'; f+4*f **ф* Алгоритм 9. Вычисление чисел Фибоначчи 17. е-лексикографический порядок и знакопеременный лексикографический порядок а. б-лексикографический порядок является линейным, если исходные упорядочения линейны. Если функция с тождественно равна 1, получаем тогда обычный лексикографический порядок. В. Дихотомия «по Горнеру» п ж е$%* 4* €фш%2*"1 4- * * ♦ 4* «а (</,</')<— (1,0) for t in reverse 0 .. q loop (<7,<7')«—(ff2+s'2,<7'(2<7 + <?')) if £i = 1 then (<7, <?')<— G/'.S + ff') end if end loop return g'
140 I Алгоритмика и программирование на языке Ада (ei,/«) -»• (ег.Л) t (ei./з) t («1./2) t (ei./O 4- K/s) 4- (e2,/2) 4- (e2,/i) -► (ез.Л) t (ез,/з) t К/г) t (ез./i) b. Эта история с планкой наводит на мысль о том, что происходит внутри Е х F; функция F Э у ►-» (х,у) £ х х F является изоморфизмом, если е(х) = 1, в противном случае антиизоморфизмом. c. Убеждаемся, что miiiExF = (minf;,minF). Определение наибольшего элемента немного сложнее: m&XExF = (max#,minF), если мощность множества Е — четна, и max£;xj? = (maxf;,maxj?), если мощность множества Е — нечетна. Проиллюстрируем это с помощью примера: пусть Е = {ei < 62 < ез} и F = {/i < /2 < /3 < /4}; тогда знакопеременное лексикографическое произведение Е х F представляется так, как это показано в таблице выше. Последующий элемент для (х}у) £ Е х F вычисляется тогда рекурсивно, например, с использованием алгоритма 10-А. А. Рекурсивная версия if с(х) = 1 and у < тах/г then return (x,succf («/)); elsif c(x) = — 1 and у > minF then return (хупредшр(у))\ elsif x < maxfi then return (succe(s),j/); else T$ktfa+j$m ¥&&*£* jft end if; В. Итеративная версия s i— signEl(xi)signEa(x2)...signEn(xn) for t in reverse 1 .. n loop s <— s x signE|(x<); # m Wigftfy (#*). aigft^ Щ& > *• ♦ *NS& J&i (**"* if s = 1 and xi < maxEj then xi <— succEiixi); return x; elsif 5 = — 1 and Xi > mina. then xi <—предшЕ.(х<); return x; end if; end loop; raise Successor-Error, i) Алгоритм 10. Последующий элемент в знакопеременном лексикографическом порядке В этом алгоритме замечаем, что единственная составляющая модифицирована и заменена своим последующим или предшествующим элементом. Отсюда следует, что функция /*(х,у) = sign^x) x signF(y) со значениями из {1,-1} является «знакочередующейся», т.е. удовлетворяет равенству /i(succ(x, у)) = —/х(х,2/). Поскольку она равна 1 на
Решения упражнений 141 miiiExF = (minf;,minF), то она совпадает с функцией-сигнатурой на Ex F. d. Пусть Ely E2l ..., Еп — п конечных линейно упорядоченных множеств. Обозначим sign^. функцию-сигнатуру на #,, единственную функцию, отображающую Е{ на множество {—1,1}, удовлетворяющую условиям sign^.(пипя.) = 1 и для х G Е{ — {тахд.} sign^. (succ^. (х)) = -sign£.(x). Обозначим через б, : Е —у {—1,1} функцию, определенную через б,(х) = П.;<1^8П^(Х1)- На декартовом произведении Е = Ei x Е2 х ... х Еп определим отношение <: (xi,..., xn) < (yi,..., уп) тогда и только тогда, когда наименьшее г такое, что х, ф у,-, удовлетворяет неравенству х, ^б'(г) у,-. Легко убедиться, что отношение «х = у или х < у» является отношением порядка на Е, которое есть не что иное, как отношение порядка, изученное в предыдущем упражнении для п = 2. Это отношение линейного порядка, наименьший элемент которого есть пипя = (min^,..., Сигнатура линейно упорядоченного множества Е есть «произведение сигнатур каждой компоненты»; это можно доказать с помощью индукции, используя ассоциативность: (Ei х Е2) х Е3 = Ei х (Е2 х Е'з), которая вытекает, из л'ого факта, что сигнатура произведения двух конечных линейно упорядоченных множеств есть произведение их сигнатур. Следующий вопрос показывает, что последующий элемент для (xi,...,xn) получается изменением единственной компоненты х, и ее заменой своей последующей или предыдущей в Е{. Функция /х(хь ..., xn) = sign^ (xx).. .sign£n(xn) для х ф тахя удовлетворяет равенству //(succf;(x)) = — //(х) и, поскольку для пипя она равна 1, это — сигнатура множества Е = Ei х • • • х Еп. e. Как и для лексикографического порядка, последующий элемент для х = (xi,..., хп) получается в результате попыток варьировать последнюю компоненту хп и ее замены на succ£n(x) (если е„(х) = 1), или на предш£;п(х) (если еп(х) = —1). Если это невозможно, т.е. если еп(х) = 1 и хп = тахяп, либо еп(х) = — 1 и xn = riling, to пробуем сварьировать предпоследнюю компоненту xn_i по аналогичному правилу. .., что приводит к окончательному алгоритму (10-В). 18. Перебор делителей целого числа Делитель числа п = р" 1р^2.. .р%к полностью определен данной последовательностью (/?i, /?2, • • •, /?п), которая удовлетворяет соотношени-
142 I А лг о ритмика и программирование на языке Ада ям 0 ^ /?, ^ а, для г = 1,2,..., п. Смена делителя п сводится, значит, к смене показателей простых множителей. Если выбрать порядок, определенный на показателях, т.е. на произведении [0}а{\ х • • • х [0,ап], и вычислить делитель в переменной Р, тогда достаточно одного деления или умножения для вычисления последователя для Р. Действительно, если Р записывается: Р = PiP%2 • • -Р*, и если * является индексом компоненты, которая изменилась в вычислении последующего для (/?ь/?2, • •-,/?п), то succ(P) = Р х pi или же succ(P) = P/pi- Возьмем пример: п = p3q3r2] последовательные величины для Р, т.е. список делителей п, тогда получается так: p°q°r°, p°q°r1, p°q°r2, p°q1r2, p°q1r1, А1Л А2Л A2rlf А2г2> АЗг2> A3rlf p0g3r0) А3Л pyrlf 19. Код Грея a. Достаточно рассмотреть множество {0,1}п = {0,1}х{0,1}х...х{0,1} и наделить его знакопеременным лексикографическим порядком. Можно также рассуждать с помощью индукции по п: если si, ..., $2л-1 является кодом Грея для цепочек из п разрядов, то: (О, So), (0, Si), . . . , (О, S2n_2), (0, *2»-l), (1, *2»-l), (l,S2n_2),...,(l,5l), (Mo) И (0, So), (Mo), (Ml), (0,S!),...,(0,S2n_2), (l,s2n_2), (l,s2n_i), (0,s2n_i) суть два кода Грея для цепочек из п + 1 разрядов. b. Используя первый из только что данных примеров кода Грея, можно довольно просто построить требуемую программу. Для этого применяют две взаимно рекурсивные процедуры: одна генерирует код Грея, другая — его зеркальное отражение. Каждая из этих двух процедур Gray и Reverse-Gray обладает двумя параметрами, второй обозначает цепочку из 1 или 0, которая должна быть помещена в качестве приставки каждого слова кода Грея, длина которой задается первым параметром. Главный вызов, который должен быть осуществлен для получения вывода на экран кода Грея длины п, есть ► Gray (n) <. Вот первая из этих процедур:
Решения упражнений 143 procedure Gray (п : in Integer; Prefix : in String := "") is begin if n = 0 then Put-Line (Prefix); else Gray (n-1, Prefix к "0"); Reverse-Gray (n-1, Prefix к "1"); end if; end Gray; Вторая процедура Reverse-Gray получается перестановкой вхождений цепочек "Iй и "0й. с. Чтобы написать итерационный алгоритм, достаточно использовать результат упражнения 17, но факт работы с {0,1} приносит значительные упрощения. Изучим знакопеременное лексикографическое произведение вида Е х {0,1}, где Е — конечное линейно упорядоченное множество, и рассмотрим последователя для элемента (xi,X2) Е Ex {0,1} в случае, когда этот последователь получается изменением компоненты х2; это проявляется в следующих ситуациях: • {хих2) = (хь0) и sign(xi) = 1, значит, succ(xi,0) = (xi,l), • (яь*2) = («1,1) и sign(xi) = -1, значит, succ(xi,l) = (xi,0). Можно свести эти два случая к одному: sign(xi,X2) = 1 и succ(xi,X2) = (xi, 1 — Х2), что приводит к алгоритму вычисления последователя для элемента, Алгоритм 11. Код Грея который приведен слева. Несколько замечаний, однако, к этому алгоритму: прежде всего, вместо использования сигнатуры рассуждаем в терминах четности цепи рассматриваемых разрядов; затем, нормальный выход из цикла (по исчерпании итераций) происходит только для последнего элемента кода, что объясняет возбуждение исключения. 20. Изменение слов в обратном коде Грея a. Очевидно, что Т\ = (1). С другой стороны, обратный код Грея таков, что если Gn является таким кодом из п разрядов, то (0Gn, lGn) — обратный код Грея из п + 1 разрядов, запись Gn означает обращенную последовательность Gn. При этих условиях Tn+i = Тп • (п + 1) • Тп, и тот факт, что Т\ = 7\, доказывает с помощью индукции требуемое свойство. b. Этот алгоритм, выведенный из тонких методов освобождения от рекурсивности, является искусственным, но обезоруживающе простым. 5 := Х\ + Х2 + • • • + Хп for t in reverse 1 .. n if 5 = 0 then Xt i 1 -Xi\ return x\ end if; 5 <— (5 + Xi) mod 2 end loop; raise Successor-Error, mod 2; loop
144 I Алгоритмика и программирование на языке Ада Очевидно, что при к = 1 он дает последовательность Т\ (сведенную к элементу 1). Кроме того, в этом случае выполнена единственная итерация, что влечет при выходе из цикла Stack(I) = х и Stack(2) = 2. Сделаем теперь индуктивное предположение, что этот алгоритм ведет себя так, как описано в условии, для к = п — 1. Если к = п, то он начинает создавать последовательность Tn-i (гипотеза индукции), и после этого обнаруживаем, что Stack(I) = п и Stack(п) = п, а другие элементы массива стека остаются неизмененными по отношению к первоначальной конфигурации. В этой последней ситуации осуществляем итерацию, по ходу которой все начинается с получения Stack(I) = п, возвращаем Stack(l) к 1, затем переносим значение х = Stack(n + 1) на место п и заменяем Stack (п + 1) на п + 1. Тогда оказываемся в ситуации, которая заставляет алгоритм заново создавать последовательность Tn_i. Тут остается проверить, что на выходе из этого второго захода содержание массива Stack согласуется с гипотезой индукции; принимая во внимание конфигурацию, предшествующую этому второму заходу (Stack(n) = п + 1 и Stack(n + 1) = п И- 1), видим, что эта проверка является лишь формальностью. Запись пакета, реализующего шаг за шагом генерацию слов кода, требует нескольких предостережений: прежде всего, нельзя больше удовлетворяться представлением слова кода только как функции вычисления последующего элемента, нужно получить также таблицу Stack, вытекающую из последнего вычисления; затем, когда достигнуто последнее слово кода, исполнение тела цикла будет вызывать ошибку переполнения. Можно сгладить этот недостаток, заменяя последнюю инструкцию тела цикла на Stack (I + (t mod n)) «— 1 + (t mod n); эта модификация позволяет алгоритму бесконечно создавать один и тот же код Грея. Еще можно заметить, что этот способ генерации кода Грея, благодаря изменениям, которые нужно проделать, позволяет создать цикл в обратном коде Грея, начинающийся с какой угодно конфигурации. Цикл, который проходится таким образом, выводится из стандартного кода (того, которому выше дано рекурсивное определение) трансляцией всех слов кода (трансляция означает здесь покомпонентное сложение по модулю 2). 21. Вычисление перманента матрицы а. Центральный член может быть рассмотрен как однородный многочлен степени п от переменных a,j, который можно выразить суммой ]CA*aflia(i) • • -апа(п)у распространяющейся на все отображения а из
Решения упражнений 145 [1, п] в [1, п], при этом коэффициент /ха определяется суммой 0а = £ (-1Г1+,"+СпЦ1)-Цп). ^€{0,1} Если а — перестановка, коэффициент /ха равен (—1)п, поскольку единственный ненулевой член суммы — это тот, для которого все б, равны 1. В противном случае можно разложить /ха следующим образом: £ (_!)«.+•••+«- £(-l)«*€e(1)...ee(n), где к — элемент из [1, п], который не принадлежит образу а, и хорошо видно, что внутренний член (сумма по 6*) равен нулю; это доказывает, что fia в этом случае равно нулю. Второе искомое выражение (суммы которого записываются на множествах) просто выводится из первого, исключением ненулевых с,-, появляющихся в сумме. Ъ. Возвратный код Грея из п разрядов является выражением линейного порядка на множестве всех частей Е из [1,п], наименьший элемент которого есть 0 и наибольший, ЕтлХ} исходное множество. Если Е' является последователем для Е, то симметрическая разность ЕАЕ* сводится к одному элементу, а это означает, что Е' получается, исходя из Е, добавлением или удалением одного элемента. Введем несколько обозначений: Е' = succ(i£), S£ = EF^(-l)|F|ni^„5,(F), где Si (Е) = J2j € Е а*э • Вычисляемый перманент является, значит, суммой (—1)п£ятвя. Эта сумма получается вычислением последовательных значений Алгоритм 12. Вычисление Е# и, тогда, итерируя, имеем: перманента EB- = EE + (-l)l£'l J] Si(E'). (7) Вклад наименьшего элемента 0 в эту сумму — нулевой; значит, начнем : его последователя, который может быть {1}, {п} или какое-нибудь одноэлементное множество в соответствии с порядком, заданным на 1,п]. Можно заметить, что Si(E') = Si(E) ± a,j, где {j} = Е Д Е'. Si <— oieuccr»; * i «bi; for i; in 2 .. n loop «bi i fltsuccnj x i i X &i\ end loop; E i P; E i— {succ n}; while E ф Етлх loop j<— EAE'; Si <— 5i ±ац; р^_(_1)1^151; for t in 2 .. n loop Sti— 5, ± aij\ P i— P x Si; end loop; E <— E + P; E <— E'; end loop; return (-l)nE; о ion
146 I Алгоритмика и программирование на языке Ада В этой записи, как в алгоритме 12, ± должен пониматься как +, если Е С Е' и -, если Е' С Е. Чтобы оценить Efy, исходя из Е# с использованием соотношения (7), нужно осуществить п сложений (для подсчета каждого 5, (£")), затем п — 1 перемножений: S\(E') х ••• х Sn(£"), и> наконец, 1 сложение. Имеем 2П — 2 операций для осуществления (7), при этом первый член Е = — []1<Кпа,п требует п — 1 перемножений; это доказывает сформулированный результат о сложности. Сложность 0(п2п) значительна, но остается того же порядка, что и сложность, индуцированная определением (п\(п — 1) перемножений и п\ — 1 сложений). Формула Стирлинга позволяет сравнить эти два значения сложности: п • п \/(п ■ 2п) к (п/2е)пу/2 7ГП. 22. Перманент матрицы (продолжение) a. Правая часть может рассматриваться как многочлен (от переменных a,j), равный J2a /iaaia(i) • • -апа(п)> гДе сумма распространяется на все отображения [1, п] в [1, п]. Коэффициент /ia задан формулой a; в которой полагаем шп = 1. Если a — перестановка, то каждое /ia(^), присутствующее в сумме /ia, равно 1 и, следовательно, /ia = 2П~1. Напротив, если а не является перестановкой, то сумма /ia — нулевая. Действительно, образ а отличен от [1, п], и различаем два случая: (г) 3 к < п, не принадлежащий образу а, (гг) 3 к < п, дважды полученный из а. В обоих случаях члены /ia(<*>), присутствующие в сумме, группируются попарно, один соответствуя ш^ = 1, другой — и>* = —1, и взаимно уничтожаются (в случае (гг) ца{ш) = и>ь)- b. Формула пункта а может быть записана в следующем виде: —у- = YLUl •••a;n-i JJ (a,n + u>iali + --- + u;n_iain_i)/2. Как и в предыдущем упражнении, вычисление перманента получается генерированием перебора при линейной упорядоченности на {—1,1}11"1, в которой два последовательных элемента отличаются только одной компонентой. Если для и Е {—1,1}п_1 и г ^ п положить Si{u>) = (ain +и\ац + ••• + wn-ia.-n-i)/2,
Решения упражнений 147 то можно, благодаря перебору на {—1,1}п \ вычислить последовательно Ео, = J2P<u> •■■> используя формулу Еш* = Еш+ш[...ш'п^1 П ft(u/), где и' — последователь для и в {—1,1}п_1. (8) Если j является индексом, по которому различаются два слова и и и/, то сумма Si{u') вычисляется, исходя из ft (и;), через Si(u') = Si(u>) — atJ-, если Uj = 1, и через S,(u/) = Si(u>) -|- a,j, если u>j = —1. for г in l .. п loop ft f—(aii + • • • + ain)/2; end loop; E<—ftx---x5n;c<—(0,...,0);son<—1; while с # стах loop e' <— succ(e); sgn i sgn\ j i— с Де'; if tj = 0 then for i in 1 .. n loop Si i— Si — aij\ end loop; else {j ж I for i in 1 .. n loop S; i— Si + a^; end loop; end if; E i— E + s#n x Si x • • • x 5n; с <— e'; end loop; return 2E; Алгоритм 13. Вычисление перманента в кольце, где 2 обратимо С практической точки зрения для генерации адекватного перебора {—1,1}п_1, выбираем соответствие между {0,1} и {—1,1} вида е к> (—1)с и классическую генерацию кода Грея на {0,1}п_1, что достигается с помощью алгоритма 13. Мультипликативная сложность получается, если заметить, что нужно вычислить 2n_1 членов Т,Ш) каждый из которых требует п — 1 перемножений (см. формулу (8)), значит, всего 2п_1(п — 1) произведений, к которым нужно добавить последнее умножение на 2. С точки зрения сложений первоначальный член E(i,...,i) требует п(п — 1) сложений и п делений на 2, тогда как общий член Ео, вычисляется, исходя из предыдущего, с помощью п сложений; наконец, нужно сложить все эти члены, что требует в целом п(п — 1) + (2n_1 — 1)(п +1) сложений и п делений на 2. Заметим относительно предыдущего упражнения, что сложность была приблизительно разделена на 2. ю*
148 I Ллгоритмика и программирование на языке Ада с. Рассмотрения полностью аналогичны предыдущему пункту, если только невозможно деление на 2; деление (точное) на 2n_1 будет иметь место уже в конце. Результатом является алгоритм 14. for t in 1 .. п loop Si i— ац Н +a;n; end loop; E <— Si x • • • x 5n; с i— (0,..., 0); sgn <— 1; while с ф cmax loop e' i— succ(e); sgn < sgn; j <— с Ac'; ifcj=0then for t in 1 .. n loop Si <— Si — 2atJ\ end loop; else Щ-ЩШ for г in 1 .. n loop Si <— 5, + 2а^; end loop; end if; E i— E + sgn x Si x • • • x 5n; e i— c;; end loop; return E/(2n_1); Алгоритм 14. Вычисление перманента для характеристики, отличной от 2 23. Массив инверсий перестановки d. Массив инверсий перестановки а имеет вид (0,0,0,1,4,2,1,5,7). Свойство 0 ^ dk < k легко получается из того, что имеется точно к — 1 целых чисел, заключенных строго между 0 и к. Массив инверсий возрастающей перестановки интервала [1, п] есть, очевидно, (0,0,..., 0), и таблица для единственной убывающей перестановки — (0,1,2,..., п). e. Можно использовать тот факт, что aa(j) есть число индексов таких, что г > j и a(i) < <*(j), что приводит к нижеследующему алгоритму: I (ai, а2,..., an) <— (0, 0,..., 0); for j in 1 .. п loop for i in j + 1 .. n loop if at(i) < at(j) then aa(>) i— aa(j) + 1; end if; end loop; end loop; Сложность полученного способа, конечно, имеет порядок квадрата длины перестановки.
Решения упражнений 149 f. Пусть а — элемент из [О,1[х[0, 2[х • • • х [О, я[. Построим перестановку а, для которой а является массивом инверсий, следующим способом: • элемент п помещаем в массив, индексированный с помощью [1, и], представляющий а, оставляя ап пустых ячеек справа от п; это означает в точности, что а~1(п) = п — ап + 1; • затем помещаем п — 1 в массив а, оставляя an_i пустых ячеек справа от п — 1; • продолжаем, зная, что на fc-м этапе этого процесса Аг — 1 величин уже размещены в массиве, следовательно, в массиве а остается п — к свободных мест, и, с другой стороны, величина ап_* строго меньше, чем п — к. (ari,ar2,...,ar„) <—(1,1,..., 1); for к in reverse 2 .. п loop \ j <— n; i i— 0; loop f есть жшо свободных индекса© > j if aj = 1 then i <— i + 1; end if; Если * i» 14* a* f то i свободен exit when i = 1 + a*; i <— j - 1; end loop; a> <— k; end loop; Алгоритм 15. Генерация перестановок В алгоритме 15 использована оптимизация: свободные места в массиве, представляющем перестановку а, отмечены числами 1, что позволяет не помещать это последнее значение в массив, представляющий а, в конце алгоритма. 24. Перебор перестановок транспозициями (г, г + 1) а. Рассуждаем индукцией по п, при этом случаи п = 1 и п = 2 очевидны. С помощью перестановки а интервала [1,п] можно построить п+1 перестановок о-1, о-2,..., o-n+1 интервала [1, п+1], где перестановка 0х получается включением в а элемента п + 1 на г-ое место; например,
150 I А лг о ритмика и программирование на языке Ада если а = (5 2 4 1 3), то а1 = (6 5 24 13), а2 = (5 6 2 4 13),..., о-5 = (5 24 163), о-6 = (5 2 4 13 6). Если сгьсгг,.. .,0Y|f и есть такая последовательность перестановок на [1, п], то соответствующую последовательность перестановок интервала [1, п + 1] получаем следующим образом: ~i ~2 ^.л+i n+i n _i ~1 ~2 ^.л + 1 ^.п + 1 п ^.1 „ _ „ ^З^З^м^З > °4 ^4г--^4 и Т.Д. b. Действуем индукцией по п; знаем, что 6 — последующий элемент для а в знакопеременном лексикографическом порядке — получается изменением одной компоненты а. Предположим сначала, что эта компонента — последняя; тогда имеем Ьп — ап±1 и bj = cij для I ^. j ^ n—l. Если i — индекс п в а (т.е. a(i) = n), то имеем /3 = а о (г, г — 1) в случае Ьп = ап + 1, и /? = а о (г, г + 1) в случае 6П = ап — 1, при этом запись (j, к) означает транспозицию индексов j и к. Теперь предположим, что компонента, по которой различаются а и 6, не является последней. Поскольку 6 — последующий элемент для а в знакопеременном лексикографическом порядке, имеем ап — Ьп = 0 или ап = Ьп = п и 6[1..п-1] есть последующий элемент для a[i..n_i] в лексикографическом знакопеременном произведении [0,1[х [0,2[х ... х [0, п —1[, причем компонентой с самым большим индексом массива инверсий является та, которая меняется быстрее всех во время перебора в лексикографическом знакопеременном порядке. Если о! (соответственно, /?') означает перестановку [1,п— 1], для которой a[i..n_i] (соответственно) tyi .n-i]) массив инверсий, то /?' получается из а' транспозицией двух последовательных элементов (гипотеза индукции). Тогда утверждение верно также и для а и /?, поскольку элемент п находится в этих перестановках либо на месте п (случай ап = Ьп = 0), либо на месте 1 (случай ап = Ьп = п). c. Пусть а — перестановка интервала [1, п] и a = (а\, аг,..., ап) — ее массив инверсий. По предыдущему сигнатура перестановки а является также сигнатурой а в знакопеременном лексикографическом произведении. Алгоритм вычисления последующего элемента в знакопеременном лексикографическом произведении приводит к алгоритму 16-А. В начале тела основного цикла этого алгоритма делается попытка опустить элемент q (применить транспозицию (a_1(g) — l,a_1(g)) к перестановке а) или же поднять его.
Решения упражнений 151 Фактически, бесполезно приниматься за предварительное вычисление массива инверсий а. Достаточно вычислить при необходимости элемент aqy что может быть реализовано одновременно с вычислением a~1(q) благодаря алгоритму 16-В. В этом втором алгоритме результирующим значением i является a~x(q). А. Первая версия 5 <— sign(a); for q in reverse 1 .. n loop si—sx(-l)e«; $ шmm{&i) x $ipt(sa} x... x sig&{<^*} •'«— <*-l(q); if 5 = 1 and aq < q — 1 then ar(i) ¥^5 a(i - 1); exit; elsif 5 = -1 and aq > 0 then ar(i) <^$ a(i + 1); exit; end if; end loop; Алгоритм 16. Генерация перестановок 25. Принцип включения-исключения или формула решета а. Первая формула удобно получается индукцией по |/|, числу элементов /, с использованием хорошо известной формулы \А U В\ = \А\ + \В\ — \АГ\В\. Вторая получается переходом к дополнениям. Чтобы получить формулу Сильвестра, достаточно записать: • €/ •€/ •€/ затем применить первую формулу. с. Пусть X — множество всех перестановок на [1, п] и Х{ — множество перестановок, имеющих г фиксированной точкой, 1 ^ г ^ п. Искомое число <тп: *п = \Г\Ц= £ (-u|J||n4 i€[l,n] JC[l,n] i€J Множество П^» есть множество J перестановок на [1,п] и, следовательно, содержит (п — \J\)\ элементов, откуда: *«=. £ (-i)|J|(»-H)'=D-i)*cS(»-*)« = D-i)*j}- JC[l,n] k=0 k=0 В. Вторая версия i <— п; aq <— 0; loop exit when cr(i) = q\ ifq> a(i) then aq i— aq + 1; end if; • <— i - 1; end loop;
152 I Алгоритмика и программирование на языке Ада d. Положим здесь X равным интервалу [1, п] и для 1 ^ г ^ к пусть Х{ — множество элементов из X, которые кратны р,-. Тогда имеем: v,(n) = | n Ц= £ (-^ЧП*!- i€[l,*] JC[ltk] *€•/ Множество П^» 3Десь является множеством элементов из X, кратных f|l€jP,; но если d является делителем п, имеется точно n/d элементов из X, кратных d, откуда: ?(») = » £ ?r1v = n(1-fH1-f)-(1-f)- J^*]n.-6JW Pi Р2 Р* e. Обозначим через X множество всех отображений из [1, п] в [1, п] и для 1 ^ г ^ п через Х{ — множество отображений из X, не имеющих г в их образе; выберем в качестве весовой функции на X функцию р(а) = flia(i)a2a(2) • • • апа(п): тогда нужно вычислить вес множества Sn всех перестановок на [1,п]. Заметим, что Sn = П»€[1 п]^*> и> значит> per A = Y1jc[i n](~"^)'J'^(n»eJ ^«)- Но C\i£j X* есть множество всех отображений, образы которых не встречаются в У, следовательно: P{f]Xi) = ]C ala(l) •••ana(n) = ]j^ ^ ^ a2j . . • ]Г anj, »€J a:[l,n]-K/ J^ J^ J^ отсюда получаем формулу per A = £Jc[1|n](-l)|J| ПГ=1 HjtJ a«i> KOT°- рал при замене У его дополнением дает формулу Райзера. 26. Произведение многочленов, заданных массивами for t in P'Range loop for j in Q'Range loop Д(1 + j) f- Д(| + j) + P(t) x Q(j); a. Алгоритм справа дает функцию умножения двух многочленов Р и Q, где многочлен Д степени deg Р + deg Q (который дает результат в конце алгоритма) должен быть предварительно инициализирован нулем. b. Изучал предыдущий алгоритм, устанавливаем, что его сложность, как по числу перемножений, так и сложений, равна произведению высот двух многочленов: (deg Р + 1) х (deg Q + 1) — обычно высо-
Решения упражнений 153 for I in P'Range loop ifP(i)#Othen for .; in Q'Range loop if Q(j) ф 0 then R(i + j) <— R(i + j) + P(t) x Q(i); end if; end loop; end if; end loop; той многочлена называют число его ненулевых коэффициентов, но в этом алгоритме, который не учитывает случай нулевых коэффициентов, можно рассматривать высоту многочлена как число всех коэффи- Алгоритм 17. Перемножение многочленов циентов. Значит, возможно улучшить предыдущий алгоритм, исключив все ненужные перемножения: это сделано в алгоритме 17. В противовес тому, что можно было бы подумать, эта оптимизация вовсе не смехотворная и активно применяется при умножении разреженных многочленов. 27. Возведение в степень многочленов, заданных массивами a. Очень просто вычислить сложность алгоритма возведения в степень последовательными умножениями, если заметить, что когда Р — многочлен степени d, то Рх — многочлен степени id. Если обозначить Сти\(п) сложность вычисления Рп, то рекуррентное соотношение Cmxl\(i+ 1) = Cmui(i) + (d+ 1) х (id+1) дает нам: . = 1 Z Z b. Что касается возведения в степень с помощью дихотомии (т.е. повторяющимся возведением в квадрат), вычисления несколько сложнее: зная Р2 , вычисляем Р2 с мультипликативной сложностью (2'd+ 1)2. Как следствие имеем: C8qr(2') = £ (24 + I)2 = d2{4[ 1} + 2d(2l - 1) +1 = »=о d2n2 d2 = — + 2nd + log2 n - 2d - — Предварительное заключение, которое можно вывести из предыдущих вычислений, складывается в пользу дихотомического возведения в степень: если п есть степень двойки (гипотеза ad hoc), этот алгоритм еще выдерживает конкуренцию, даже если эта победа гораздо скромнее в
154 I Алгоритмика и программирование на языке Ада данном контексте {n2d2/Ъ против n2d2/2)y чем когда работаем в Z/pZ (21og2 n против п). Но мы не учли корректирующие перемножения, которые должны быть выполнены, когда показатель не является степенью 2-х. Если п = 2/+1 — 1, нужно добавить к последовательным возведениям в квадрат перемножения всех полученных многочленов. Умножение многочлена p(2'_1)d степени (2* — \)d на многочлен P2%d степени Td вносит свой вклад из ((2* — l)d+ 1) х (2'</+ 1) умножений, которые, будучи собранными по всем корректирующим вычислениям, дают дополнительную сложность: / CV2'+1 - 1) = £((2"- \)d + 1) х (24 + 1) = 1 = 1 = ^ - ^р + 2nd - 2d2 + d(l - Llog2 nj). Теперь можно заключить, что дихотомическое возведение в степень не всегда является лучшим способом для вычисления степени многочлена с помощью перемножений многочленов. Число перемножений базисного кольца, которые необходимы, C8qr(n)y — в действительности заключено между Csqr(2llo^nJ) и C8qr(2^°^nJ) + C"(2llo*>nJ+1 - 1), т.е. между n2d2/S и 2n2cf2/3, тогда как простой алгоритм требует всегда n2d2/2 перемножений. В частности, если исходный многочлен имеет степень, большую или равную 4, возведение в степень наивным методом требует меньше перемножений в базисном кольце, чем бинарное возведение в степень, когда п имеет форму 21 — 1. Можно пойти еще дальше без лишних вычислений: можно довольно просто доказать, что если п имеет вид 2l + 2/_1 + с (выражения, представляющие двоичное разложение п), то метод вычисления последовательными перемножениями лучше метода, использующего возведение в квадрат (этот последний метод требует корректирующего счета ценой, по крайней мере, n2d2/9). Все это доказывает, что наивный способ является лучшим для этого класса алгоритмов, по крайней мере в половине случаев. Действительно, МакКарти [124] доказал, что дихотомический алгоритм возведения в степень оптимален среди алгоритмов, оперирующих повторными умножениями, если действуют с плотными многочленами (антоним к разреженным) по модулю т, или с целыми и при условии оптимизации возведения в квадрат для сокращения его сложности напо-
Решения упражнений 155 ловину (в этом случае сложность действительно падает приблизительно доп2</2/6 + п2</2/3 = п2</2/2). 28. Небольшие оптимизации для произведений многочленов a. Алгоритм состоит просто в применении формулы квадрата суммы: что дает п + 1 умножений для первого члена и п(п + 1)/2 — для второго, или в целом (п + 1)(п Ч- 2)/2 умножений, что близко к половине предусмотренных умножений, когда п большое. b. Достаточно легко для вычисления произведения двух многочленов Р = аХ + 6 и Q = сХ + d находим формулы U = ас, W = 6rf, V = (а + Ь)(с + d) и PQ = UX2 + (V-U- W)X + W, в которых появляются только три элементарных умножения, но четыре сложения (само же существование этих формул связано с записью тензорного ранга произведения многочленов, приведенной в главе IV). Можно рекурсивно применить этот процесс для умножения двух многочленов Р и Q степени 21 — 1, представляя их в виде Р = АХ2 + В, Q = СХ2 + D и применяя предыдущие формулы для вычисления PQ в зависимости от А, В, С и Д где каждое произведение АВ} CD и (А + В)(С + D) вычисляется с помощью рекурсивного применения данного метода (это метод Карацубы). Все это дает мультипликативную сложность М(21) и аддитивную сложность *4(2*) такие, что: М(21) = ЗЛ<(2/"1),..., М{2) = ЗЛ<(1), М{1) = 1, Л(21) = гЛ(21-х) + 3 • 2',..., .4(2) = 3.4(1) + 6, .4(1) = 1. В этой последней формуле член 3 • 21 представляет собой число элементарных сложений, необходимых, чтобы сделать два сложения многочленов степени 2/""1 — 1 (а + Ьис+d) и два вычитания многочленов степени 21 — 1 (U — V — W). Суммируя каждое из этих выражений, находим для п, являющегося степенью двойки: М{п) = п^Н к п1'585 и А(п) = 7п№ -6п. К сожалению, этот принцип остается теоретическим, и на его основе нужно построить итерационный алгоритм, чтобы получить разумную эффективность (цена управления рекурсией очень велика).
156 I Алгоритмика и программирование на языке Ада 29. Высота произведения двух многочленов a. Не говоря даже об оценке стоимости умножения двух разреженных многочленов, уже очень трудно — и даже невозможно, потому что эта высота зависит только от высоты каждого из множителей, — выразить высоту произведения двух многочленов как функцию высот исходных многочленов. Однако можно довольно легко ограничить ее произведением высот исходных многочленов. Два многочлена Q = Ь^Х*-1 + • • • + 60 и Р = ap-iXfr-1)* + ар-2Х(Р-2)<* + • • • + а0 показывают, что эта граница может быть достигнута. b. Положим Р = Yli=iaiXQi- Вычисление Рп дает нам выражение 5^ 0,-j ...a,nXa'i++a'«. Эта формула дает такое представление для Рп, в котором не сделано никакого упрощения и никакой группировки членов. Высота Рп дается числом членов, имеющих разные степени, и чтобы оценить ее сверху, нужно сгруппировать члены, которые очевидным образом имеют одинаковые степени. Поскольку сложение показателей неизвестного коммутативно, можно переписать Рп как сумму мономов степеней atl +а,-3 Н Ь«1п, где последовательность (a»fc)* — возрастающая. Если все эти суммы различны, высота многочлена Рп будет максимальной и равной числу возрастающих отображений (в широком смысле) интервала [1, п] в интервал [1, d\. Это число отображений хорошо известно (Берж [19]) и равно ( +^~ ). Этот факт можно легко доказать. Действительно, рассмотрим возрастающее отображение / интервала [1,п] в [1,сЦ; множество {/(1), 1 -|- /(2),.. . ,п —1-1- f(n)} является частью из п элементов множества из п + d — 1 элементов. Обратно, если рассмотреть такую часть {xi < Х2 .. .xn_i < хп}, то последовательность xi, х^ — 1, ... , хп— п+1 — возрастающая со значениями в [1, d\. c. Прежде чем доказать требуемый результат, сначала сформулируем небольшую лемму (которая легко доказывается индукцией): для к ^ 1 и р ^ 2 имеем kFp < Fp+k • Доказательство максимального характера (в смысле, данном в формулировке условия) многочлена Р состоит просто в том, чтобы показать, если положить 5, = X^i+mfc, что для различных г = {ii,..., in} и j = {ji,..., jn} суммы S; и Sj различны. Предположим, что множества i и j упорядочены в возрастающем порядке; мы покажем, что если -Fi+n,n ф i*i+njn, то две суммы различны. Предположим, что гп > jn, и пусть гп ^ jn + 1. Можно применить лемму, сформулированную в начале этого вопроса, и вывести отсюда, что ^i+n»n > n^i+njn; числа Фибоначчи входят в суммы, расположенные в порядке возрастания, и суммы 5, и Sj содержат только п членов; отсюда непосредственно выводится, что 5, > Sj.
Решения упражнений 157 30. Представление многочленов списками type Monomial is record Degree : Natural; Coefficient : Ring-Element; end record; type Term; type Polynomial is access Term; type Term is record The.Monomial: Monomial; Next-Term : Polynomial; end record; Разреженный многочлен можно реализовать с помощью списка мономов, где каждый моном представляется парой (степень, коэффициент). Это индуцирует тип, который на языке Ада может быть описан следующей структурой данных. Вот некоторые понятия обработки списков в языке Ада. Мы не будем в деталях описывать то, что называется динамической структурой, а только наметим... (для деталей читатель может обратиться к книгам по алгоритмике, например, [181]). Однако укажем, что определение рекурсивной структуры, такой, как список, делается с помощью того, что называется неполным определением типа: ► type Term; 4- Это описание позволяет определить тип Polynomial как указатель на объект типа Term и дополнить затем определением типа Term: пара, состоящая из монома и указателя на следующий моном, т.е. классическая структура списка. Так как будут представлены не все коэффициенты многочлена, а только ненулевые, то необходимо ко всякому ненулевому коэффициенту присоединить степень соответствующего монома. После определения структуры данных остается зафиксировать ее семантику, т.е. смысл данных на языке многочленов, используемых в списках. В данной реализации первый терм списка есть моном наивысшей степени многочлена и все мономы упорядочены в порядке убывания степеней. Кроме того, многочлен нуль представляется пустым списком мономов. Из предыдущего выбора следует, в частности, что просмотр всех коэффициентов многочлена может быть замечательно организован, если начать со старшего члена и заканчивать членом степени 0. Просмотр многочлена в обратном порядке стоит дороже. Можно прибегнуть к компромиссу: если оценить, что алгоритмы действий с многочленами предпочтительнее начинать со старшей степени, то семантика хороша. Если лучше пользоваться обоими способами просмотра, то для разреженного многочлена можно использовать двойные цепочки. Эти «небольшие» рассогласования есть цена, которую приходится платить при работе с разреженными многочленами, чтобы избежать разорительной структуры данных, каковой являются массивы для представления разреженных многочленов. Какие простейшие конструкции мы собираемся использовать при
158 I Ллгоритмика и программирование на языке Ада реализации арифметических алгоритмов для многочленов? Очевидно, те, которые являются основными при действиях со списками: те, что вызываются программами языка Лисп: car, cdr, cons и null?. Вот некоторые примитивы с именами и значениями теми же, что и в языке Лисп: • Head дает первый элемент непустого списка, • Tail дает список, полученный пропуском первого элемента непустого списка, • Construct строит новый список, добавляя первый элемент к уже существующему списку, • Is-Null — булевская переменная, истинная, если список пуст. Представление многочленов списками приводит к тому, что обычное присваивание переменной типа Polynomial влечет за собой то, что носит название раздел структуры. Последнее означает, что если Р — переменная типа Polynomial, представляющая многочлен X9 +ХЪ +Х2, то после выполнения действия ► Q := Р ^ не только переменная Q будет представлять формально тот же многочлен, что и Р, но, кроме того, разделит с Р ячейки памяти, где расположены мономы Р. Если в дальнейшем потребуется прицепить к многочлену Q моном 4Х, то надо будет изменить границы многочлена Ру который ввиду равенства присоединит тот же моном! Эти функции кажутся опасными, но они используют методы контроля, допускающие эффективную реализацию. Мы исследуем это чуть позже. В действительности эти и другие ограничения на реализуемые с вышеописанными примитивами действия делают невозможным испортить структуру (цепочки связи или компоненты), как мы увидим после описания реализации. Вот возможная спецификация для управляющего списком настраиваемого пакета, содержащего примитивы, которые были только что представлены: generic type Element is private; package List-Handler is type List is private; function Head (Of-The.List : List) return Element; function Tail (Of.The-List : List) return List; function Construct (The.Element : in Element; And-The-List : in out List) return List;
Решения упражнений 159 function Is-Null (The-List : List) return Boolean; NulLList : constant List; ListJs-Null: exception; private type Item; type List is access Item; NulLList : constant List := null; end List-Handler; К этой спецификации добавлена константа NullJList, обозначающая пустой список. Определение этой константы раскрывается в предыдущей части. На первый взгляд есть одно исключение ListJs-Null, которое указывает при случае, что требуемая операция невозможна в случае отсутствия списка. С другой стороны, в предыдущей части производилась работа с определением неполного типа (которое пополнялось в теле пакета с помощью определения ► type Item is record Element : Element; Next : List; end record A, ). Теперь реализация трех первых примитивов показывает, как использовать раздел структур. Всегда вначале идет функция Head, тело которой содержит только инструкцию ► return Of-The-List. Element ^. Функция Tail приводит к разделению структур, ее тело также состоит из единственной инструкции ► return Of-The-List. Next <*. Следовательно, можно заметить, что список, возвращаемый этой функцией, скорее окончание списка, используемого в аргументе, а не копия хвоста списка. Поэтому в результате выхода инструкции такой, что ► L2 := Tail (L1) <*, два списка L1 и L2 разделяют один и тот же набор ячеек памяти. Следовательно, всякая несвоевременная модификация конца списка L1 скажется на состоянии списка L2. С другой стороны, время выполнения этой функции постоянно, каков бы ни был размер исходного списка, что не имело бы места, если бы этот список копировался. Процедура Construct также вызывает разделение структуры. Вот ее гело, не содержащее ничего, кроме инструкции ► return new Itemy( The-Element, And-TheJList) ^. Эта инструкция провоцирует размещение (по new) элемента списка типа Item, затем инициирует его, используя значение следующего агрегата. Полученный этим способом список все еще разделяет часть компонент с исходным списком. Структура памяти, получаемой с помощью допустимых операций этого вида, представляет собой ориентированный граф, вершинами которого служат части памяти, и в котором существует дуга от одной вершины к другой, если первая вершина содержит логический указа-
160 I А лг о ритмика и программирование на языке Ада тель на вторую вершину. Вершина этого графа будет внешней, если она не достижима из любой другой вершины. Внешние вершины соответствуют в программе переменным-указателям, тогда как внутренние — ячейкам списка. Ясно также, что до тех пор, пока напрямую не изменяется информация, содержащаяся во внутренних вершинах (т.е. в терминологии списков, ни одна из компонент списка не изменяется), информация не изменяется и для существующих связей и вершин, и разделение структур не является опасным. Единственные операции, которые, следовательно, разрешены, это присоединение дуг, выходящих из новых вершин и входящих в уже существующий граф — философия, которой следуют три реализованные примитива. 31. Сложение многочленов, представленных списками Теперь можно построить алгоритм сложения двух многочленов, использующий примитивы, описанные в упражнении 30, так как эти примитивы полны (и поэтому позволяют реализовать всякую функцию, вычислимую с помощью списков), хотя сами детали этого алгоритма мало интересны. Напротив, возможно, было бы наиболее интересным построить эффективный алгоритм сложения разреженных многочленов, свободный от добавления новых примитивов для списков. Сложение двух рассматриваемых многочленов в каком-то смысле есть слияние двух списков, упорядоченных по убыванию степеней о дне* членов. Следовательно, надо перебрать каждый из двух списков, представляющих многочлены, и, как только мономы данной степени ок^ жутся в каждом из представленных многочленов, их надо сложить. Как только будет исчерпан один из многочленов, ничего не останется, как прицепить к концу результирующего многочлена хвост оставшегося. Этим вводится структурное разделение между многочленом-! результатом и тем из двух многочленов-операндов, порядок которого!] (низшая степень одночлена) является наименьшим. Но так как исполь-1 зуются примитивы из упражнения 30, то такое разделение не опасно. „ рН_»|1.|1|4*1»Ы4Ч> Ф Т q|-|—И«Ы+»Ы»1-Ы'1 |ю|1|+н«|>Н-Н»1»1+Ч>1«И LlH 1 =>1+Н °1 Z0 Рис. 6. Сложение двух многочленов, представленных списками '
Решения упражнений 161 На рис. 6 видим схему памяти, представляющую три многочлена: Р = X10 + ЪХг + X2, Q = X4 + ЪХ2 + 2Х + 1 и R = Р + Q, вычисленный с помощью предыдущего метода. Каждый элемент списка на этом рисунке представлен в виде тройки (степень, коэффициент, указатель). Этот метод реализован в алгоритме 18. Построение списка, содержащего частичные последовательные результаты, осуществляется по возрастанию степеней. Следовательно, если один из списков исчерпался, нужно перевернуть промежуточный результат прежде, чем присоединить хвост другого списка. Это делает подпрограмма Reverse-Append, которую можно поместить в пакет, разработанный в упражнении 30. Эта функция реализована, начиная с примитивов управления списком: Head, Tail, Construct и Is-Null. function Reverse-Append (The-List : List; And-The-List : List) return List is x : List := The-List; у : List := And-The-List; begin while not Is-Null (x) loop у .-= Construct (x. Element, у); х := Tail (x); end loop; return y; end Reverse-Append; R <— Null-List; loop if Is-Null(Q) then return Reverse-Append(R, P); elsif Is-Null(P) then return Reverse-Append(R, Q); end if; if Head(Q) • Degree > Head(P) • Degree then R i— Construct(Head(Q), Я); Q <— Tail(Q)\ elsif Head(P) • Degree > Head(Q) • Degree then R <— Construct(Head(P), R); P <— Tail(P); else x i— Head(P) • Coefficient + Head(Q) • Coefficient; if x ф 0 then R i— Construct((Degree => Head(P) • Degree, Coefficient => x), R); end if; p <_ Tail(P); Q «— Tail(Q); end if; end loop; Алгоритм 18. Сумма двух разреженных многочленов Порядок многочлена есть его наименьшая степень, а его высота, 1-1017
162 I Ллгоритмика и программирование на языке Ада обозначаемая через ЦР, — число ненулевых мономов в Р. Если порядок Р больше порядка Q, то сложность алгоритма сложения прямо пропорциональна выражению: JP + число мономов многочлена Q степени большей, чем порядок Р. В этих вычислениях смешаны сложность просмотра списков и сложность вычисления арифметических операций — это вполне разумно в случае многочленов с небольшими целыми коэффициентами, но нереалистично, если арифметика коэффициентов более сложна. 32. Умножение многочленов, представленных списками Пусть Р = J2aiXai, где а,- < a,-+i, и Q — два многочлена, которые требуется перемножить. Их произведение может вычисляться по формуле R = J2aiXaiQ, если предполагается осуществлять умножение, следуя представлению Р в виде суммы одночленов. Легко видеть, что было бы удобно использовать функцию, реализующую умножение одночлена на многочлен. Эта функция легко и эффективно реализуется, если воспользоваться более общей функцией, оперирующей списками таким образом, что на основании данного списка и некоторого преобразования его элементов она выдает новый список, полученный дублированием и преобразованием исходного списка. generic with function Transform (The-Element : Element) return Element; function Map-List (TheAist : List) return List; Реализация этого несколько особенного итерационного цикла — каково должно быть тело пакета List-Handler, если стремиться к эффективной реализации? — предлагается читателю. Чтобы получить функцию умножения одночлена на многочлен, конкретизируем функцию Map-List с помощью следующей процедуры преобразования: function Multiply (M : Monomial; P : Polynomial) return Polynomial is function Multiply-M-By (MA : Monomial) return Monomial; function Result is new Map-List (Transform => Multiply-M-By); function Multiply-M-By (MA : Monomial) return Monomial is begin return (Degree => M.Degree + MA.Degree, Coefficient => M.Coefficient * MA.Coefficient); end Multiply-M-By; begin return Result (P); end Multiply;
Решения упражнений 163 Первая функция Multiply-M-By позволяет умножать произвольный одночлен на параметр М функции Multiply; вторая функция — конкретизация на этом преобразовании данного итеративного цикла — дает искомый результат. Следует заметить, что в этом контексте невозможно выполнить конкретизацию вне функции Multiply, потому что она зависит от одного из аргументов этой функции. Это цена, которую приходится платить за модулярность множества. Кроме того, реализация функции Multiply-M-By существенно использует целостность исходного кольца; без этого предположения было бы необходимо отдельно рассматривать случай, когда произведение двух коэффициентов равно нулю, что значительно усложнило бы алгоритм. Имея эту элементарную функцию перемножения, можно теперь реализовать умножение многочленов в общем случае. Но, учитывая сложность алгоритма сложения, рассмотренного ранее, представляется логичным сделать так, чтобы в процессе последовательных сложений структурное разбиение было бы как можно более протяженным. Рассмотрение умножения двух многочленов, представленных в упражнении 29, показывает, что многочлен Р, по которому разлагают произведение в ряд последовательных умножений, должен пробегаться в порядке возрастания степеней одночленов, тогда как представление в виде списка облегчает скорее противоположное направление чтения. Так, максимизируя структурное разделение, минимизируют сложность прохода списков, представляющих отдельные многочлены-слагаемые. Надо заметить, что нижеприведенная функция будет встроена в тело пакета управления многочленами и что, как следствие, она может использовать внутреннюю структуру многочленов. function Multiply (Р : Polynomial; Q : Polynomial) return Polynomial is RP : Polynomial := Reverse (P); R : Polynomial := Zero; begin while not Is-Null (RP) loop R := R + Multiply (Head (RP). The.Monomial, Q); RP := Tail (RP); end loop; return R; end Multiply; Можно дать оценку сложности этого алгоритма умножения двух многочленов в нескольких частных случаях, рассматривая процесс ум- н*
164 I Ллгоритмика и программирование на языке Ада ножения на приведенной сле- i a\XaiQ , ва схеме. В этих примерах i ^Х 2Q \ так называемый левый много- "/"■'/»'"1 ™,\'А" член является тем, по кото- Vfl,LJ ——' рому осуществляется разложе- , аз А ЪЦ , 1 -—I ние в произведение двух мно- , (а3Ха'э + 'а2Х°* + aiX"1')<?", гочленов. Первый случай со- алХалО ответствует умножению Р на Q, когда последний многочлен , (сцХ01* + a$Xa* + а2Ха* + a\Xax)Q , является плотным, т.е. образован из мономов с последовательно идущими друг за другом степенями. Начинают со сложения двух мономов aiXaiQ и a2Xa2Q\ для этого нужно лишь пробежать список, представляющий второй моном, и сложение завершается присоединением конца первого монома. Затем это повторяется, когда добавляют многочлен азХаъ(2 к только что полученному результату; при этом пробегают только этот последний моном, и т.д. Следовательно, каждое сложение имеет сложность, заключенную между JQ и 2JQ. Так как это повторяется для всех мономов из Р, в целом для алгоритма умножения получается сложность, пропорциональная JP x JQ. Можно рассмотреть произведение левого многочлена Р = J2*iZo a*X% на правый Q = £^Z0 ^jX*, которое даст нам максимальную сложность произведения произвольного многочлена на плотный многочлен. Здесь на каждой итерации (или промежуточном сложении) получают сложность пробега 2q — 1; с учетом повторений для всех мономов из Р это дает общую сложность пробега (р— l)(2q — 1). Пример, дающий нижнюю границу сложности для произведения этого типа, получается вычислением RQ, где R = 5^л=о cffXkq. На каждой итерации сложность пробега равна д, что дает общую сложность пробега (г — l)q. В первом примере для произведения PQ, если бы разлагать многочлен Р по убывающим степеням, то последовательно получали бы: д + (?-1),Н1) + (д-1),...,(д + р-2) + (д-1),ив целом (Р - 1) (2q— l)+(p—2)(р—1)/2. Для второго примера последовательные пробеги оценивались бы q, 2q, 3g, ..., (г — l)g, и в целом r(r — l)q/2. Другой типичный случай: многочлен, стоящий в произведении справа, является разреженным, а тот, который слева, — плотным (пример произведения QR). Принцип пробега, описанный в схеме, остается в силе, с той лишь разницей, что высота промежуточного результата удваивается на каждой итерации, что дает сложность пробега, равную г + (г - 1) + г + (2г - 2) + г + (Зг - 3) + • • • + г + (q - 1)(г - 1), т.е. (q — 1)г + q(q — 1)(г — 1)/2. Разложение левого многочлена Q по убыва-
Решения упражнений 165 нию степеней дает точно такой же результат. Итак, разложение по убыванию степеней многочлена, стоящего в произведении слева, дает меньшую сложность, нежели если разлагать тот же самый многочлен в обратном порядке: квадратичную в лучшем случае (плотный многочлен справа), или кубическую в худшем случае (плотный многочлен слева и разреженный справа). В любом случае разложение в порядке убывания степеней дает большую сложность. 33. Действия с формальными рядами а. Формула ($2сцХ%) = ^2a?X2t + J2i<j 2ащХ*+* позволяет констатировать, что вычисления квадрата ряда возможно и, что для вычисления n-го коэффициента формального ряда, являющегося результатом, необходимо п начальных коэффициентов исходного ряда. Более точно, вот список итераций для осуществления чтения г-го коэффициента: (г) вычислить Si = aiX2i + 2 ]П ащХ*+> 0$j<i (тогда Е2 = So + Si + S2 + • • ■), (ii) прибавить Si к многочлену (вычисленному с использованием г — 1 первых слагаемых), аппроксимирующему формальный результирующий ряд, {%%%) вывести t-й коэффициент результирующего ряда; этот коэффициент больше не будет участвовать в последующих вычислениях. То, что было описано, есть теоретический алгоритм, показывающий выполнимость вычисления квадрата формального ряда. Осталось предложить программу, осуществляющую эти вычисления: структуру данных, управление, переменные и т.д. Как ясно из предыдущего описания, исходный формальный ряд, коэффициенты которого читаются последовательно, надо представить динамической структурой — например, в виде списка, состоящего из пар коэффициент-степень (в действительности, в стек помещается не исходный ряд, а его копия, эффективность обязывает!). По причине однородности, коэффициенты вычисляемого ряда размещают списком, аналогичным коэффициентам, частично вычисленным. Для манипулирования этими списками используются примитивы, введенные в упражнении 30. Каждый список, участвующий в алгоритме, представляет многочлен, аппроксимирующий формальный ряд, мономы кото-
166 I Ллгоритмика и программирование на языке Ада рого упорядочены по возрастанию (начиная со слагаемых наименьшей степени в списке). input a; Square-0/.А <— а2Х°\ Doublet <— 2аХ°\ аих <— 0; i <— 0; output а2Х°; loop input a; ii— i + 1; аих <— аих + (аХ* х Doubled) 0 a2X2i\ output First(aux)\ Double-A i— Double-A 0 2aX*\ Square.Of-A i— Square.Of-A 0 First(aux)\ aux i— Tail(aux)\ end loop; Алгоритм 19. Квадрат формального ряда В алгоритме 19 символ «ord» обозначает порядок формального ряда (т.е. степень монома наименьшей степени). Символ ф обозначает формальное сложение многочлена и монома степени, превосходящей степень многочлена или не превосходящей порядка многочлена, что с практической точки зрения означает добавление элемента к началу или к концу списка. Кроме того, обозначение 2аХ% х Double-A означает список, в котором элемент с номером j является произведением элемента с тем же номером в списке Double-A на моном 2аХ%. Примитивы input и output — это основные примитивы алгоритма, работающего с потоком данных: входные данные, полученные благодаря примитиву input, в принципе, порождают результат, выводящийся с помощью примитива output. Заметим в заключение, что запоминание результирующего формального ряда Square-Of-A не является необходимым для алгоритма. Ъ. Определим производную формального ряда В = Ап, полученную по правилу В' = пА'Ап~1. Если это выражение умножить на Л, то получим АВ' = пА'В. Теперь можно почленно сопоставить оба формальных ряда: АВ' и А'В. Для члена степени г — 1 получим iaobi + 12)=i (г — J)ajbi-j = nYl)=iJaj^i-jy нто дает нам формулу для вычисления 6,-: I » bi = —:J2 ((n + l)i - i)ajbi4\ она позволяет вычислить очередное значение. Детали эффективного алгоритма, осуществляющего вычисление Ап, оставляются читателю.
Решения упражнений 167 Оценим сложность алгоритма: в дальнейшем будем пренебрегать умножениями на целые константы и будем рассматривать только операции над коэффициентами формальных рядов. Очевидно, что для вычисления г-го терма ряда В необходимо 2г умножений (г умножений скалярных) и г — 1 сложений. Знание г — 1 членов этого ряда и г членов формального ряда Л также необходимы, что дает сложность: г (г + 1) умножений и г (г — 1) сложений в базовом кольце. с. При применении к многочленам изученных в двух предыдущих задачах принципов некоторое упрощение может быть достигнуто для многочленов с конечным числом членов. Имеется также возможность реализовать эти алгоритмы для многочленов, представимых массивами (если иметь дело с плотными или не очень разряженными многочленами) . Обсудим теперь модификации алгоритма возведения в степень в случае действий с многочленами, с учетом того, что алгоритм возведения многочленов в квадрат был изучен в одном из предыдущих упражнений. В сумме для г-го коэффициента, встречающейся при вычислении многочлена Vй, число слагаемых, которые находятся под знаком суммы, зависит не только от п, но и от степени многочлена, над которым производится действие. Точнее, при г > 0: min(»,deg'P) Ь{ = —: х V ((n + l)j - i)ajbi4l и сложность вычисления существенно уменьшается. Действительно, суммы, позволяющие вычислить коэффициент, имеют самое большее degP членов. Следовательно, вычисление коэффициентов результирующего многочлена требует: п умножений для вычисления &о, г умножений в базовом кольце и г — 1 сложений в базовом кольце, если г ^ degP, degV умножений и deg7> сложений в базовом кольце, если г > degP. Таким образом, получаем общую оценку сложности, не превышающую <Рп умножений и сложений. 34. Определение нулей многочлена по модулю ра а. Решение этого уравнения тривиально в случае, когда а обратим по модулю п. Если а не обратим, то вычислим d = НОД(а, п) и рассмотрим два случая: в лучшем 6 делится на rf, в этом случае разделим уравнение нас! и решим уравнение а'х = &' по модулю пх, с обратимым а'. Hjitttfcd^O, «и^та^ I Если 6 не де- if 6 mod d± 0 then return 0; лится на rf, то else return {ub/d + kn/d \ 0 ^ к < d}\ уравнение не end if; | имеет решений.
168 I Ллгоритмика и программирование на языке Ада Можно видеть, что в любом случае алгоритм должен начинаться с вычисления НОД и коэффициентов Безу для а и п. В случае, когда а необратим и 6 делится на d, каждому решению по модулю п' отвечают d решений по модулю п, отличающихся слагаемым, кратным п'. Заметим, что этот алгоритм неявно, но конкретно, обрабатывает случай, когда а = 0. b. Для доказательства этого факта с помощью использования двойной индукции заметим, что (р + 1)(р + 2)... (р + п — 1)(р + п) = Р-(Р+ 1)(Р + 2)... (р + п - 1) + п • (р + 1)(р + 2)... (р + п - 1), где каждое слагаемое, удовлетворяющее тому или иному предположению индукции, делится на п\. К тому же, в данном рекуррентном соотношении нас интересует целочисленность величины (п1"р). c. Формула Тейлора Р(а + tpQ) = Р(а) + tpaP'{a)/l\ + • • • + tdpadP^(a)/d\ доказывает первое свойство, так как вопрос а позволяет показать, что р(*) делится на i\. Доказательство необходимого и достаточного условия очень просто, оно опирается на тот факт, что если разделить предыдущую формулу на ра, то получим доказательство в одну сторону, а если умножить полученную формулу на ра, то получится доказательство в другую сторону. Алгоритм получается немедленно: I Е <— 0; for a in {нули P по модулю ра] loop for t in {решение P(a)/pa + tP\a) = 0 mod p1} loop E<—£и{а-Ира}; end loop; I end loop; d. Предположим, что Р имеет единственный корень а, по модулю р1, который поднимает корень а. Сравнение P(ai+tp%) = P(ai)+tp*P'(ai) = P(a,) +tp%P'(a) (modp,+1) доказывает существование и единственность такого t по модулю р, что P(a,- + tp%) = 0 (modp,+1). Кроме того, tpx дается формулой tpx = —P{ai)P'{a)~l. Это доказывает, что Р имеет один и только один корень a,-+i по модулю р,+1, поднимающий корень а. Дальше достаточно воспользоваться индукцией. e. В действительности сформулированное в предыдущем вопросе свойство может быть обобщено и передоказано по модулю р*+а для корней Р по модулю ра для всякого k ^ а. Необходимое и достаточное условие выглядит тогда так: P(a + tpa) = 0 (mod p*+a) тогда и только тогда, когда Р(а)/ра + tP'(a) = 0 (modp*). Единственное изменение
Решения упражнений 169 состоит в том, что надо заменить р1 в предыдущем алгоритме на рк и рассмотреть к как параметр алгоритма. f. Используя алгоритмы восстановления в Zp<*+fc для нулей по модулю ра, можно сконструировать алгоритм подъема корней из Ър в Zpn, минимизирующий количество промежуточных этапов. Как и выше, определим корни по модулю р, что делается очень просто, если р — простое число, — подстановкой последовательно всех точек из 2£р. Это первичное исследование заканчивается, когда будут найдены все корни многочлена Р, их число равно степени НОД(Р, Хр — X). Далее поднимаем эти корни в Zp2, Zp4, ..., каждый раз удваивая показатель р. Этот процесс заканчивается, когда будет получена достаточно большая степень р, не превосходящая рп, и далее надо применить алгоритм для значения к, которое не обязательно максимально. Например, для перехода от Zp к Ъры вычисляются решения по модулям р2> р4, р8, р1в, р32 и, наконец, р57 при к = 25. 35. Циклическая перестановка элементов массива a. Алгоритм является простым обобщением классического алгоритма обмена значениями двух переменных. I Аих <— Т(п - 1); for t in reverse 1 .. n — 1 loop Г(,)<— T(.-l); end loop; I T(0) «— Aux\ b. Можно показать, что если i + kp = i + к'р mod п^ток — к' делится на n/d, где d есть НОД пир. Следовательно мощность множества индексов есть n/d. Ротация (т.е. циклическая перестановка) элементов массива это, в действительности, сдвиги индексов и, по доказанному выше, эти сдвиги определяют орбиты, являющиеся общими инвариантами трансляций, длины n/d, элементы которых находятся на расстоянии р. Следовательно, осуществление ротации массива проходит по-орбитно. Это дает нам алгоритм: I for Orbite in 0 .. d — 1 loop Index <— (Orbite — p) mod n; Aux <— T(Index); for к in 1 .. n/d — 1 loop T(Index) i— T((Index — p) mod n); Index i— (Index — p) mod n; end loop; T(Index) i— Aux; J end loop;
170 I Ллгоритмика и программирование на языке Ада Сложность полученного алгоритма, следовательно, составляют п + НОД(п,р) присваиваний элементов массива, что дает рп или (п — р)п необходимых присваиваний, если повторно применять алгоритм из вопроса а. с. Обмен двух участков (дополнительных) массива сводится к повороту таблицы в лучшую сторону в смысле некоторого числа позиций. Теперь достаточно применить предыдущий алгоритм. 36. Элементарные операции в арифметике повышенной точности а. Алгоритм 20-А получается непосредственно. Важным моментом является управление переносом. А. Сложение carry <— 0; for t in 0 .. m loop aux i— tit + Vi + carry; if aux < 6 then Wi i— aux; carry i— 0; else Wi i— aux — b; carry <— 1; end if; end loop; if carry = 1 then и + v > bm*1 wm+i i— 1 end if; В. Вычитание carry i— 0; for t in 0 .. m loop aux i— ti« — Vi — carry; if aux < 0 then Wi i— aux + 6; carry i— else Wi <— aux; carry <— 0; end if; end loop; if carry = 1 then n< » * * » Ът*г +u~v end if; ■i; Алгоритм 20. Вычисление (ит ... щ)ь ± (vm ... vo)b b. В полном алгоритме 20-В, если и ^ v, то легко доказать по ин-; дукции, что carry = 0 или 1 и 0 ^ (щ — Vi — carry) + b < 26. Что делать, если и < vl В этом случае можно проверить, что вычи-|, сляемое число представляет 6m+1 + и — v и то, что и < v может быть обнаружено после цикла проверкой текущего значения; до того, ка^ цикл будет проверять текущее значение. c. Алгоритм 21 основывается на следующем соотношении: (и,-+1.. .и0) х v = (щ .. .uq) х v + Ui+iv6,+1.
Решения упражнений 171 Можно доказать, что в этом алгоритме Wi являются цифрами ввиду соотношений: 0 ^ carry < 6, аих ^ (6 — 1)6 < б2. Этот алгоритм легко распространяется на (наивное) умножение двух чисел произвольной длины. carry <— 0 for t in 0 .. m loop Ьщ\ ^йф +%&*# *$ШМШ <У*&)&$М' аих i— v x ti, + carry; Wi <— aux mod 6; carry «- end loop; wm+i <— carry; — [aux/b\\ Алгоритм 21. Вычисление v x (um ... г/о)б, 0 ^ v < 6 d. Остаток г = (un .. .щ)ь mod v, где v — цифра, вычисляется по алгоритму Горнера, где полагается rn+i = 0 и г,- = (r,+i x 6 +tz,) mod v при г = п,п — 1,...,0. Искомое значение есть го, что доказывается с помощью г,- = (un ... и,)б mod v. Можно видеть, что алгоритм 22-А вычисляет частное [u/v\y а алгоритм 22-В вычисляет остаток tz mod v. Распространение на числа произвольной длины А. Вычисление частного г <— 0; for j in reverse 0 .. n loop aux i— г x 6 + w>; д> i— [aux/v\\ r <— aux mod v; end loop; В. Вычисление остатка r<— 0; for j» in reverse 0 .. n loop г <— (г х 6 + tij) mod v; end loop; Алгоритм 22. Деление (um ... ио)ь на v при 0 ^ v < 6 этих двух операций не является таким простым, как в случае умножения. В действительности, это тема дальнейших упражнений. 37. Деление в арифметике повышенной точности Предположим, что v имеет нормализованную запись (т.е. vm ф 0) и, кроме того, п ^ т (запись не обязательно нормализованная). Надо найти частное и остаток с помощью массива q = (qn-m • • -QiQo) и г = (гт...Г1Го). Заметим, что условие u/v < 6 можно записать также в виде (um+i .. .и\)ь < {vm .. .viv0)b. В самом деле, (um+i ...u0)/v <b <* {um+1...u0)/b<v <* L(um+i ...u0)/b\ < v
172 I Алгоритмика и программирование на языке Ада и L(um+i • • • v>o)/b\ = (um+i ... и\). Вот общий алгоритм вычисления пары (частное, остаток): (гп+1гп...г1Го) <— (Otin...tiiti0); for j in reverse 0 .. n — m loop -и:щ(щ^ш, > ^Й)\****** '^V*-**jc *¥*X:- Яз <— L(rm+>+i rm+j ... r>)/vj; (rm+>+i ... r>) i— (rm+j+i ... r>) - gjv; end loop; Частное, используемое в цикле, является частным двух чисел, удовлетворяющих порождающему условию (5) (и, следовательно, каждое вычисляемое qj является цифрой!). Чтобы убедиться в этом, достаточно заметить, что перед присваиванием qj имеем: r<vV+l «=> (rm+<7+i ...rj+i)6 < v, что, по предыдущему замечанию, равносильно (rm+j+i.. .rj)/v < 6. 38. Вычисление частного методом проб и ошибок а. Предположения (5) включают неравенство (um+i.. .щ)ь < < (vm ... vi^obj откуда um+i ^ vm. Читатель может проверить, что тогда: min(L(l*m+l6+Um)/«mJ, *-!) = { *(мЛ;1б + 1^)/!^ если um+i = vm, J иначе, и проверка для определения наименьшего из двух чисел сводится к проверке um+i = vm. Докажем сначала, что q ^.q. Так как q ^ 6 — 1 (предположение (5)), можно очевидно предположить, что q = L(um+ib + wm)/t;mJ. Запишем: и = um+i&m+1 + umbm + a, t; = vm6m + /?, с /? < bm и а < 6m. Тогда получим и — qv = (um+i6 + um — qvm)bm + а — q(3. По определению g um+i& + um < vm(g + 1) и, следовательно, Wm+iH um - vmq ^ vm - 1, что влечет u-qv ^ (vm-l)bm+<*-qP ^ (vm-l)bm+a ^ vmbm+(a-bm) < vmbm ^ v, и неравенство и — qv < v дает q ^ q. Для доказательства второго неравенства введем 6 = q — q. Исполь- . . . Wm+iHum г/ и зуя неравенство для q: q ^ ^ —j— и для q: q > 1,
Решения упражнений 173 получаем: 6 = q-q ^ и и и v — vmbm и Ьт —i^T--*1 = ^— + 1 ^ г=- + 1, vmbm v v vmbm v vmbm с u откуда ovm ^ —h vm и, следовательно, 6v„ ^ [-J +vm = q-6 + vm ^ 6-1-<J +vm. Отсюда получаем окончательно S ^ (6 + vm — l)/(vm + 1). Эффективная реализация деления требует уже использования деления числа из двух цифр на число из одной цифры. Ь. Записав: и = um+i6m+1 + umbm + um-\bm~l + a, v = vmbm + flm-ifr"1"1 +/3 с а < Ът-1 и /? < б"1"1, получаем: u-gv = ((um+i& + um -gvm)6 + um_i -tfvm-ijb"1"1 + <*-?/? = .= (f6 + um_! - gvm_1)6m-1 +a- qj3. В случае (г) f& -|- um_i - gvm_i ^ -1, что дает: и - qv <£ -б"1"1 + a - q(3 < -б"1"1 + а < -б"1"1 + б"1"1 = О, анеравенство u—qv < 0 дает q ^ g—1. В случае (ii) rb+um-i—qvm-i ^ О и, следовательно, и - qv ^ а - q/3 ^ -g/? ^ -6 х 6m_1 ^ -vmbm ^ -v. Тогда неравенство и — (q — l)v ^ 0 дает q^ q — 1- Алгоритм, изображенный справа, показывает, как интерпретировать случаи (г) и (гг) вопроса Ъ: они позволяют быстро корректировать (вычисления, которые здесь участвуют, относятся к числам из двух цифр) начальную оценку способом получения исправленной ««—b([b^j,b-l); Г < tim+i6+ Um —qVm\ loop-««'J exit when qvm-i ^ bf + tim_r, q i— q - 1; r <— r + vm; end loop; $ Ш $. «0Я|- £***;$**£ - 1 оценки g, где <?G{g,g-l}. К примеру, зафиксируем 6 = 10, т = 2, и = (usU200)io и {q+l)vi ^ 10(10^3+^2 — (q+ 1)^2), тогда исправленная оценка равна начальной оценке, которая равна q + 1 (вместо q). Например, если и = 5000, то возможные значения v, для которых исправленная оценка равна q + 1, следующие: 626, 627, 628, 629, 715, 716, 717, 718, 719, 834, 835, 836, 837, 838, 839.
174 I Алгоритмика и программирование на языке Ада с. Если г обозначает остаток от деления и на vy то имеем О ^ г < 6m+1, откуда следует, что достаточно определить г mod 6m+1. Упражнение 36, для чисел и и q веса ^ т + 1, позволяет реализовать одновременно вычисление проверки и ^ qv и вычисление (и — qv) mod 6m+2, следовательно и вычисление (и — qv) mod 6m+1. Кроме того, хотя участвующие числа удовлетворяют соотношениям для весов ^ га + 1, внимательное изучение показывает, что можно вычислить (и — qv) mod 6m+1 в массиве р = (рт, pm_i,..., ро) и реализовать проверку и ^ qv. Тогда (<?,г) можно определить следующим образом: если и ^ qv, q = q, г = р\ если и < qv} q = q — 1, г = (р + v) mod 6m+1. Получили алгоритм 23. if tim+i = vm then $ <— Ь - 1; else $ <— [ttm^*+ttm]; end if; ri tim+i6-f Urn —qVm\ loop exit when qvm-i ^ bf + tim_i; $<—$-l;r<—r + vm; end loop; Одновременное вычисление р = (и — qv) mod 6m+1 и проверка и ^ gv if и ^ qv then (g,r)<—($,p); else (<?,r)f—($-1, (p + V)mod6m+1); end if; Алгоритм 23. Частные и остатки от деления (um+i ... щ) на (vm • • • «о), где tx/v < 6, т ^ 1 39. Деление: операция нормализации ] a. Известно, что 0 ^ q — q ^ (b + vm — l)/(vm + 1). Для получения! q — q ^ 2 достаточно иметь (6+vm — l)/(vm + l) < 3, что, после проверки J эквивалентно vm ^ [6/2J — 1. 1 b. Исправленная оценка q удовлетворяет соотношению qvm-\ ^ 6г+1 txm-i,T.e.: | что влечет: (vm6 + vm-i)q ^ um+ib2 + um6 + um_i ^ г/. Отсюда следует! v 1 u — qv> u(l - - r). 1
1- IfemeHu* упражнений 175 L (Однако, V УтЬт + Vm-lb™-1 - V _ ttm-26m~2 + . . . + Vp vmbm + vm_i6m-1 " vmbm + vm_16m"1 " vmbm + vm_16m"1 I -6m_1 -6m_1 _ -1 J vmbm + Vm-ib™-1 ' vmbm ~ vmb k следовательно, "6~?t; > — г/. Оценка g по предположению отлична от k так что q = q — 1 и поэтому * - и /, w 1 ч f u —gv = v + u —gv> v Г = v(l -J, *. vmb v vmb k наконец, используя то, что u/v ^ q -\-l = q ^.b — 1, и предположение ^m ^ [6/2J, имеем: 6-12 u-qv > v(l-—T) }> v(l- -). vmb b с. Ясно, что и' имеет вес ^ п + 1, так как [b/(vm + 1)J — цифра, Ш осталось доказать, что г/ имеет вес т. Рассмотрим сначала частный случай т = 1: 1 ^ v ^ 6 — 1 => [6/2J ^ v[b/(v + 1)J ^6—1 (границы достижимы). Из v[b/(v + 1)J < (v + 1)LV(V + 1)J ^ b получаем правое неравенство. Докажем левое неравенство. Так как всегда v[b/(v + 1)J ^ v, то можно предположить, что v < [6/2J. Тогда: v[6/(v + lj > v(-^ — 1) = f{v). Но /(«) - /(1) = (v - l)^=i. Поэтому: «<L&/2J => t» ^6/2-1 =» /(»)-/(l)>0 => /(»)>/(l) = 6/2-1, откуда u[6/(v + 1)J > [6/2J — 1, что и требовалось доказать. Перейдем к общему случаю. С одной стороны: v' = [b/(vm + l)\v < [b/(vm + l)\(vmbm + bm) = = [b/(vm + l)\(vm + l)bm<bm+\ Что доказывает, что v' имеет вес ^ га (следовательно, вес ш), а с другой стороны: v1 = [b/(vm + l)\v > vm[b/(vm + l)J6m > [Ь/2\Ьт, что и доказывает, что старшая цифра у v' не меньше [Ь/2\. Из деления и' на v' можно вывести деление и на v. Действительно, если и' = v'q' + r' и и = vq + r, то q = q' и г = г'/d (имеется ввиду точное деление числа на цифру). Окончательный алгоритм деления получается объединением алгоритмов, изученных в предыдущих упражнениях.
176 I Алгоритмика и программирование на языке Ада 40. Самовоспроизводящаяся программа Решением задачи является следующая программа: with Text JO; use Text JO; procedure R is procedure P (S : String) is use Ascii; begin PutJine (S); PutJine ('(' & Quotation & 5 & Quotation b%);end R;%); end P; begin — специальная строка end R; В этой программе строка 10 содержит весьма длинную инструкцию (из которой можно удалить все ненужные пробелы): /Y"WITH Text_I0;USE Text_I0; PROCEDURE R IS PROCEDURE P(S:String)IS USE ASCII;BEGIN Put-Line(S); Put_Line( ' ( 'ftQuotationftSftQuotationfty.) ;end R;%); END P; BEGIN ?"); : Если нужна программа с действительно более короткими строками (строка "10" содержит около 160 символов), то это, разумеется, можн но сделать, хотя программа станет чуть длиннее. Символ и не можете просто появиться в цепочке - аргументе Р в строке 7, там была использована константа Quotation, определенная в пакете Ascii. Наконец, была использована одна из возможностей языка Ада, которая позволяй ет разграничивать цепочки символов со знаком У,, если не располагаем кавычками. Все использованные уловки только укорачивают програм-] му, но не делают ее возможной. Можно заметить, что эта программа не воспроизводит знак за знаком оригинальный исходный текст. Она! порождает программу, которая эквивалентна. И пусть этот недостатом кажется неприемлемым, зато идея проста: эта программа порождает! программу Р, которая порождает Р... J
Глава II Евклид и основная теорема арифметики Вычислить наибольший общий делитель двух целых чисел а и 6. Такое задание иногда получают лицеисты на уроке математики. Они начинают с разложения чисел а и 6 в произведение степеней простых чисел (используя при необходимости нулевые показатели для степеней простых чисел, чтобы выровнять количество простых чисел в разложениях): а = р°*р? .. .р«™ (а,- £ 0), 6 = j41j4' .. .р£» (/?,• £ 0) (р,- простое), Потом они применяют хорошо известную формулу, которая дает наибольший общий делитель (НОД): НОД(а, 6) = p\nf(*b/M х pinf(*3,/b) х . . . х pmf(amt0m) Легко используемый в работе с малыми числами (например, а = 84 = 22 х 3 х 7, 6 = 198 = 2 х З2 х 11, что дает НОД(84,198) = 2x3 = 6), этот метод быстро становится неприемлемым для больших чисел. Рассмотрим, к примеру а = 1100005423 и 6 = 1100 000 077. Разложение этих двух чисел в произведение простых множителей с помощью обыкновенного калькулятора, требующее примерно 104 делений, убеждает, что приведенная выше формула совершенно бесполезна. К счастью, 22 века назад греческий математик Евклид открыл эффективный метод вычисления НОД. Этот метод, известный как алгоритм Евклида, настолько фундаментальный, что слово алгоритм используется математиками (помимо своего обычного смысла в информатике) для выявления делимости в некоторых кольцах. Можно с полным основанием считать Евклида предшественником алгоритмической алгебры. Мы продемонстрируем этот алгоритм на примере, рассмотрение которого не привело лицеистов к успеху. 12-1017
178 II Евклид и основная теорема арифметики Выполним евклидово деление (вводимое в начальной школе и состоящее в нахождении частного и остатка) числа а = 1100005423 на число 6=1100000077, т.е. запишем а = bqi + г2, где q\ = 1 и г2 = 5346. Осуществим аналогичный шаг с 6 и г2, что приводит к 6 = v^qi + гз с <?2 = 205 761 и гз = 1 771. Продолжим затем таким же образом с г2 и гз и т.д. В результате получим следующую таблицу евклидовых делений: го = 1100005423, П = 1100 000077, г2 = 5346, гз = 1771, г4 = 33, г5 = 22, 1100005423 1100 000077 5346 1771 33 22 = = = = = = П = Г2 = гз = г4 = Гь = г6 = 1100 000 077 х 5346 1771 33 х 22 х Их 1100000077, 5346, 1771, 33, 22, и, 1 + 5346 х 205 761 + 1771 хЗ + 33 53 + 22 1 + 11 2 + 0 (91 (?2 (?3 (?4 (95 (Яб = = = = = = 1), 205761), 3), 53), 1), 2). Алгоритм заканчивает работу после получения нулевого остатка при делении 22 на 11. Последний полученный ненулевой остаток г$ = 11 является НОД чисел а и 6. Чтобы убедиться в этом, надо, с одной стороны, увидеть общее равенство (становящееся однородным с обозначением го = a, ri = 6, Г7 = 0): r,_i = г,д, + r^+i для 0 ^ г ^ 6 и, с другой стороны, воспользоваться свойством натуральных чисел: d \ bq+r и d \ Ь тогда и только тогда, когда d \ b и d \ г. Эта последняя эквивалентность приводит, в частности, к равенству НОД(6д + г, 6) = НОД(6, г). Из этого следует, что величина НОД(г,-,г,-+1) не зависит от г. При г = 0 она равна НОД(а, 6), а при г = 6 — НОД(г6,0) = г6 = 11, что подтверждает результат, полученный выше. Замечание. Если необходимо применить первый метод вычисления НОД а = 1100005 423 и 6 = 1100000077, то надо разложить эти два числа в произведение простых множителей. Поиск простых делителей для разложения а и 6 и найденный общий простой делитель 11 приводят к констатации, что числа а/11 и 6/11 оба являются простыми. Эта последняя проверка требует при использовании наивного метода лицеистов приблизительно I х (л/Т0«/2) = 104 делений (каждое из двух чисел а/11 и 6/11 имеют порядок 108). Разложение на простые множители а = 11 х 100 000 493, 6 = 11 х 100 000 007 снова дает НОД(а, 6) = 11,
II-1 Обобщение арифметики целых чисел 179 но как это далеко от итераций алгоритма Евклида! Зато первый метод дает те сведения, которые не дает второй. Вот второй аргумент, доказывающий, что г6 = 11 есть Н0Д(а,6). Хотя он очень похож на первый, приведенный выше аргумент, но имеет одно преимущество. Он выделяет незамеченное в прошлом понятие, а именно соотношение Везу. Заметим, что bq + г и 6 — линейные комбинации 6 и г и наоборот (речь идет о линейных комбинациях с коэффициентами из Z). Если обозначить через Z(bq+r) + Zb множество линейных комбинаций bq + г и 6 с коэффициентами из Ъ, то получим равенство множеств Z(bq + r) +Ш = ЪЬ+Ъг. Множества Ъг{ + Ъг{+\ являются одними и теми же. В частности, имеем Za + Zb= Zr6, что соответствует отношениям f*6 | а, **б | 6 и г6 Е Za + Zb. Используя существование целых чисел и и v (которые мы и не старались вычислить), получаем г$ = иа + vb. Легко проверить, применяя последнее равенство, что S \ г б равносильно S \ а и S | 6. Это снова доказывает, что г6 = НОД(а, 6). Замечание. Сложение оставляет на месте множество ЪЪ+Ът. То же верно для умножения на элементы из Z. Математики называют такое множество идеалом. Это основное понятие, к которому мы будем неоднократно обращаться в дальнейшем. Надо отметить последний важный пункт, который позволяет убедиться, что все лицеисты Франции и Наварры находят тот же самый результат, когда вычисляют НОД с помощью первого метода. Правильность их метода основывается в действительности на следующем результате (и это еще надо доказать): (1) Теорема (основная теорема арифметики). Всякий элемент иэТ$* разлагается на простые множители. Это разложение однозначно с точностью до порядка простых сомножителей. Теперь декорации готовы. В последующих сценах мы введем и свяжем различные концепции: евклидово деление, НОД, соотношение Везу, разложение на простые множители, идеалы... 1 Обобщение арифметики целых чисел Мы коснемся теперь общих понятий теории делимости. Это предполагает введение точных определений основных понятий, без которых математик не может работать, и выявление их основных свойств. Чтобы избежать появления длинного списка определений/утверждений, мы 12*
180 II-1 Обобщение арифметики целых чисел выбрали в этом разделе конкретный пример для изучения — кольцо целых чисел Гаусса, сообщая предварительно минимальное количество сведений, позволяющих работать с этим объектом. Другие результаты, относящиеся к свойствам делимости, будут изложены в следующем разделе. Сразу же уточним, что определения, которые последуют, ориентированы на теорию делимости, отдающую предпочтение элементам. В общих чертах будут рассмотрены алгебраические структуры, в которых основная теорема арифметики справедлива для их элементов. Существуют и другие теории делимости (кольца Дедекинда), в них основная теорема арифметики справедлива для идеалов. 1.1 Делимость и неприводимые элементы (2) Определение. Элемент х коммутативного и унитарного1 кольца А называется единицей А или обратимым в А, если найдется такой элемент у Е А, что ху = ух = 1. Множество всех единиц в А является мультипликативной группой и обозначается U(A). (3) Определения. (г) Элемент а кольца А делит b (в А), если существует с Е А такой, что b = ca. Будем говорить также, что b кратно а, и отмечать этот факт в виде а \ Ь; или, если хотим уточнить кольцо A, a \a Ь. Это свойство делимости может быть эквивалентным образом выражено в терминах идеалов (обратим внимание на перевернутость <0 по отношению к «\») следующим образом: a \ b эквивалентно АЬ С Аа. (гг) Заметим относительно свойства делимости «|», что два элемента а и Ь, удовлетворяющие равенству Аа = АЬ, неразличимы. Это отношение между а и b является эквивалентностью. В этом случае мы говорим, что а и b ассоциированные элементы, и применяем запись a ~ b, или, если требуется уточнить кольцо А, а ~а Ь. Если кольцо А без делителей 1В этой книге (за исключением беглого упоминания других ситуаций) все рассматриваемые кольца предполагаются коммутативными и унитарными (т.е. с единицей. — Прим. ред.). Добавим, что для «хорошей» теории делимости кольца должны быть целостными. Можно было бы попытаться ограничится только целостными кольцами, но такая точка зрения чересчур стеснительна в отношении таких понятий, как нётеров характер, простой идеал или максимальный идеал... Использование свойства целостности (без делителей нуля) или необязательно целостности будет уточняться по мере необходимости.
II-1.2 Что такое факториальное кольцо? 181 нуля, то оба элемента равны с точностью до обратимого элемента, т.е. существует е Е U(A), такой, что a = eb. (ш) Элемент р Е А называется неприводимым, если он не является ни нулевым, ни обратимым и если его единственными делителями являются 1 и р. Более точно: р неприводим тогда и только тогда, когда d | р => d ~ 1 или d ~ р. Это свойство равносильно тому, что идеал Ар является максимальным в множестве однопорожденных (т.е главных) идеалов в А, отличных от А и {0}. (iv) Если кольцо А без делителей нуля, то р — неприводимый элемент тогда и только тогда, когда из р = de следует, что d или е — обратимый элемент в А. 1.2 Что такое факториальное кольцо? Теперь можно дать точное определение структуры колец, обобщающей в какой-то мере структуру кольца Ъ целых чисел. (4) Определение (факториальность). Кольцо А называется факториальным, если оно не имеет делителей нуля и если оно удовлетворяет основной теореме арифметики, что, формально, выражается следующим образом: (г) Наличие разложения на неприводимые множители: Va£ A* \ U(А), 3 р\, р2, • • •, Рп у неприводимые и такие, что a = р\рч .. .рп • (п) Единственность такого разложения: PiP2 • • Pn ~л 9i?2 • • • Чт (Pi, qj неприводимы) => п = т и 3 а, перестановка на [1, п], такая, что Pi~A q<7(i) (1 ^ г^ n). В дальнейшем мы рассмотрим критерии, позволяющие распознать факториальность кольца. В настоящий момент читатель должен поверить, что это понятие не «бессодержательное», т.е. класс факториаль- ных колец сравнительно широк. Прежде, чем продолжать дальнейшее изучение делимости, укажем одно арифметическое приложение факто- риальности.
182 II-1 Обобщение арифметики целых чисел 1.3 Обобщать арифметику целых чисел: зачем? Абстрагирование от конкретной ситуации позволяет математику отследить влияние основных параметров, влияющих на ситуацию, и диапазон их изменения. Более того, часто происходит так, что свойства обобщенной ситуации оказываются полезными для изучения базовой ситуации. Вот пример, когда арифметика подкольца кольца Ъ оказывает влияние на арифметику в Z. Рассмотрим для этого кольцо целых гауссовых чисел Z[i] = Z + iZ = {x + iy | (x, у) E Z x Z}. Очевидно, Ъ\г] — под кольцо поля С комплексных чисел, выдерживающее операцию сопряжения z -*~z. Поэтому операция сопряжения индуцирует инволютивный автоморфизм в Z[i], в котором 7L является множеством неподвижных точек, и позволяет оснастить Щг\ мультипликативной нормой N : Z[i] —У М, определяемой через N(z) = zJy для z Е Z[t]. Другими словами, N(x + гу) = х2 + у2 для всех х, у Е Z. (5) Предложение. (г) Кольцо Ъ[г] целых гауссовских чисел факториалыю. (гг) Пусть z G Щг] — неприводим в Ъ[г] и не ассоциирован с элементом из Z. Тогда N(z) является простым числом в 7L. Доказательство. I Пункт (г) следует из евклидовости Ъ[г\ (см. раздел 3.1) и того, что всякое евклидово кольцо без делителей нуля факториально (см. раздел 3.5). Что касается (п), то мы покажем, что разложение rs числа N(z) в Z тривиально. Сначала предположим, что ни г, ни s не обратимы в Z[t]. Пусть п (соответственно, т) — длина разложения на простые множители для г (соответственно, для s). Так как z~z является простым разложением для N(z) (напомним, что zuJ неприводимы в Z[t]), то из единственности разложения на неприводимые множители следует, что т + п = 2, откуда п = т = 1, т.е. г и s — неприводимые в Z[i]. Из единственности следует, что z ~ъ[\] г или z ~Ъ[\] 5> что противоречит предположению относительно г (г не ассоциирован с элементом из Z). Следовательно, хотя бы один из двух элементов г и s является обратимым в Z[i]. Но из г Е С/(2£[г]) следует, что N(r) E U(Z). Так как N(r) = г2 и N(s) = s2, то имеем \__г = ±1 или s = ±1. Замечание. В доказательстве, приведенном выше, мы использовали (кроме факториальности кольца) только наличие мультипликативной нормы со значениями в Z (фактически, в N, хотя это
II-1.3 Обобщать арифметику целых чисел: зачем? 183 и не важно). В то же время вид единиц в Z[t] не был использован. Кроме того, существование мультипликативной нормы основано, главным образом, на существовании инволютивного автоморфизма z —>• J, для которого Z является множеством неподвижных точек. Такой тип доказательства применим и в других ситуациях. (6) Предложение. Элемент вида х2 + у2 из N, где х Е N и у Е N взаимно просты, назовем точной суммой двух квадратов. Тогда всякий делитель (из N) точной суммы двух квадратов сам является точной суммой двух квадратов. Доказательство. Заметим сначала, что «общая» сумма двух квадратов может иметь делители, о которых ничего сказать нельзя (достаточно рассмотреть сумму вида (Ах) + (\у) и тогда А — такой делитель). Поэтому утверждение о взаимной простоте х и у весьма важно. Разложим элемент х + iy в произведение неприводимых в Z[i]: х + iy = 7Ti ... тгп, где nj неприводимы. Это разложение индуцирует разложение я2 + у2: х2 + у2 = N{x + iy) = N{ni)N{ir2)... N{nn). (1) Заметим, что ни одно из ttj не ассоциировано с элементом из Ъ (так как х и у взаимно просты). Согласно предшествующей лемме, N(ttj) является простым элементом Z. Следовательно, разложение (1) есть разложение (в Ж) х2 + у2 на простые множители. Если d E N — делитель х2 + у2, то существует такое подмножество J С [1, п], что d = П ^fa) = N ( П ni ) =u2 + t;2) гДе u + iv = П *j- jeJ \eJ ' jeJ Откуда следует, что d есть сумма двух квадратов. Так как u + iv является делителем в Z[t] числа х + iy, то эта сумма точная. Примечания. Зная, что кольцо Z[V=2] = Z + iy/2Z = {x + V=2y, (я?,у) 6 Z х Z} факториально, можно доказать небанальный результат, касающийся сумм х2 + 2у2, где (хуу) £ N х N. Это обобщенная точка зрения математика ...
184 II-1 Обобщение арифметики целых чисел Кстати: существует аналогичный результат для сумм вида х2 — 2t/2, связанный с кольцом Ъ[у/2] = Z + у/2Ъ. Предположив, что кольцо факториально, можно доказать, для взаимно простых хуу £ % следующий результат: d e Z, d | х2 - 2у2 => Зи£ Z,v 6 Z такие, что d = и2 - 2v2. Начнем с определения инволютивного автоморфизма Ъ[у/2] (которое в этом случае уже не связно с операцией сопряжения в С), затем введем норму (со значениями в Z на этот раз)..., остерегаясь обратимого элемента — 1 G Z. Новая ступень обобщения преодолена. Однако аналогичного феномена для сумм вида x2+3t/2 в кольце Z[\/—5] не наблюдается. Не путайте с кольцом Z\j] целых чисел кольца Q[y/—3]. Оно не факториально! Пусть pGN\{2} — простое число, являющееся суммой двух квадратов. Легко проверить, рассматривая Z/4Z, что р = 1 (mod 4). Вот обратное утверждение: (7) Следствие. Пусть р G N — простое число, удовлетворяющее соотношению р=1 (mod 4). Тогда р является суммой двух квадратов. Доказательство. Сравнение Вильсона для всякого простого р: (р-1)! = -1 (modp) получается при помощи перегруппирования в произведении 1 х 2 х • • • х (р— 1) каждого сомножителя со своим обратным по модулю р. Если р ф 2, то, перегруппировывая в том же произведении вместе числа % и (р — г), получаем формулу (-l)(p-1)/2((^)!)2^-MmodP). В частности, если р = 1 (mod 4) и если х = (^у^-)!, то х2 = —1 (mod р) или, что то же самое, р \ (х2 + 1). Простое р делит точную сумму двух квадратов и, следовательно, само является суммой двух квадратов. Можно заметить, что главный этап доказательства состоит в утверждении, что —1 является квадратом по модулю р, где р — число вида 4п + 1. Этот результат, прямое доказательство которо-
II-1.3 Обобщать арифметику целых чисел: зачем? 185 Lro было только что получено, будет углублен позже в части, посвященной квадратичным вычетам. Закончим раздел сводкой результатов, относящихся к группе единиц и неприводимым элементам в Ъ[г] (результаты, содержащие, в частности, пункт (гг) теоремы 5). Указанные результаты позволяют лучше понять новое кольцо, удовлетворяющее основной теореме арифметики, обобщающее некоторые кольца, являющиеся квадратичными расширениями, например ЩЛ\ или Z[V^2], но не все! Пусть р G Ъ. Если р неприводимо в Z[i], то оно тем более неприво- димо в Ъ (это простое число из Z). Следующее предложение содержит одну из возможных обратных теорем: (8) Предложение. (О U(z[i\) = {ze ZH | N(z) = 1} = {+i, -i, +i, -i}. (гг) Если р — простое в N, то р неприводимо в Z[i] тогда и только тогда, когда оно не является нормой N(z) для z E Z[i] (что эквивалентно р=3 (mod 4);. (Hi) Пусть z Е Z[i]. Элемент z является неприводимым в Ъ[г\ и не ассоциированным с элементом из Ъ тогда и только тогда, когда N(z) — простое число в Z. Несколько примеров 1. Число 5 — простое в Z, не неприводимое в Z[i], так как существует нетривиальное разложение 5 = I2 + 22 = (1 + 2г)(1 — 2г). 2. В Ъ[г\ 2 разлагается в сумму двух равных квадратов и почти является квадратом: 2 = 12 + 12 = (1 + г)(1-г) = -г(1 + г)2 ~ъ[%\ (И"г)2- 3. В Ъ[г\ еще неприводимо 2 + Зг, так как ЛГ(2 + Зг) = 13 — простое число в Z. 4. Простые числа 181, 281 и 601, сравнимые с 1 по модулю 4, имеют представление в виде суммы двух квадратов: 181 = 92 + Ю2, 281 = 52 + 162,и601 = 52 + 242. Доказательство предложения 8 Пункт (г) вытекает из равенства U(Z[i\) = {z e Z[t] | N(z) обратим в Z } = {+1, -1, +г, -г}. Докажем (гг), рассматривая простое число р из N. Если р является нормой N(z), то имеется нетривиальная факторизация: р = zJ} которая показывает, что р не является неприводимым в Z[t].
186 11-2 Элементарные свойства теории делимости Обратно, если р не является неприводимым в Z[i], то имеется его разложение на неприводимые в Z[i]: р = тгхтгг ... тгп с п ^ 2. Применяя норму, получаем: р2 = ЛГ(тг1)ЛГ(7Г2).. . ЛГ(тгп) дает нетривиальное разложение р2 в 7L. Отсюда п = 2, AT(tti) = р и ЛГ(7г2) = р. Второй результат о равносильности — следствие первого. (Ш) Пусть z Е Z[i] такое, что N(z) — простое число в N. Из разложения z = z\Z2, где z\ и Z2 принадлежат Z[i], получаем, применяя норму, что N(z) = AT(zi)N(z2). Это — разложение простого числа N(z) в Z. Оно непременно тривиально. Следовательно, тому, что исходное разложение является разложением неприводимого элемента z из Щ%\ (и подтверждает его неассоциированность с элементом из Z). Обратное уже было доказано в предложении 5. 2 Элементарные свойства теории делимости Мы займемся нахождением общих критериев факториальности колец. Эти критерии устанавливаются совершенно естественным путем и базируются на основных понятиях теории делимости: нетеровости кольца и свойстве Гаусса. 2.1 Существование и единственность разложения на простые множители (9) Предложение. Пусть любая бесконечно неубывающая последовательность главных (т.е. порожденных одним элементом) идеалов кольца А без делителей нуля стабилизируется (т.е. становится постоянной, начиная с некоторого ее члена). Тогда кольцо А удовлетворяет условию существования разложения на неприводимые множители. Доказательство. I Допустим, что условие на главные идеалы выполнено. Предположим противное: существует хо G A*\U(A), не являющийся произведением неприводимых. Элемент хо тем более не является неприводимым и поэтому имеет нетривиальное разложение х0 = sij/i, где х\ и у\ необратимы. Один из двух элементов х\ или у\ не представим в виде произведения неприводимых (иначе х0 обладает разложением в произведение неприводимых). Пусть это будет х\. Значит имеем | строгое включение Ах о С Ах\. Тогда это рассуждение можно пов-
II-2.2 НОД и взаимно простые элементы 187 I торить для xi, что дает другое точное включение того же типа, что и первое: Ах\ С Ах2 с хг, не являющимся произведением неприводимых. Ясно, что можно построить бесконечную последовательность [_главных идеалов, которая не может стабилизироваться. Следующее предложение связано с единственностью разложения на неприводимые множители. Доказательство является простой формальностью и предоставим его читателю. (10) Предложение. Пусть А — кольцо без делителей нуля, удовлетворяющее условию существования разложения в произведение неприводимых. Тогда А обладает свойством единственности разложения (т.е. является фактори- альным), если для любого неприводимого р выполнено следующее свойство: если р делит ab, тор \ а илир \ b (значит р может рассматриваться как простой элемент). 2.2 НОД и взаимно простые элементы (11) Определения. (г) Элемент d Е А, являющийся общим делителем а и Ь, называется НОД а и Ь, если всякий другой делитель S элементов а и b является делителем d. В кратком виде это выражается следующей эквивалентностью: d есть НОД а и b тогда и только тогда, когда [S \ d <^=> S \ a и S \ Ь]. В этом случае идеал Ad является единственным: действительно, сказать, что d = НОД (а, 6) равносильно тому, что идеал Ad есть верхняя грань для множества {Aa,Ab} главных идеалов. В дальнейшем будем использовать обозначения d = НОД(а,6) или d = а A b, помня, что в общем случае НОД — не единственный элемент. (И) Элементы а и b будут называться взаимно простыми, если 1 является НОД а и b (равносильным образом, это означает, что только единицы А — суть общие делители для а и Ь). Существуют кольца, обладающие парами элементов, не имеющими наибольшего общего делителя. Покажем это. Кольцо А = ^[vQ)] Рассмотрим кольцо А = Z[\/^] = {х + iyy/b, х, у Е Z}. Это множество есть подкольцо поля С с обычными операциями сложения и
188 11-2 Элементарные свойства теории делимости умножения и потому без делителей нуля. Операция сложения в С индуцирует инволютивный автоморфизм a Z[v^-5]: °"(ж+У\/--5) = я—У\/—5, и дает возможность определить в Z[y/^b] мультипликативную алгебраическую норму со значениями в N, определяемую через N(z) = z<r(z). Другими словами, N(x + уу/^Ъ) = х2 + Ъу2. Группа единиц в Z[\/^5] следующая: и(Ъ[>/-Ь]) = {ze Ъ[у/^Ъ] с N{z) = 1} = {±1}. Элемент 2 неприводим в этом кольце. Действительно, из соотношения 2 = uv следовало бы равенство 4 = N(u)N(v). Так как 2 не представимо в виде х2 + 5у2, то 2 не является нормой. Из этого ясно, что N(u) = 1 или N(v) = 1: и или v обратим, а, следовательно, 2 неприводим. Таким же образом можно показать, что элементы 3, 1 + у/-Ъ и 1 — >/—5 неприводимы. Однако для них выполнено равенство 2 х 3 = (1 -I- V—E) х (1 — >/—5)- Как грустно: 4 сомножителя, встречающихся здесь, неприводимы! Понятно, что в кольце Z[\/-^] основная теорема арифметики не имеет места. Если положим а = 1 + >/—5, 6=1 — >/—5, то это равенство имеет другое необычное следствие: 2 | аб, 2 неприводимо, но 2 не делит ни а, ни 6! Беда не приходит одна. В результате предыдущей патологии элементы 2а и аЬ не имеют НОД в Z[V—5]. Допустим, что d — общий делитель 2а и аЬ. Тогда d \ 2а и а \ rf, что приводит к заключению (£) | 2. Так как 2 неприводимо, то d ~а о, или d ~A 2а. Но а не может быть НОД (он не делится на общий делитель с 2), а 2а — тем более (6 не делится на 2, аЬ не делится на 2а), что приводит к противоречию. 2.3 Выделяемые понятия Мы уже рассмотрели два важных свойства. Одно связано с наличием разложения на неприводимые множители, другое — с единственностью разложения. Это дает повод к следующим определениям: (12) Определение (свойство Гаусса). Элемент р кольца А называется простым, если он отличен от нуля, не является обратимым и удовлетворяет условию: р \ ab => р \ а или р | 6, что можно выразить по-другому: факторкольцо А/Ар не имеет делителей нуля. (13) Определение (упорядоченное нётерово множество). Упорядоченное множество X называется нётеровым, если всякая бесконечная возрастающая последовательность стабилизируется.
II-2.3 Выделяемые понятия 189 (14) Определение (нётерово кольцо). Кольцо А называется нетеровым, если множество идеалов этого кольца, упорядоченное по включению, является нетеровым. Другими словами, всякая бесконечная возрастающая последовательность идеалов постоянна, начиная с некоторого номера. По определению (или почти по определению) для факториального кольца понятия простого и неприводимого элемента совпадают. Между прочим, в кольце без делителей нуля имеет место следующее свойство: (15) Предложение. В кольце без делителей нуля простой элемент неприводим. Обратное, вообще говоря, неверно. (16) Предложение (принцип нётеровой индукции). Упорядоченное множество X нётерово тогда и только тогда, когда всякое непустое подмножество У в X обладает максимальным элементом, содержащимся в У (элемент у Е У называется максимальным в У, если не существует z Е У, для которого z > у). Доказательство. I Допустим, что X нётерово иУ С X — непустое подмножество X без максимального элемента. Пусть х0 Е У. Так как хо не максимальный в У, то найдется xi Е У, такой, что хо < х\. Так как xi не максимален в У, то можно построить хг, такой, что xi < хг, Х2 Е У. Это вам ничего не напоминает? Обратно, пусть (яп)п€^ — возрастающая последовательность элементов из X. Если хт — максимальный элемент множества {xn,n E N}, то последовательность (sn)n€N стабилизируется, начиная с номера т. (17) Предложение (связь между нётеровостью и конечностью колец). Кольцо А является нетеровым, тогда и только тогда, когда всякий идеал в А конечного типа (т.е. порожден конечным числом элементов). Доказательство. I Допустим, что всякий идеал конечного типа, и пусть (Л»)п€я — возрастающая последовательность идеалов. Объединение / = (Jn€N A» есть идеал, порожденный конечным подмножеством Т. Так как (7n)n€N возрастающая, то существует такое m E N, что Т С Im- Отсюда получаем, что / = /т, а, следовательно, начиная с номера т, последовательность (Л»)п€н стабилизируется.
190 II-2 Элементарные свойства теории делимости I Обратно, предположим, что кольцо А нётерово, содержащее идеал 7, не являющийся идеалом конечного типа. Так как I не является идеалом конечного типа, то хо Е 7, затем xi Е I \ Ахо, затем хгЕ/\ (Ахо + Ах\)... Это приводит нас к наличию строго возрастающей последовательности идеалов: Ахо С Ахо + Ахх С Ахо + Ах\ + Ах2 С • • • С Ахо + Ах\ + Ь Ахп С • • •, [_что заканчивает доказательство. Прежде чем перейти к вещам, более конкретным, забежим вперед в главу III и приведем несколько результатов о нётеровых модулях. Конечно, нётеров модуль — это такой модуль, в котором всякая возрастающая последовательность подмодулей стабилизируется, или, иначе, всякий подмодуль является подмодулем конечного типа. Для того чтобы связать сказанное с предыдущим, заметим, что идеалы кольца являются его подмодулями. (18) Предложение. Пусть А — кольцо. Если А-модуль Е — нётеров, то для всякого подмодуля F модуля Е А-модули E/F и F нётеровы. Обратно, если в А-модуле Е есть такой нётеров подмодуль F, что E/F нётеров, то и Е — нётеров. Доказательство. I Доказательство первого результата очень просто. Действительно, всякая возрастающая последовательность подмодулей F является также возрастающей последовательностью подмодулей в Е. Заметим также, что подмодули E/F есть образы подмодулей Е, содержащие F. Обратное утверждение доставляет больше забот. Нельзя пользоваться теми же рассуждениями, что в векторном пространстве, и предполагать, например, что Е ~ E/F 0 F. Рассмотрим отображение, которое каждому подмодулю G в Е ставит в соответствие пару (G + F, G П F). Это отображение порождает строго возрастающую последовательность. Действительно, рассмотрим два подмодуля G' С G, такие, что G' + F = G + F и G' П F = G П F. Пусть элемент х Е G. Тогда х = у + z, где у G G', z G F. Так как G' С G, то у Е G и, значит, z E G. Однако G' П F = GC\ F, откуда z E G', и потому х Е G'. Таким образом, I всякая строго возрастающая последовательность модулей в Е поро-
II-2.4 Соотношение Безу 191 Lждaeт строго возрастающую последовательность подмодулей в (Е + F)/F и Е П F. Догадаемся о продолжении... (19) Предложение. Если Е и F — два А-модуля, toExF нётеров модуль тогда и только тогда, когда таковыми являются Е и F. Доказательство. I Проектируя Е х F на каждый из подмодулей Е и F, получаем необходимость условия. Для доказательства обратного достаточно заметить, что Е ~ Е х F I {0} х F и применить предыдущее предло- [_жение. 2.4 Соотношение Безу Вот несколько результатов и определений, показывающих важность соотношения Безу. (20) Предложение. (г) Пусть а, Ь и d — элементы кольца А, связанные соотношением Ad = Aa + АЬ. Тогда d = НОД(а, 6). (гг) Пусть А — кольцо, в котором сумма двух главных идеалов есть главный идеал. Тогда всякий неприводимый элемент А является простым элементом (т.е. удовлетворяет свойству Гаусса). Доказательство. I (г) — простая формальность, в которой нет ничего удивительного. Действительно, Aa + АЬ есть верхняя грань для множества идеалов {Аа}АЬ}. Чтобы доказать (гг), предположим, что р неприводим в А, а Е А и 6 G А таковы, что р \ аЬ. Допустим, к примеру, что р не делит а. Тогда Ар С Ар + Аа и, значит, Ар + Аа есть главный идеал. Из максимальности Ар среди главных идеалов следует, что Ар+ Аа — А, и поэтому выполнено соотношение Безу 1 = up + va, из которого |_выводим Ь = upb + vab. Но тогда р делит 6. Подчеркнем роль, сыгранную соотношением Безу, связанную с НОД и свойством Гаусса в доказательстве предложения. Вот результат, приводящий к понятию максимального элемента.
192 11-2 Элементарные свойства теории делимости (21) Определение (кольцо Безу). Кольцо А называется кольцом Безу, если сумма любых двух его главных идеалов является главным идеалом. Это эквивалентно тому, что всякий идеал конечного типа является главным. Замечание. Введение понятия кольца Безу продиктовано соображениями удобства записи. Никакой теории колец Безу в этой книге не будет! (22) Предложение. Пусть р — неприводимый элемент кольца Безу А. Тогда фактор- кольцо А/Ар есть тело. Равносильным образом это означает, что идеал Ар максимален среди всех идеалов (отличных от А). По-другому это можно выразить так: для любого х Е А \ Ар существуют такие и и v из А, что 1 = их + vp. Доказательство. I Пусть £ — ненулевой элемент из А/Ар, представляющийся элементом х G А \ Ар. Тогда идеал Ах + Ар есть главный идеал Ad, строго содержащий Ар. Отсюда d \ р и d ф р. Значит, d ~ 1, т.е. 1 G Ах + Ар = А. Поэтому найдутся такие и и v, что 1 = их + vp, откуда, переходя к факторкольцу А /Ар, получаем 1 = их = й~£, что доказывает обратимость £ в А/Ар. Отсюда следует, что А/Ар — тело. Читатель без труда проверит самостоятельно эквивалентность [_трех формулировок результата. (23) Определение. Идеал I кольца называется простым, если он отличен от А и если для всякого произведения ab E I следует, что a E I или b E /. Последнее равносильно тому, что факторкольцо А/1 не имеет делителей нуля. Идеал называется максимальным, если он максимален среди всех идеалов, отличных от А, или, что то же самое, факторкольцо А/1 является телом. Замечание. Идеал {0} простой тогда и только тогда, когда кольцо не имеет делителей нуля. Он максимален тогда и только тогда, когда кольцо является телом.
11-3 Евклидовы кольца с точки зрения эффективности 193 В качестве резюме: (24) Предложение. (г) В кольце без делителей нуля всякий элементу порождающий максимальный идеал, является простым, а каждый простой элемент неприводим. Два последние понятия (простой и неприводимый) совпадают в факториальном кольце, и все три понятия совпадают в кольце Беэу. (гг) Элемент р кольца А простой тогда и только тогда, когда идеал Ар простой и отличен от {0}. (in) В любом кольце всякий максимальный идеал прост. 3 Евклидовы кольца с точки зрения эффективности Этот раздел посвящен изучению евклидовых колец, т.е. колец, обладающих евклидовым делением. Здесь можно будет найти точное определение данного понятия, элементарные свойства евклидовых колец, в частности, факториальности евклидовых колец без делителей нуля, алгоритм Евклида и его реализацию в языке Ада во всей его общности. Для более глубокого изучения необходимой математики читатель может обратиться к работе Самюэля [159], являющейся очень толковым и легко читаемым руководством. 3.1 Что такое евклидово кольцо? (25) Определение. Евклидово деление в кольце А есть оператор Ах А* —»• А, обозначаемый «/», для которого существует отображение (р кольца А во вполне упорядоченное множество (т.е. множество, всякая непустая часть которого имеет наименьший элемент), удовлетворяющее соотношению: V(a, 6) е А х А\ <р(а- Ь(а/Ь)) < <р(Ь). (2) В этом случае говорят, что «/» евклидово для (р. Отображение <р называется алгоритмом Евклида, если оно удовлетворяет свойству: V(a,6) G А х A*, 3(g,r) Е А х А такая, что a = bq + r с <р(г) < <р(Ь). (3) Эквивалентным образом, для всякого Ь в А* существует такая система представителей в А/АЬ, элементы г которых удовлетворяют неравенству (р(г) < <р(Ь). 13-1017
194 II-3 Евклидовы кольца с точки зрения эффективности Кольцо А (не обязательно без делителей нуля) называется евклидовым, если оно допускает евклидово деление «/» (в таком случае А называется евклидовым для «/»), а также, что А допускает евклидов алгоритм <р (в последнем случае говорят, что А евклидово для <р). Замечания. Хотя в математике заостряется внимание на понятии евклидова алгоритма, именно эффективность евклидова деления позволяет вычислять НОД, находить коэффициенты Безу, и т.д. В какой-то мере приходится пожалеть о термине «алгоритм Евклида». Большинство евклидовых алгоритмов, используемых в математических учебниках, базируется на упорядоченности множества N (или на упорядочении множества, изоморфного N). Между прочим, произведение колец Z x Z есть евклидово кольцо (имеющее делители нуля), не допускающее алгоритма Евклида с целыми значениями [159]. Гиблот в [85] нашел аналогичный пример для кольца без делителей нуля. (26) Определения. Пусть А — евклидово кольцо для <р. Скажем, что равенство типа (3) есть евклидово деление (относительно <р) а наЬ, q — частное евклидова деления, г — остаток. Назовем оператором взятия остатка (для <р) оператор mod : А х А* —¥ А, удовлетворяющий соотношениям: <p(a mod 6) < <p(b) и a mod b = a (mod 6). Каждое евклидово деление «/» определяет остаточный оператор a mod Ь = a — Ь х (а/6), для а Е А и Ь Е А*. Примеры евклидовых алгоритмов на Ъ Кольцо Ъ целых чисел является моделью для конструирования евклидовых колец. Вот два примера деления и евклидовых алгоритмов для Z. 1. Взятие абсолютного значения в Ъ дает возможность построить алгоритм Евклида. Для (а, 6) Е Ъ х Z* можно записать a = bq + г с \г\ < \Ь\ различными способами. Например, при (а, 6) = (—14,3) можно записать —14 = 3 х (—5) + 1 и получить остаток, равный единице, или —14 = 3 х (—4) — 2 с остатком, равным —2. В обоих случаях абсолютная величина остатка меньше 3. Следовательно, знание евклидова алгоритма еще не определяет евклидово деление (оно становится единственным, если потребовать, чтобы остаток был положительным или нулевым).
11-3.1 Что такое евклидово кольцо? 195 2. Другой, менее известный, евклидов алгоритм на 7L связан с отображением <р, которое по целому числу дает количество двоичных цифр в его записи (уславливаются, что <р(0) = 0). Для доказательства того, что (р является евклидовым алгоритмом, необходимо показать, что для 6^0 выполнено соотношение деления: а = 6g + r, \r\ ^ |Ь|/2. Действительно, при 6 ф 0 из соотношения \r\ ^ |Ь|/2, конечно следует <p(r) < <p(b) и обратно. Наличие такого деления вытекает из того факта, что всегда можно записать соотношение а = bq + г с \г\ < \Ь\ и г того же знака, что и 6. Это и дает возможность отыскать такое деление, что \r\ ^ \Ь\/2. Если \г\ > |6|/2, то положим: а = bq + г = b(q + 1) + г - 6, (ибо \г - Ь\ ^ |6|/2). Еще раз подчеркнем, что для пары (а, 6) пара (<?,г) определяется не единственным образом. Например, если (а, 6) = (27,6), то: /27 = 6x4 + 3 (г = 3), . . . |6| \27 = 6х5-3 (г = -3), с |г| ^ у в обоих случаях . Несмотря на эту неединственность, будем использовать выражение «евклидово деление с самым малым остатком» или «центрированное деление», чтобы обозначить всякое евклидово деление, ассоциированное с данным евклидовым алгоритмом. Примечательно, что указанный евклидов алгоритм является в определенном смысле наименьшим евклидовым алгоритмом на Ъ (см. упр. 27). Пример кольца многочленов. Для кольца многочленов АГ[Х], где К — поле, функция степени со значениями во вполне упорядоченном множестве {—со} UN есть евклидов алгоритм. Действительно, хорошо известно, что для а,б£ К[Х], 6^0 можно записать a = bq + г с deg г < deg 6 и такое представление однозначно. Мы вернемся позднее к этому евклидову делению, когда будем рассматривать алгоритм евклидова деления многочленов для вычисления НОД при нахождении неприводимых многочленов над Z/pZ. Пример кольца целых гауссовых чисел. Кольцо Z[i], введенное в разделе 1.3, евклидово для нормы N. Чтобы это проверить, рассмотрим сначала поле Q[i] = Q + iQ, являющееся полем частных для кольца Z[i]. Это поле остается неподвижным относительно операции комплексного сопряжения, что позволяет продолжить 13*
196 II-3 Евклидовы кольца с точки зрения эффективности норму с Z[i] на Q[i] в той же форме (N(z) = zJ, z G Q[i]). Рассмотрение решетки Щг\ С Q[i] позволяет приблизить каждый элемент Q[i] следующим образом: Vc e Q[z], 3 q е Z[i] такой, что y/N(c - q) ^ \/2/2, т.е. N(c - q) ^ 1/2. Если а и 6 — два элемента из Z[i], где 6 ф О, использование предыдущего неравенства с а/6 в качестве с дает нам наличие g E Z[i], такого, что N(a/b — q) ^ 1/2, или, по-другому, ЛГ(а — bq) ^ ЛГ(6)/2. Если положить г = а — 6д, то получим а = bq + г, где ЛГ(г) < N(b), что и ожидалось. 3.2 Алгоритм Евклида нахождения НОД Алгоритм Евклида для нахождения НОД двух целых чисел адаптируется без изменений для всякого евклидова кольца. Вот точная формулировка: (27) Алгоритм (алгоритм Евклида в евклидовом кольце). Пусть евклидово деление в кольце А ассоциировано с евклидовым алгоритмом <р и a, b — элементы из А. Алгоритм Евклида заключается в TOMf чтобы осуществить следующие евклидовы деления (в которых положим го = a, ri = b) до появления нулевого остатка: (если п ф О, то го = rxqi + г2, где y>(r2) < <?(ri), если г2 ф О, то п = Г2Я2 + г3, где <?(г3) < <?(г2), если п ф О, то п_1 = riqi +г<+ь где v>(r«+0 < ^(г«)> если rn_i ф О, то гп_2 = rn_ign_i + гп, где <?(гп) < y>(rn_i), 1если гп ^ 0, то гп_1 = rngn + rn+i, где rn+i = 0 и y>(rn+i) < <?(гп). (28) Предложение. (г) В евклидовом кольце А алгоритм Евклида, ассоциированный с парой (а, Ь) Е А х А, находит элемент гп Е А такой, что Аа + АЬ = Агп (в частности, гп является НОД а и Ь). (И) Всякое евклидово кольцо А является кольцом Безу. Доказательство. Оно идентично тому, что имеется во введении. Из равенства r,-_i = r,-g,- + rt-+i с 1 ^ i ^ n выводим, что Ari-i+Avi = j4rt-+j4r,-+i и, в частности, Aa + Ab = Ar0 + Ar\ = Arn + Arn+i = Arn.
11-3.3 Реализация в языке Ада вычисления НОД 197 Пусть mod — оператор нахождения остатка, ассоциированный с <р в схеме вычисления алгоритма Евклида и r,+i = r,_i mod г,. Следовательно, можно только с помощью оператора mod выразить пару (**i, г2) через пару (r0, ri), затем (г2, г3) через (п, г2)... Эта рекуррентная последовательность приводит к алгоритму 1, в котором пара (г, s) принимает последовательные значения (г,-, r,-+i). function НОД(а,6 € A) return (г, з) € А х begin while s Ф ( (Г, 5) 4— end loop; иод{с,*) return г; end НОД; Л:=(а,6); г G A is 3 loop ЙОД(г^) » НОД^&) (я, г mod s); «•ШД{а-< $•••**#•**. Оугде г » ЙОД{<* & Алгоритм 1. Вычисление НОД в евклидовом кольце Замечание. Если обозначить НОД результат обсуждаемого алгоритма, то вполне возможно, что найдутся элементы а, 6, для которых НОД(а,6) отличается от НОД(6, а). Впрочем, даже два последовательных оператора взятия различных модулей могут дать различные НОД, но, конечно, ассоциированные. См. пример в следующем разделе. 3.3 Реализация в языке Ада вычисления НОД Язык Ада, в котором все понятия определены самым строгим образом [68], располагает, в частности, и евклидовым делением в Z, обозначенным «/», определяемым в первую очередь тем фактом, что для а ^ 0, 6 > 0 число а/Ь есть обычное евклидово частное, а с другой стороны, свойством симметрии: (—а)/Ь = —(а/Ь) = а/(—Ь). Язык Ада располагает также двумя остаточными операторами mod и rem. mod (соответственно, rem) есть единственный оператор взятия наименьшего по абсолютной величине остатка того же знака, что и то число, на которое делят (соответственно, делимого), удовлетворяющий соотношениям a mod 6 = a (mod 6), \а mod 6| < |6|, a mod 6 того же знака, что и 6, a rem b = a (mod 6), \а rem 6| < |6|, a rem 6 того же знака, что и а.
198 11-3 Евклидовы кольца с точки зрения эффективности В частности, a rem b = a mod 6, если а и 6 одного знака. Следующие соотношения легко проверяются: a rem 6 = a—(a/b) хб, (—a) rem 6 = —(а rem 6), а rem (—6) = а rem 6. Вот (программа 1) настраиваемая Ада-функция, упрощающая вычисления НОД в Z, основанная на ранее изученном алгоритме. Ниже в рамке записаны сгруппированные спецификация функции и ее реализация, что, вообще говоря, является не самым лучшим способом. . Программа, 1. Вычисление НОД с помощью последовательного деления . generic type Ring-Element is private; Zero : in Ring-Element; with function "-" (a, b : Ring-Element) return Ring-Element is <>; with function n*n (a, b : Ring-Element) return Ring-Element is <>; with function n/n (a, b : Ring-Element) return Ring-Element is <>; function GCD (a, b : Ring-Element) return Ring-Element; function GCD (a, b : Ring-Element) return Ring-Element is type Pair is record First, Second : Ring-Element; end record; u : Pair := (a , b); function "MOD" (a, b : Ring-Element) return Ring-Element is begin return a - b * (a/b); end; begin while u.second /= Zero loop u := (u.second, u.first mod u.second); end loop; return u.first; end GCD; Этот кусок программы требует некоторых пояснений. Тип элементов, для которых требуется вычисление НОД, есть тип private языка Ада. Это означает, что не предполагается особенных ограничений на структуру этих элементов. Единственные операции, которые над ними производятся — это присваивание и проверка на равенство. Для вычисления НОД нам требуются и другие действия: сложение, вычитание, евклидово деление и, хотя и не сразу, но во время реализации, необходимо распознавать нулевой элемент рабочего кольца. Итак, вот, в основном, все понятия, заложенные в спецификации функции.
II-3.4 Сравнение эффективности различных делений 199 Для того, чтобы не усложнять работу с текущими значениями параметров, момент, когда нужна работа с этими значениями, откладывается до выполнения трех арифметических операций. Это делается при помощи формулы ► is О ^, фигурирующей в настраиваемой части функции. Точная семантика этого обозначения следующая. Если он не оснащен одним из параметров подпрограммы, имеющим значение по умолчанию, то компилятор использует в подпрограмме то же имя, что и настраиваемый параметр, и то же значение параметра. Таким образом, программа, использующая эту функцию, чтобы найти НОД, может быть реализована следующим образом: function Ring-GCD is new GCD (Integer, 0), где передаваемый параметр для действий целого типа и константа 0. Перейдем к реализации функции GCD (т.е. НОД). Для упрощения работы с элементами поля, для того, чтобы сделать эту работу более похожей на исходный алгоритм, определяется тип Pair. Надо отметить, что единственное, в чем нуждается функция GCD, это оператор mod. На практике, в общем случае, все что нужно, — это, прежде всего, оператор деления. Поэтому оператор деления, снабженный настраиваемым параметром, находит функцию остатка, используемую в алгоритме для вычисления НОД, сравнительно просто. 3.4 Сравнение эффективности различных делений Разумеется, функция, о которой говорилось в предыдущем разделе, достаточна для вычисления НОД двух элементов евклидова кольца. Но нас интересует также эффективность предложенных методов, а для такой оценки одних этих функций недостаточно. Действительно, чтобы сравнить эти методы, можно написать программу вычисления НОД двух целых чисел, параметризовав ее используемым оператором деления (или нахождения остатка). Если эта программа позволит отследить все промежуточные результаты, то можно наблюдать сходимость метода и сделать некоторые предположения в отношении сложности. Мы не будем заниматься здесь подробно этой функцией (ее выполнение очень просто). Ограничимся приведением нескольких результатов, иллюстрирующих полученную разницу в сложности и в результатах, когда используются различные операторы нахождения остатка. Функции, которые используются (в порядке следования), деление, отвечающее оператору rem в языке Ада, деление с использованием оператора mod и, наконец, центрированное деление (которое отвечает стандартному оператору, заложенному в большинстве языков программирова-
200 11-3 Евклидовы кольца с точки зрения эффективности ния, но который легко может привести к неверному результату). Сложность вычисления НОД сильно отличается в зависимости от используемой функции, как показывает таблица 1. * 1 2 3 4 5 6 Ll Остаток rem в яз. Ада 204=-126х-1 + 78 -126= 78Х-1 + -48 78= -48Х-1 +30 -48= 30Х-1 + -18 30= -18Х-1 + 12 -18= 12Х-1 + -6 12= -6Х-2 + 0 Остаток mod в яз. Ада 204=-126 X-2 + -48 -126= -48x2 + -30 -48= -30x1 + -18 -30= -18x1 + -12 -18= -12X1 + -6 -12= -6X2 +0 Центриров. остаток 204=-126Х-2 + -48 -126= -48x3 + 18 -48= 18Х-3 + 6 18= 6x3 +0 Таблица 1. Последовательность частных для различных евклидовых делений Центрированное деление дает в действительности наименьшее количество итераций, результат, на котором мы остановимся в разделе 6. Однако точка зрения, заключающаяся в том, что НОД надо вычислять в Z, используя наименьший остаток, уязвима. Она не учитывает того факта, что оператор центрированного деления реализуется за большее время из-за логики программирования, тогда как два других вообще свободны от этого недостатка и могут быть прямо реализованы в железе. То, что выигрывается в теории алгоритмов, теряется при программировании на машине. Ах, информатика без машин! На этом примере можно также увидеть неединственность НОД. Два простых алгоритма дают значение —6, в то время как третий дает значение 6. 3.5 Факториальность евклидовых колец без делителей нуля Следующая лемма рассматривает поведение алгоритма Евклида <р по отношению к включению идеалов и показывает, что евклидово кольцо нётерово. (29) Лемма. Пусть (р — евклидов алгоритм кольца А. (г) Неравенство <р(0) < <р(Ь) верно для любого Ь Е А*. (И) Отображение <р (со значениями в области значений <р), определенное на множестве ненулевых идеалов А соотношением ф{1) = min{<p(a) | о G / \ 0} — строго убывающее отображение множества ненулевых идеалов из А во вполне упорядоченное множество. Значит, А нётерово.
II-3.5 Факториальность евклидовых колец без делителей нуля 201 Доказательство. I (i) Пусть Ь Е А*. Алгоритм Евклида 27, применяемый ка^Ои 6, дает последовательность (rt-)0^n+i с p(rn+i) < у?(гп) < < у?(г2) < y?(ri), где rn+i = 0 и ri = 6. Следовательно, у?(0) < (р(Ь) для любого 6 Е А*. (И) Пусть теперь I и J два ненулевых идеала, для которых I С J. Пусть a Е / \ {0} такой, что (р(а) = ф(1). Идеал Аа) содержащийся в /, строго содержится в J. Выберем х Е J \ Аа и осуществим евклидово деление х на а: х = aq+г, где у?(г) < у>(а). Так как я ^ Аа, то г — ненулевой элемент из J. Отсюда ^(J) ^ <р(г) < у?(а) = ф{1), |_что заканчивает доказательство леммы. (30) Предложение. Всякое евклидово кольцо без делителей нуля является факториаль- ным, нётеровым и кольцом Безу. Доказательство. I Предыдущая лемма показывает, что всякое евклидово кольцо (без делителей нуля или с ними) нётерово. Согласно предложению 9, всякий элемент из A* \U(A) является произведением неприводимых элементов. С учетом того, что А — кольцо Безу, предложение доказано. Итак, мы доказали, в частности, что всякий идеал евклидова кольца имеет конечный тип. Следующее предложение еще интереснее. (31) Предложение. Всякий ненулевой идеал евклидова кольца А главный. Доказательство. I Вот прямое и классическое доказательство этого факта. Пусть / — ненулевой идеал в А и a Е / \ {0} такой элемент, что (p(a) = mm{<p(x) \ х Е / \ 0} (такое определение имеет смысл, так как значения <р принадлежат вполне упорядоченному множеству). Элемент а порождает /. В самом деле, для х £ I осуществим евклидово деление х на а: х = aq + г, где (р(г) < <р(а). Принадлежность г к / и минимальность <р(а) дают г = 0. Следовательно, х = aq, что и требовалось доказать. Внимательный читатель обратит внимание на аналогию с доказательством леммы 29. Действительно, если / — ненулевой идеал и \ а Е /\ {0} такой, что <р(а) = ф{1)) то Аа С / и ф{Аа) = ф{1)) ввиду I строгого убывания ф. Значит, Аа = I.
202 11-4 Многочлены с коэффициентами из поля Наконец, имеется третий довод! Так как кольцо А конечного типа (А нётерово), то его идеал конечного типа и потому главный (А является кольцом Безу)... Замечание. Можно заметить, что в Z или в К[Х] имеется эффективный метод (раздел 6) вычисления НО Д. Однако проблема разложения целых чисел на простые множители (или многочлена в произведение неприводимых) более трудна для решения. Есть, впрочем, проблема, имеющая, по-видимому, промежуточную сложность. Это задача проверки на простоту целого числа (или неприводимость многочлена). Читатель - скептик приглашается для проверки неприводимости для случая факторизации, с одной стороны, числа, имеющего в своей записи 78 десятичных цифр: 2257 - 1 = 231 584 178 474 632 390 847141970 017 375 815 706 539 969 331 281 128 078 915 168 015 826 259 279 871, а с другой — полинома с коэффициентами из Z/2Z : X2 — X. 4 Многочлены с коэффициентами из поля Читатель, несомненно, знаком с некоторыми результатами относительно распределения простых чисел или с теоремой Евклида, утверждающей бесконечность множества простых чисел. Что известно для многочленов? На самом деле, применение аргумента Евклида показывает, что существует бесконечное множество унитарных неприводимых многочленов над всяким полем. Для некоторых полей можно доказать существование неприводимых многочленов любой заданной степени. Например, над полем Q рациональных чисел многочлен Хп — 2 является неприводимым для любого натурального числа п (что совершенно неочевидно и требует доказательства, например, для п = 2 это равносильно иррациональности \/2). Мы докажем, что для всякого простого р и для любого натурального числа п существует неприводимый многочлен степени п по модулю р, без явного указания его, — результат, который можно рассматривать как замечательный. Мы найдем также формулу, позволяющую подсчитать количество таких многочленов, исходя из которой читатель сможет найти плотность множества неприводимых многочленов по модулю р, имеющих данную степень. Но прежде всего, представим в явном виде алгоритм Евклида деления многочленов.
II-4.1 Евклидово деление в К[Х] (К — поле) 203 4.1 Евклидово деление в К[Х] (К — поле) (32) Теорема (евклидово деление многочленов). Пусть А и В два многочлена с коэффициентами в поле К, В — ненулевой. Существует алгоритм, позволяющий вычислить такие многочлены Q и R, что А = BQ + R и deg(R) < deg(B). Более того, указанная пара (Р, Q) многочленов определяется единственным образом. Дидактический пример Рассмотрим сначала пример, который позволит лучше понять доказательство теоремы. Осуществим евклидово деление в Q[X] многочлена А = 2ХЪ - ЗХ4 + 6Х3 - 9Х2 + IX + 2 на многочлен В = 2Х2 - X + 1 (на самом деле деление производится в Z[X], но это несущественно). Разделим 2ХЪ на 2Х2, старшие одночлены в А и В соответственно. Получим 1 х X3 (старший одночлен частного). Теперь можно вычислить А — В х 1 х X3 и получить многочлен степени ^ 4. Наконец, заменим В на Л — В х I х X3 и повторим для А и В описанную выше операцию... Оформим действия в виде следующей таблицы, форма которой читателю, возможно, знакома: 2ХЪ -ЗХ4 +6Х3 -9Х2 +7Х +2 0 -2ХА +5Х3 0 +4Х3 -SX2 0 -&Х2 +5Х 0 +2Х +5 Частное есть многочлен Q = X3 — X2 + 2Х — 3, в то время как остаток R = 2Х + 5. Рассуждения, встретившиеся в описанном выше примере, должны быть формализованы не только ради математической деонтологии, но, главным образом, для того, чтобы показать рекуррентную основу, поддающуюся переделке в алгоритм, а затем в программу. Очевидно, что читатель легко сможет проследить на предыдущем примере доказательство теоремы, которое приводится ниже. Доказательство теоремы 32 Пусть n = deg(A), m = deg(B) и bm — старший коэффициент полинома В. Определим рекуррентным образом многочлены Ят+* для k = п — т, п — т — 1, ..., 1,0, —1. На шаге к предположим, что верно равенство А = В х (...) -|- Rm+k, где deg(Rm+k) ^ m + fc, 2Х2 - X + 1 X3 - X2 + 2Х - 3
204 11-4 Многочлены с коэффициентами из поля а (...) — многочлен, название которого несущественно. Начнем рекурсию, положив к = п — т и положив Rn = А (получим А = В х 0 + Л). Если rm+£ обозначает коэффициент при Хт~*~к многочлена Rm+k и Чк = гт+к/Ьт, то запишем А = Вх (... + qkXk) + (Rm+k - BqkXk). Достаточно определить Rm+k-i с помощью равенства Rm+k-i = Rm+k — BqkXk и проверить, многочлен ли это степени ^ m + к — 1. Получаем следующую рекуррентную схему: Rn = А и qk = Гк+т/Ьщ, Rm+k-i = Rm+k - BqkX , к = п - т,..., 1,0, в которой выполняется порождающее равенство (0 ^ к ^ п — т + 1): Л = В 1^2 Ьх' + Rk+m-i и deg{Rk+ m-i) ^ к + т — 1, дающее для А: = 0: А = BJ2]=™ 4jXj + Rm-i с deg(iim_i) ^ m - 1 < deg(jB), что заканчивает описание полученного алгоритма евклидова деления. Доказательство единственности евклидова деления очень просто и предоставляется читателю. (33) Следствие. Кольцо К[Х] многочленов с коэффициентами в поле К является евклидовым кольцом без делителей нуля, евклидовым относительно степени (со значением в множестве {—оо} UN). function Quotient-Euclidien (А, В € Jfpf]) return (Q, R) € K[X] x K[X] is n = deg(A), m = deg(B), Д(0 .. n) u Q(0 .. n — m) два массива с компонентами в К. begin Д(0 .. п) <— Л(0 .. п); Q(0 .. п - т) <— 0; for k in reverse 0 .. п - т loop А ш 8<}-4>Щ$ ♦♦ m :+*)*•*?(& * *)"**$ Q(fc) 4— Д(ш + к)/В(т); R(k .. т + к-1) <— Д(А; .. m + А; - 1) - Q(k)B(0 .. m - 1); end loop; return (Q, Д(0 .. m - 1)); A ^80+Щ « M^t). end Quotient-Euclidien; Алгоритм 2. Евклидово деление многочленов над полем Алгоритм 2, отвечающий полученной рекуррентной схеме доказательства теоремы 32, существенно использует тот факт, что единст-
11-4.2 Неприводимые многочлены с коэффициентами из Z/pZ 205 венный массив Д(0 .. п) достаточен для вычисления полиномов Дт+*. Действительно, переход от Rm+k к Дт+£_1 происходит покоэффици- ентно (см. рекуррентную формулу, фигурирующую в доказательстве). Этот алгоритм деления, разумеется, позволяет реализовать алгоритм Евклида для многочленов, который в любом случае больше не представляет затруднений. 4.2 Неприводимые многочлены с коэффициентами из Z/pZ Согласно общим определениям раздела 1, неприводимым многочленом в К[Х] является многочлен степени п ^ 1 (т.е. не являющийся константой), не имеющий делителя степени, строго меньшей п (кроме постоянных величин, понятно). Следующий параграф уточняет строение неприводимых многочленов в Fp [X], где Fp (для простого р) обозначает поле Ъ/рЪ целых чисел по модулю р. Докажем существование (в неявном виде) неприводимого многочлена по модулю р произвольной степени. В качестве извинения за отсутствие эффективности в следующем разделе даются критерий неприводимости многочлена и его применения в нескольких конкретных примерах. Если Q — неприводимый многочлен, то уже показано, что фактор- кольцо K[X]/(Q) является полем (предложение 22). Обозначение (Q) использовано для идеала, порожденного многочленом Q. Этот результат является фундаментальным, поскольку является ключевым инструментом в конструировании под полей. Вот несколько уточнений структуры K[X]/(Q). (34) Предложение. Пусть Q — многочлен степени п с коэффициентами в поле К. Тогда факторкольцо K[X]/(Q) есть векторное К-пространство размерности п. Если Q неприводим, то это — поле. Если дополнительно К — конечное поле, состоящее из к элементов, то K[X]/(Q) будет полем, состоящим из кп элементов. (Основная часть доказательства состоит в том, чтобы убедиться, что 1, X,..., X является базой K[X]/(Q)). (35) Теорема. Пусть р — простое число из N и n E N*. Для неприводимого многочлена Q из FP[X] выполнено: Q \ ХрП — X <<=>► deg(Q) | п.
206 11-4 Многочлены с коэффициентами из поля Доказательство. I Пусть К — факторкольцо FP[X]/(Q) и d = deg(Q). To, что К — конечное поле характеристики р, состоящее из pd элементов, проверяется известным способом. Обозначим через X образ X в К. Мультипликативная группа К* состоит из pd — 1 элементов, удовлетворяющих соотношению у9 " = 1, для любого у G К*. (4) Сначала докажем импликацию «<$=» («только тогда»), предполагая, что d | п. Это последнее свойство приводит к тому, что pd — 1 делит рп — 1. Затем с помощью равенства из предыдущего параграфа, I оп_1 _п примененного к у = X, получаем: X =1, откуда X = X. Это последнее равенство в К интерпретируется в ¥р [X] следующим образом: Х?п - X = 0 (mod Q) => Q | Х*>п - X, что и дает нужное заключение. Доказательство импликации «=>» требует большего внимания. Предположим, что Q \ ХрП - X. Тогда ХрП - X = 0 (mod Q) => X = X. Но всякий элемент у £ К представим в виде R(X), где Д — многочлен с коэффициентами из Fp. Используя теперь тот факт, что поле К имеет характеристику р, заключаем: для всякого у £ К выполнено: у?" = R(X)pn = ЯрС9") = R(X) = у, откуда: if"-1^, VyeK*. (5) Поделим п на d: п = dq + г с 0 ^ г < rf. Тогда имеем равенство рп — 1 = (pdq — 1)рг + Рг — 1, которое ввиду равенств (4) и (5) дает: уРг~1 = 1 для любого у G #*. Многочлен Д(У) = УрГ~1 - 1 G Й"[У] имеет степень рг — 1 < pd — 1, но обладает pd — 1 корнями в if. Значит, это нулевой многочлен, откуда рг — 1 = 0, т.е. г = 0. В этом [_случае d | п, что и требовалось. Теорема 35 дает возможность найти число унитарных неприводимых многочленов степени п над полем Fp (целых чисел по модулю р). (36) Следствие. Пусть 1^ — число неприводимых унитарных многочленов в Fp [X] степени п.
II-4.2 Неприводимые многочлены с коэффициентами из Z/pZ 207 d\n (ii) Ip ^ l для всякого простого числа р и всякого натурального п. Другими словами, для любого натурального п существует неприводимый над ¥р многочлен степени п. Доказательство. Многочлен ХрП — X Е №Р[Х] не имеет сомножителей, являющихся полными квадратами. Действительно, если ХрП — X = U2V', то, находя производную от обеих частей, получаем: — 1 = 2UU'V + U2V = U(2U'V + UV), откуда следует, что U — константа. Теорема 35 утверждает, что унитарные неприводимые многочлены Q с deg(Q) | п являются неприводимыми унитарными делителями Хр — X. Вышеприведенное рассуждение показывает, что эти многочлены появляются роено один раз в простом разложении Хр —X. Следовательно, d\n QEfCdp где /Ср обозначает множество неприводимых унитарных многочленов степени d над Fp. Приравнивая степени в левой и правой частях равенства, получаем рп = X^in dip, что доказывает (i). Для доказательства (И) заметим, что e\d e\d ejtd Следовательно, d\n d^n d\n d\n d\n djbn d^n n-1 и ^ in d=0 -1 или еще nip ^ pn — p x ^ 1, что и требовалось.
208 11-4 Многочлены с коэффициентами из поля Вычисление количества неприводимых унитарных многочленов степени п по модулю р Из предыдущего следствия немедленно вытекает (для простого р), что /р = р, 1% = р(р — 1)/2, /р = р(р2 — 1)/3 и вообще для простого п: /р»=р(р»-1-1)/„. Из формулы, доказанной в предыдущем следствии, можно получить рекуррентное соотношение, позволяющее найти 7£ для произвольного п: djbn В таблице 2 приведены значения /£ (полученные, разумеется, с помощью Ада-программы) для р = 2,3,5,7ипот1до10. 1 р 1 2 3 5 7 П 2 3 5 7 S 1 3 10 21 ^1 2 8 40 112 S 3 18 150 588 П 6 48 624 3360 П 9 116 2 580 19544 П 18 312 11160 117648 п 30 810 48750 720300 Ч 56 2184 217000 4 483696 П° 99 1 5 880 976248 28245840 Таблица 2. Число неприводимых многочленов по модулю р Замечание. 976 248 неприводимых многочленов степени 10 над F5 дают 976 248 полей вычетов, каждое из которых состоит из 510 = 9 765 625 элементов. В действительности (это классический результат теории конечных полей) все они изоморфны. Другими словами, поле с таким числом элементов всегда одно! Более точно, для каждой степени q простого числа существует единственное конечное поле, состоящее из q элементов (см. упр. 57). Применение формулы обращения Мёбиуса (раздел 6.3) к формуле (г) следствия 36 сразу же дает (37) Следствие. Если /i — обычная функция Мёбиуса, то, сохраняя введенные выше обозначения, имеем: /; = ±5>(<*)рп/"- d\n
II-4.3 Простой критерий неприводимости по модулю р 209 4.3 Простой критерий неприводимости по модулю р Переформулировка теоремы 35 позволяет дать критерий неприводимости по модулю р. Этот критерий применяется к полиномам степени п, где п превосходит р и число р мало. Существует другой, эффективный критерий неприводимости по модулю р, принадлежащий Берлек- эмпу [21]. (38) Следствие (критерий неприводимости по модулю р). Пустьр —простое натуральное число, Q E Fp [X] имеет степень п. Q неприводим тогда и только тогда, когда для любого простого делителя q числа п выполнено: Q\xpn-x и иод(хрП/ч -x,q) = i. Доказательство. I Допустим, что Q неприводим. По теореме 35 Q \ ХрП — X и Q \ ХрГП — X, если m — собственный делитель п (т.е. n \ т), что доказывает первую половину следствия. Допустим, что выполнены условия доказываемого критерия и R — неприводимый множитель Q. Тогда R \ Хр — X и R \ ХрП ч —X для любого простого делителя q числа п. Используя теорему 35, имеем: cleg (Я) | п и cleg (Я) | n/q для любого простого делителя q числа п. Отсюда следует, что deg(R) = п и потому R ~ Q. Следовательно, \_Q — неприводимый многочлен. Замечание. При реализации этого теста советуем работать в кольце ¥P[X]/(Q) (элементы которого могут быть представлены массивами длины п) и вычислять Хр с помощью дихотомического алгоритма. Можно использовать также тот факт, что отображение Ф : х »-> хр является линейным отображением №P[X]/(Q) (допускающим кодирование при помощи матрицы размера п х п) и тогда Хр = Ф%(Х). Некоторые примеры тестов на неприводимость 1. Пусть многочлен Q{X) = X10 + X3 + 1 из F2[X]. Согласно критерию, приведенному выше (n = deg(Q) = 10 и q = 2, 5), имеем (X210 - X) mod Q(X) = 0, но НОД(Х25 - X,Q(X)) = 1 для q = 2 и, наконец, НОД(Х2 — X, Q(X)) = 1 для q = 5. Следовательно, полином Q{X) = X10 + X3 + 1 неприводим по модулю 2. 14-1017
210 11-5 Кольца главных идеалов или идеалистическая точка зрения 2. Пусть многочлен Q(X) = Хъ + X4 + X3 + X2 + X - 1 из W3[X]. Критерий, описанный выше, дает (X3 — X) mod Q{X) = —X2 — X — 1. Этот результат достаточен для того, чтобы утверждать, что многочлен не является неприводимым. Второй шаг проверки, нахождение НОД(Х3 — X, Q(X)) = 1 при q = 5 не требуется. Впрочем, тест не позволяет найти ни одного делителя Q. щ Итак, теперь мы знаем два основных примера евклидовых колец: Ъ и К[Х] (К — поле), которые имеют, с точки зрения деления, одинаковое поведение. В частности, эти два кольца обладают тем важным свойством, сформулированным в предложении 31, что все их идеалы главные. Действительно, это свойство (как будет показано в следующем разделе) — единственное достаточное условие для выполнения основной теоремы арифметики. 5 Кольца главных идеалов или идеалистическая точка зрения Работа математика заключается, между прочим, в изучении гипотез, имеющих важные последствия. Примером служит ситуация, встретившаяся здесь. Если читатель внимательно прочитал доказательства результатов раздела 4, то заметил, что свойство «всякий идеал главный» действительно становится главным (кроме, разумеется, предположений о целостности, т.е. отсутствия делителей нуля). 5.1 Идеализация Математик идеализирует ситуацию следующим образом: (39) Определение (кольцо главных идеалов). Кольцо А называется кольцом главных идеалов (КГИ), если оно без делителей нуля и всякий его идеал главный. Понятие кольца главных идеалов определяет новый класс фактори- альных колец, удовлетворяющих (не эффективным образом) соотношению Везу и строго содержащих класс евклидовых колец без делителей нуля: (40) Предложение. Кольцо главных идеалов А факториально и удовлетворяет соотношению Везу.
II-5.1 Идеализация 211 Доказательство. Из того, что всякий идеал в А главный следует, с одной стороны, что А нётерово, а с другой, что А — кольцо Безу. Согласно полученным в разделах 2.1 и 2.4 результатам (предложения 9, 10 и 20), [_А факториально, что равносильно свойству Безу. Замечание. Из того, что А — КГИ следует, что для любых а и 6 € А существует наибольший общий делитель (НОД) d этих элементов (задающийся равенством Аа + АЪ = Ad) без способа вычисления этого НОД (в отличие от евклидовых колец). Арифметические свойства евклидовых колец и колец главных идеалов, в основном, те же: явное различие между этими двумя категориями заключается в исчислении объектов. Надо все-таки отметить, что существуют неевклидовы кольца главных идеалов, для которых имеются алгоритмы вычисления НОД и даже коэффициентов Безу (например, некоторые кольца квадратичных расширений кольца целых чисел, квадратичных полей, см. упр. 59). (41) Предложение. Классы колец, введенных к настоящему моменту, связаны следующими включениями: (Евклидовы кольца} ГКольца главных} Г Факториальные} \без делителей нуля) •*■ \идеалов J ■*- \кольца J ' Доказательство. Единственная проблема состоит в том, чтобы показать, что указанные тут классы различны. Чуть позже в этой главе, мы покажем, что кольцо многочленов с целыми коэффициентами Ъ\Х\ факториально. Докажем сейчас, что не все идеалы в Ъ\Х\ являются главными. Рассмотрим, например, идеал (X) + (2) и предположим наличие образующего элемента Р для (X) + (2). Тогда 2 Е (Р), и Р делит 2. Итак, Р = ±2 или Р = ±1. Возможность Р = ±2 приводит к противоречию, так как X £ (2). Что касается другой возможности Р = ±1, то она приводит к существованию полиномов U(X) и V{X) из Ъ[Х], таких, что 1 = U(X) х X + V{X) x 2. Подставив в последнее тождество X = 0, получим 1 = 2V(0), что абсурдно. Итак, Ъ\Х\ не КГИ. Существование КГИ, не являющегося евклидовым, более деликатная проблема и, как обычно, предоставляется читателю (упр. 21). 14*
212 11-5 Кольца главных идеалов или идеалистическая точка зрения I Приведем здесь только два известных кольца, являющихся КГИ, но не евклидовыми. Первое — кольцо А целых чисел из Q[\/—19]: А = Ъ+ £ Z = | Ц , где х = у (mod 2) |, [_Второе — факторкольцо М[Х, Y]/{X2 + У2 + 1). 5.2 Частные кольца главных идеалов Так как КГИ А является кольцом Везу, то всякий идеал, порожденный неприводимым элементом q Е А, максимален (т.е. факторкольцо A/(q) есть тело). Это видно из предложения 22. Классические примеры: Ъ/pL и К[Х]/(Р). Следующее предложение обобщает этот результат, описывая обратимые элементы всякого факторкольца A/(q), результат совершенно аналогичный описанию известного факторкольца Z/nZ. (42) Предложение. В кольце главных идеалов понятия максимального, простого или неприводимого элементов совпадают. Пусть q не является ни нулевым, ни обратимым в кольце А. (г) Пусть х — элемент А. Тогда ~х обратим в A/(q) тогда и только тогда, когда xnq взаимно просты, равносильным образом, существуют такие и и v, что их + vq = 1. (гг) В частности, A/(q) — тело тогда и только тогда, когда q является неприводимым элементом А. Доказательство. I Пусть d является НОД q и х>аии v — коэффициентами Безу; q и х взаимно просты, т.е. d = 1. Отсюда следует (г). Эквивалентности: «f = 1 (в Л/(д)) <$=> их = 1 (mod q) <=> ux£l + Aq заканчивают доказательство первого из утверждений. Второе те- [_перь становится очевидным. Примеры Предыдущее предложение может рассматриваться как инструмент, позволяющий строить тела с помощью перехода к частному. Вот несколько элементарных примеров, в основе которых лежит этот фундаментальный принцип.
11-6 Об оптимальных алгоритмах вычисления НОД 213 1. Каждое простое число р порождает поле Ъ/рЪ вычетов по модулю р. Кроме того, всякое простое р, сравнимое с 3 по модулю 4, неприводимо в Z[t] (предложение 8) и, следовательно, порождает поле Z[i]/pZ[i], имеющее р2 элементов. Например, Ъ[г\/1Щг] есть поле из 49 элементов. Эти элементы записываются в виде а+гб, где а и 6 в Ъ[г]/ТЦг] и г (элемент факторкольца) удовлетворяет соотношению г2 = — 1. 2. Рассмотрим многочлен X3 + X + 1 с коэффициентами из F2 = Z/2Z. Это неприводимый многочлен (можете проверить), что позволяет построить поле К = ¥з[Х]/(Х3 + X + 1) порядка 8, элементы которого имеют вид аа2 + Ьа + с, где а, 6, с Е Z/2Z и а (элемент факторкольца) удовлетворяет соотношению а3 = —а — 1. 6 Об оптимальных алгоритмах вычисления НОД В предыдущих разделах мы рассмотрели алгоритм Евклида и различные математические понятия для его выражения. Чтобы закончить обсуждение, необходимо оценить сложность алгоритма Евклида в нескольких особых случаях и наметить способы получения оценок для более общих ситуаций. Первые оценки сложности алгоритма Евклида принадлежат Ламе [109] и являются предметом изучения первой части этого раздела. Эта теория проста и вполне доступна студенту первого курса университета, но заставляет прибегнуть к последовательности Фибоначчи. Эта теория также провоцирует вопрос: «существуют ли оптимальные алгоритмы вычисления НОД?» и приводит к появлению понятий квазиевклидова кольца и квазиалгоритма. Наконец, теорема Дирихле порождает идею плотности пар целых простых чисел, полезная вещь для тех, кто хочет вычислять НОД более чем двух целых чисел. 6.1 Вычисление НОД двух целых чисел: теорема Ламе Используемые обозначения те же, что и в предыдущих разделах. Пусть а и 6 — два натуральных числа, для которых необходимо вычислить НОД. Как обычно, алгоритм Евклида позволяет построить последовательность (г,-)о^п+Г. г0 = a, ri = Ь и г,-_1 = г,-д,- + rt+i,
214 11-6 Об оптимальных алгоритмах вычисления НОД где 0 < г,-+1 < г, для 1 ^ г < п, а гп+1 = О, последнее деление rn_i = rngn является делением нацело. В этих условиях алгоритм Евклида требует п итераций для своей реализации (используемое деление — обычное деление натуральных чисел). (43) Определение. Последовательностью Фибоначчи (Fn)ne$ называется последовательность, задаваемая следующим образом: Fq = О, F\ = 1 и для n ^ О Fn+2 = ^п + 1 + Fn. Замечание. Эта последовательность названа в честь итальянского математика начала XIII века Леонардо Фибоначчи, который использовал ее при подсчете размножения кроликов (1202 г.), см. Кнут [97]. Эта последовательность естественным образом возникает при изучении процесса роста листвы некоторых растений. Числа Фибоначчи связаны с золотым сечением через соотношение Fp = (фр — фр)/у/5, где ф — положительный корень уравнения (называемый золотым числом) X2 — X — 1 = 0, <£ = (1 + >/б)/2 и <£ = (1 - V5)/2. В данном исследовании для простоты предполагается, что a > Ь. Если это не выполнено, то легко видеть, что первое деление, выполненное по алгоритму Евклида, меняет ролями а и 6 и приводит нас именно к этому предположению. Прежде чем формулировать теорему Ламе, установим несколько простых свойств, позволяющих сделать ее доказательство более естественным. (44) Свойство. Если для того, чтобы вычислить НОД чисел а и Ь, таких, что a > Ь > 0 алгоритм Евклида требует п итераций, то a ^ Fn+2 и Ь ^ Fn+i. Если к тому же a = F„+2 и b = Fn+i, то алгоритм Евклида требует ровно п итераций для вычисления НОД (а, Ь) (их наибольший общий делитель равен 1). Доказательство. I Прежде всего заметим, что гп ^ 1 (в противном случае последнее деление дает нулевой остаток). Кроме того, гп < rn_i и, следовательно, rn_i ^ 2, откуда гп ^ F2 и rn_i ^ F3 (напомним: i<2 = 1 и С другой стороны, при делений r^_i = пф + п+1 частное qi нулевое I и потому п-1 ^ г,- + П+1. С помощью нисходящей индукции можно
II-6.1 Вычисление НОД двух целых чисел: теорема Ламе 215 доказать, что г,- ^ Fn+2-t для 0 ^ г ^ п, что и доказывает сформулированное свойство. Чтобы доказать вторую часть, достаточно в явном виде продолжить последовательность делений: Fn+2 = -Fn+i + Fn, Fn+i = Fn + Fn_i, ... и, наконец, F3 = F2 x 2 (действительно, F2 = Fi = 1). Отсюда следует, что HOA(Fn+2,Fn+i) = F2 = 1, и что необходимо ровно п итераций для реализации алгоритма Ев- |_клида на этой паре чисел. (45) Свойство. В предположении, что алгоритм Евклида требует п итераций, справедливы соотношения: „ , о ,Iogio\/5(q + l) ^logioV5(b+l) n + 2< ^ и n+l< - . log10 Ф log10 ф Доказательство. Для доказательства этих соотношений достаточно сопоставить предыдущее свойство с соотношением, связывающим ф и Fn, приведенное в предыдущем примечании, зная, что \ф\ < 1. Например, op.„».^V'-i"«) «>>"+2-1'^«+1>ж- (46) Теорема (Ламе). Число итерации, необходимых для вычисления НОД двух натуральных чисел а иЬ, таких, что a > Ь > 0, мажорируется 5-кратным числом десятичных знаков наименьшего из этих двух чисел. Более формально, если п является искомым числом итерации, то n ^ 5([log106J + 1) или n ^ 5 flog10(6+ 1)1 . (47) Лемма. Пусть р — число десятичных цифр положительного целого числа Ь. Тогда LtogloV5(6 + i)J ^ bg10<£
216 11-6 Об оптимальных алгоритмах вычисления НОД Доказательство. По условию Ь ^ 10р — 1 и log10(6 + 1) ^ р. Следовательно, log10 УЕ(Ъ + 1) = log10(b + 1) | log10 VE < 1 log10 V5 = log10 0 log10 0 log10 0 ^ log10 ф log10 0 так как а « 4,7849 меньше 5и/?« 1,6722 несколько меньше 2. Итак, можно записать: ap-\-j3 = 5р+/?—(5—а)р, формула, в которой число (3 — (5 — а)р мажорируется 1, когда р ^ 4, что дает log10 0 Чтобы завершить доказательство, остается рассмотреть случаи, когда р = 1,2 или 3. Простые вычисления показывают, что когда [_Р € [1,3], имеем [ар + j3\ = Ър + 1, что доказывает лемму. Доказательство (теоремы Ламе). Свойство 45 вместе с предыдущей леммой позволяет без труда доказать теорему Ламе. Действительно, из этих двух результатов выводим п + 1 ^ Ър + 1, т.е. п ^ Ър. Кроме того, утверждение, состоящее в том, что Ь имеет р десятичных цифр в записи, означает Lp=Llogio*J + l = riogio(*+l)l- Главный результат в этой теории — сложность алгоритма Евклида для целых чисел логарифмическая по отношению к наименьшему из двух чисел. (Обозначение O(logb) скрывает весьма существенную константу) . Замечание. В оценке Ламе коэффициент 5 оптимален, так как для следующих пар (13,8), (144,89) и (1597,987), соответствующих парам (F7,Fe), (Fi2,Fn) и (Fi7,Fie), число итераций алгоритма Евклида, соответственно, 5, 10 и 15. Впрочем, это свойство не идет дальше Fn и Fie. Действительно, для пары (F22,F2i) = (17 711,10946) число итераций равно 20, в то время как оценка Ламе 25. Это показывает, что если коэффициент 5 оптимален, то мажорирующая функция таковой не является.
11-6.2 Квазиевклидовы кольца 217 6.2 Квазиевклидовы кольца Мы только что доказали, что оценка, даваемая теоремой Ламе, оптимальна только в некоторых особых случаях. Но даже если бы выражение, даваемое этой теоремой, было наилучшим, вопрос об оптимальности алгоритма Евклида нахождения НОД двух целых чисел все равно остался бы. Действительно, обычное евклидово деление не приводит к оптимальному алгоритму Евклида, как видно из раздела 3.4. Цель данного раздела — найти деления, которые оптимизируют сложность этого алгоритма. До настоящего момента мы рассматривали, главным образом, три класса колец, связанные следующими включениями: Г Евклидовы кольца! Г Кольца главных! ГФакториальные! \без делителей нуля/ ^ ^идеалов (КГИ) J ■*- ^кольца J ' Главные их характеристики, которые нас интересуют, следующие: • Наличие алгоритма Евклида и возможность эффективного вычисления НОД. Прототипами евклидовых колец являются Ъ и множество многочленов над полем. • Наличие НОД и разложения Безу без эффективного метода вычисления. Кольцо целых чисел из Q[V—19] является неевклидовым кольцом главных идеалов, в котором, между прочим, существует метод вычисления коэффициентов Безу [141] (кольцо целых Q[%/-19], состоящее из элементов, которые являются корнями унитарных многочленов с коэффициентами из Ъ). • Наличие и единственность разложения на простые множители (основная теорема арифметики). Кольцо А[Х] многочленов с коэффициентами из А факториально, если таковым является А) но не является КГИ, если А не является телом. Хотя понятие евклидова кольца более интересное с точки зрения эффективности, понятие алгоритма Евклида значительно сильнее. На практике оно ограничено методами, которые были представлены выше: • В КГИ известно существование НОД, но нет, вообще говоря, простой эффективной процедуры его вычисления. • Как будет видно из следующей главы, посвященной модулям над КГИ, что является основным содержанием главы, важным является не вычисление НОД с помощью деления, а вычисление коэффициентов Безу (что, конечно, приводит к нахождению НОД). • В кольце главных идеалов наличие НОД зависит не столько от того, что всякий идеал главный, сколько от того, что он конечного типа (этого достаточно).
218 II-6 Об оптимальных алгоритмах вычисления НОД • Наконец, как показывают нижеследующие результаты, сходимость некоторого метода такого, как алгоритма Евклида, не обязательно связано с существованием алгоритма Евклида в рассматриваемом кольце. (48) Определение. Пусть А — коммутативное унитарное кольцо. Квазиалгоритм на А есть отображение <р множества Ах А во вполне упорядоченное множество, обладающее следующим свойством: V(a,6) G Ах А*, 3(g,r) E Ах А такая, что a = bq + r и <p(b,r) < <p(a,b). Это равенство называется квазиевклидовым делением а на 6. Кольцо А называется квазиевклидовым, если оно допускает квазиалгоритм (р. Говорят также, что А квазиевклидово относительно (р. Примечание. Так как в случае евклидовых колец, термин алгоритм обозначал отображение, а не эффективный метод вычисления, то квазиалгоритм также будет полностью формальным объектом. Эта терминология нежелательна в работе, которая рассматривает алгоритмы в «информатическом» смысле. (49) Предложение. (г) Всякое евклидово кольцо является квазиевклидовым. (И) В квазиевклидовом кольце всякий идеал конечного типа главный (что приводит к наличию НОД двух элементов). Это означает, что всякое квазиевклидово кольцо является кольцом Везу. (iii) В частности, всякое нётерово квазиевклидово кольцо без делителей нуля является КГИ (в нётеровом всякий идеал конечного типа). Доказательство только для (И). I Пусть идеал А порожден двумя элементами. Допустим, что (a, b) G А х А — пара образующих идеала /, / = Аа + АЬ, где 6 отличен от нуля, для которой <р имеет наименьшее значение. Можно осуществить квазиевклидово деление а на 6 и записать a = 6g+г, где <р(Ь, г) < <р(а, Ь). Это приводит, в частности, к Аа+АЬ = АЪ+Ат и противоречит выбору пары (а, 6). Следовательно, такой пары с Ь ф 0 не существует, т.е. 6 = 0. Это запускает механизм индукции, которая не вызывает особых трудностей. Наличие НОД теперь выводится из того, что Ad = Аа + АЬ => [8\d <=> 8\а и 8\Ь].
11-6.2 Квазиевклидовы кольца 219 Замечание. Конечно, лучшее понимание квазиевклидова деления, основного для вычисления НОД, необходимо. Однако оно не позволяет провести эти вычисления. Как показывает предыдущее доказательство, НОД двух элементов кольца определяется единственным образом (это нулевой элемент пары, порождающий сумму идеалов, для которой значение квазиалгоритма минимально, что не является эффективным средством вычисления). Алгоритм Евклида остается допустимым для квазиевклидовых колец и обладает той же сходимостью, что и в евклидовых кольцах. (50) Предложение. Коммутативное унитарное кольцо А является квазиевклидовым тогда и только тогда, когда оно удовлетворяет следующему условию: Цго^г^еАхА, 3nGN, 3(gi,...,gn)GAn, 3(r2,.. .,rn+1) G Лп, такие, что: Уг Е [1, п] : rt_i = rt(/t + rt+i и rn+i = 0. Кроме того, отображение <р, которое со всякой парой (г0, г\) 6 А х А ассоциирует наименьшее целое п, для которого существует цепь псевдоделений, оканчивающаяся нулевым остатком, является самым малым квазиалгоритмом, определенным на А. Доказательство. I Согласно второму пункту предшествующего замечания, условие необходимо. Поэтому надо показать его достаточность. Итак, пусть А — кольцо, удовлетворяющее условию предложения 50. Ясно, что отображение <р есть квазиалгоритм для А. Действительно, пусть а, 6 и г такие, что минимальная цепь псевдоделений для пары (а, 6) начинается с a = bq + г. Тогда, принимая во внимание минимальность <р, имеем <р(Ь, г) +1 ^ <p(a, b) и, следовательно, <р(Ь, г) < <р(а, 6). Проверка того, что указанный квазиалгоритм минимален, является [_простой формальностью. Итак, данное предложение позволяет построить квазиалгоритм для квазиевклидова кольца. Это построение (если оно эффективно) определяет самый быстрый метод вычисления НОД через алгоритм «по Евклиду» в квазиевклидовом кольце. Действительно, Лазар [112] доказал следующие свойства: (51) Теорема (Лазара). (г) Обычное евклидово деление в К[Х] является евклидовым делением, согласно минимальному квазиалгоритму в К[Х]. Алгоритм Евклида, следовательно, является самым быстрым методом вычисления НОД
220 11-6 Об оптимальных алгоритмах вычисления НОД двух многочленов с коэффициентами в поле через последовательные деления. (И) В Ъ всякое евклидово деление с самым малым остатком является делением согласно минимальному квазиалгоритму в Ъ. (tit) Точнее, в Ъ деление a = bq + г есть деление по минимальному квазиалгоритму тогда и только тогда, когда \г\ < \Ь\/ф (ф является золотым числом и \/ф « 0,6180339...). Доказательство. I Доказательство пункта (i) очень простое и фигурирует в упражнениях 42 и 43, находящихся в конце главы. Пункты (i) и (Ш) не очень интересны для доказательства и не представляют больших трудностей. Например, можно проиллюстрировать пункт (Ш). Пусть для вычисления НОД даны числа 4215 и 1177. Вот различные этапы алгоритма Евклида. Слева используется деление с наименьшим остатком, а справа деление, для которого отношение остатка к частному может превысить 0,5, все еще не превышая 1/ф: 4215= 4 х 1177+(-493), 1177= (-2) х (-493) + 191, -493=(-3)х 191 + 80, 191=2x80 + 31, 80= 3x31+ (-13), 31= (-2) х (-13)+ 5, -13= (-3) х5 + 2, 5= 3-х 2 +(-1), 2=(-2)х(-1) + 0, 4215=3x1177+684, (*) 1177= 2x684+ (-191), 684= (—3) х (—191) + 111, (*) -191= (-2) х 111 + 31, 111=3x31 + 18, (*) 31= 2 х 18+ (-5), 18=(-3)х(-5) + 3, (*) -5= (-2) х 3 + 1, 3=3 х 1 + 0. В решении по этому последнему алгоритму 4 деления, отмеченные звездочкой, дают остатки, абсолютное значение которых больше половины делителя, оставаясь в границах теоремы Лазара, а число итераций остается равным 9 (значение минимального квазиалгоритма для этих двух целых чисел). 6.3 Вычисление НОД нескольких целых чисел: теорема Дирихле Когда необходимо вычислить НОД нескольких чисел, а не только двух, можно применить несколько методов:
Н-6.3 Вычисление НОД нескольких целых чисел: теорема Дирихле 221 • Распространение алгоритма Евклида, базирующегося на следующих свойствах: (г) НОД(0,...,0,а,0,...,0) = а, (и) НОД(и1,..., щ,..., ип) = НОД(и1 mod щ,..., щ,..., ип modu,) при щ ф 0. За подробностями этого метода читатель может обратиться к упр. 24. • Следующий метод заключается в повторном применении алгоритма Евклида для двух целых чисел. Он основывается на следующем свойстве: НОД(и1,.. .,un) = НОД(и1,НОД(и2, • • •>мп)), которое порождает рекурсивный алгоритм вычисления НОД. Именно, НОД(и1,...,и„) = НОД(НОД(и1,и2),из,...,ип)), что является основой соответствующего итеративного алгоритма. Этот последний метод не только упрощает реализацию вычисления — действительно, достаточно несколько раз применить уже реализованный алгоритм — но и имеет неоспоримое достоинство с точки зрения эффективности. Неформально говоря, главное заключается в следующем: выбирают два числа в последовательности, для которой надо вычислить НОД. Затем, сделав первое вычисление, заменяют два выбранные числа на их НОД и повторяют алгоритм. Выигрыш в эффективности получается из того, что как только находят НОД, равный единице, вычисление может быть прервано. Неиспользованные числа ничего не могут добавить к полученным результатам. К тому же это явление довольно распространенное, потому что, как утверждает теория Дирихле, более, чем в 60% случаев два целых числа, взятые случайно, взаимно просты. Продолжение этого раздела посвящается двум доказательствам теоремы Дирихле. Одно — эвристическое (короткое и неправильное), а другое — более длинное, но верное. Второе доказательство требует введения функции Мёбиуса, и мы воспользуемся случаем доказать формулу обращения Мёбиуса — ту формулу, которая уже была использована в разделе 4.2. (52) Теорема (Дирихле). Если и иу — два натуральных числа, выбранные случайно, то вероятность того, что они взаимно просты, равна б/л*2 « 0,607927. Более формально, если Я? = {{и,г))еГ2/иЦп,Ц^пи НОД(и,v) = 1}, то р = lim —51- = Л-, где #Я? означает мощность множества Н?.
222 11-6 Об оптимальных алгоритмах вычисления НОД Обозначения, использующиеся в следующих ниже доказательствах, таковы. Для натурального числа d и вещественного положительного х определим: Hd = {(u}v)eN*2 I UOH(uiv) = d}} Hxd = {(и, 1/)еК*2/1^^,Ц^1и НОД(и,v) = d}. В этих обозначениях х часто будет заменяться на натуральное число, как в формулировке теоремы Дирихле. Множество Н\ необходимо для оценки функции распределения в N* . Эвристическое доказательство (теоремы Дирихле). I Утверждение НОД(u, v) = d равносильно тому, что it и v кратны d и что НОД(и/с/,v/d) = 1 (т.е. (u/d,v/d) 6 Н\). К тому же для всякого натурального п множества Н^* и Я" имеют одну и ту же мощность. Следовательно, для х > 0: фИ'л *Hlld #H*Jd 1 х2 х2 (x/d)2 d2' Переходя к пределу, получим: hmMl = Lx(iim*K)=p_ х-юо х2 d2 Vr-юо х2 / d2' где последнее число — «вероятность» того, что два числа имеют наибольший общий делитель d. С другой стороны, можно записать N* = US=i Hdi где объединение является объединением непересекающихся множеств (Hd — есть множество пар целых натуральных чисел с НОД равным d). Тогда можно заключить, что Ь = ЕГ=1 p/d2 = р£?=1 i/rf2 = рт2/б- Настоятельно просим читателя найти ошибку в этом интуитивном доказательстве. А сейчас переходим к доказательству теоремы Дирихле. Для этого доказательства нужна функция Мёбиуса вне связи с теорией арифметических функций, где она обычно появляется. (53) Свойство. Назовем функцией Мёбиуса функцию /i, определенную на N* следующим образом: {1, если к = 1, (—1)г, если к = р\р2 .. .рг, где pi ф pj при %Ф j — простые числа, О в противном случае.
Н-6.3 Вычисление НОД нескольких целых чисел: теорема Дирихле 223 Эта функция тесно связана с частичным упорядочиванием на множестве целых чисел с помощью отношения делимости. Для целого числа d > 1 функция \i удовлетворяет соотношению ]СшА*(^) = 0. Доказательство. Пусть d = р"1 ...Ргг — каноническое разложение d. Достаточно рассмотреть только делители d, свободные от квадратов, так как функция /i на других делителях исчезает, т.е. такие делители числа rf, которые разлагаются в произведение простых р, с показателями 0 или 1. Следовательно, чтобы найти такие делители, достаточно выбрать j различных чисел р, и получить ^^) = D-i)jx(;) = (i+(-i))r, k\d j=o VJ/ |__согласно определению \i. Теперь мы получим формулу обращения Мёбиуса в не совсем привычной форме. (54) Предложение. Пусть f и g — две функции отШ+ со значениями в некоторой аддитивной абелевой группе. Тогда 1*1 И Доказательство. Используемый метод заключается в перенесении выражения от /, задаваемого первой формулой, во вторую: = Е "(*)*'(^)- Учитывая, что LWAJ = LXAJ> можно сделать следующую замену переменных: h = kp с 1^Л^яи&|Л, что дает
224 11-6 Об оптимальных алгоритмах вычисления НОД £«Чх/(г)-ё(.(:)х2>>). к-\ Л=1 Ч k\h ' Согласно свойству 53, в этой сумме есть только одно ненулевое слагаемое, именно то, которое отвечает значению Л = 1 и, следователь- LH°.Ei*JiM*) */(*/*) = *(*)• Доказательство теоремы Дирихле будем осуществлять в три этапа. (55) Лемма. Пусть х — вещественное положительное число. Обозначим через qx число элементов множества Hf. Тогда qx = ]Cfc>1/i(fc) x LXAJ2> Формула, в которой, на первый взгляд, бесконечное число слагаемых, но только конечное их число отлично от нуля. Доказательство. I Пусть qdfX — множество элементов множества Я J. Множество пар натуральных чисел, не превосходящих х, есть, как это было видно в эвристическом доказательстве, теоретико-множественная сумма непересекающих подмножеств Exd, где d изменяется от 1 до [х\: l*J2 = E&W = ££W/«j. так как #Я| = #я}*^. При- меним к этому выражению формулу обращения, фигурирующую в предложении 54, отождествляя функцию / с функцией х »-> [х\2 и |_функцию g с функцией х »-»> qX) и получим искомый результат. Следующий этап доказательства требует (это было неизбежно) вычисления пределов и суммы ряда. (56) Лемма. В предшествующих обозначениях для натурального числа п имеем оо lim % = £>(*)А2. к — \ Доказательство. I Ряд, фигурирующий в правой части формулы, является, очевидно, абсолютно сходящимся, так как функция Мёбиуса мажорируется по абсолютной величине единицей. Итак, достаточно оценить разность между общими членами этих двух последовательностей и показать, I что она стремится к нулю. Имеем:
11-6.3 Вычисление НОД нескольких целых чисел: теорема Дирихле 225 k = l k = l Кроме того, для всякого вещественного положительного числа х имеем 0 ^ х — [х\ < 1 и, следовательно, 0 ^ l/k — [n/k\/n ^ 1/п. В этих условиях °* b~^x[-k\2 = (Hxl£J)x(b£xljJ) * 1хт Перенося эти значения в разность для мажорирования, получаем: |gn_v^M*0| < 2 ^1 < 21ogn |П2 2^ к2 | ^ п Х2^к * п ' к = 1 к = 1 величина, стремящаяся к нулю, когда п стремится к бесконечности. Итак, последовательность (дп/п2)п6и* сходится и имеет тот |_же предел, что и ряд. Для того, чтобы закончить доказательство теоремы Дирихле, остается вычислить сумму ряда с общим членом fi(k)/k2. Для этого дока- жем, что (£~ iM*)/*2) * (ЕГ=1 V*2) = 1- Оба рассматриваемых ряда — абсолютно сходящиеся, и потому можно изменить порядок суммирования следующим образом: 4 = 1 7 vm=l ' k-\m-\ d=l xk\d ' По уже доказанному свойству 53 самая внутренняя сумма нулевая, за исключением случая, когда d = 1. Сумма ряда с общим членом 1/к2 равна 7г2/6. Теорема Дирихле доказана. Конец этого раздела посвящен классической формуле обращения Мёбиуса. Рассмотрим множество N*, упорядоченное с помощью отношения делимости. В этой структуре 1 — наименьший элемент и всякий интервал [а, 6] конечен. (N*, |) — упорядоченное множество, являющееся локально конечным. Поэтому на множестве функций Т) определенных на N* со значениями в Л, можно ввести внутренний закон композиции. 15 1017
226 11-6 Об оптимальных алгоритмах вычисления НОД (57) Определение. Ha T определен закон внутренней композиции *, называемый арифметическим произведением, по следующему правилу: v/ е т, vg е ;г, vn е гг, (f*g)(n) = £/(<*)* (5). d\n (58) Свойства (произведения *). (г) Произведение ассоциативно и коммутативно. (И) Функция Кронекера 8, определяемая как 8(1) = 1 и 8(п) = О, если п > 1, есть нейтральный элемент для произведения *. (iii) Элемент f Е Т обратим для операции * тогда и только тогда, когда /(1) обратим. (iv) Множество Т, наделенное обычным сложением функций и операцией *, является коммутативным унитарным кольцом. Доказательство (только пункта (Ш)). I Пусть / Е Т такой, что /(1) Е U(A). Определим g по индукции следующим образом: ff(l) = /(l)-1 и <7(n) = -/(l)-1J](?(d)/(5) прип>1. d\n Простая проверка показывает, что g — обратный элемент для /. Остальные утверждения теоремы немедленно выводятся из определения арифметического произведения. (59) Свойство. Пусть £ — элемент из Т, определяемый по правилу £(п) = 1, Vn EN*. Тогда в (Т, *) функции £ и /i обратны друг другу. Проблема, решаемая с помощью формулы обращения Мёбиуса, следующая. Пусть g — функция из N* в А и пусть / — функция, определенная по правилу f(n) = $^d|n g{d) для n E N*. Можно ли в этом случае выразить функцию g через /г Другими словами, можно ли найти обращения этой формулы? Ответ дает следующая (60) Теорема (Формула обращения Мёбиуса). Пусть f и g — две функции в Т, такие, что для любого n E N* справедливо соотношение f(n) = J2d\n9(d)- Тогда можно выразить g через функцию /: g(n) = J2d\n /i(c')/(n/c')> гДе t* — функция Мёбиуса.
II-7 Расширенный алгоритм Евклида 227 Доказательство (формулы обращения Мёбиуса). I Выражение / через функцию g описывается в терминах умножения *: / = £*(/, а так как £ и \i взаимно простые элементы относительно |_операции * (свойство 59), то получаем g = /i * /. Более общие сведения по теории арифметических функций можно получить, обратившись к монографии Бержа [19]. 7 Расширенный алгоритм Евклида Этот раздел посвящен изучению эффективного метода получения коэффициентов Безу в евклидовом и квазиевклидовом кольце. Надо отметить, что квазиевклидовый случай — не единственная возможность для построения таких алгоритмов (известным примером является неевклидово кольцо главных идеалов кольца целых алгебраических чисел в Q(\/—19)). В следующей главе мы увидим, что наличие коэффициентов Безу является главным ключом к классификации модулей над кольцом главных идеалов (теория инвариантных множителей): кто умеет их вычислять, тот умеет решать эффективным образом задачи линейной алгебры над кольцом главных идеалов. 7.1 Вычисление коэффициентов Безу в квазиевклидовом кольце Для квазиевклидова кольца А разновидность алгоритма Евклида, предложенная в разделе 3.2, позволяет вычислить коэффициенты Безу. Используемые обозначения те же, что в разделе 3.2. Алгоритм, примененный к паре чисел а, 6, порождает последовательность (rt)o^t^n+i такую, что г,--1 = Щ{ + r<+i для 1 ^ г ^ п, где г0 = а, гх = 6, rn+i = 0. Элемент т%+х является линейной комбинацией г, и rt_i (r,+i G Ari + i4rt_i). Так как г0 = 1 • а + 0 • 6, ri = 0 • а + 1 • 6, то по предыдущему рекуррентному соотношению для г, получаем, что гп = НОД(а,6) — линейная комбинация а и 6. Точнее, предполагая, что г, = ща + v,6, получаем: г,-+1 = n_i - gtrt = (ut_i - qtui)a + (vt_i - g,vt)6. !5*
228 11-7 Расширенный алгоритм Евклида Из этих формул легко получается рекуррентная последовательность: (в) ио = 1, vo = О, г0 = а, щ = О, vi = 1, Г1 = 6, ut-+i = uj_i - gtUj, Vi+i = vt_i - gtVj, rt-+i = r*_i - gtrj, из которой теперь и следует классический результат: гп = НОД(а, 6) = ипо> + v„6. Эти соотношения приводят, к тому же, к рекуррентному алгоритму, изображенному ниже, в котором тройка (u, v) r) соответствует (и,-, Vj, rt) и тройка (u', t/, г') соответствует (iii+i, Vi+i, n+i). Переменная г, бесполезная для алгоритма, присутствует в комментариях только для того, чтобы придать смысл утверждениям. function Bezout (а, Ь € A) return (u,v) € А х A is u,v Коэффициенты Везу для пары (а, 6) begin СЬЮ- (;)-(!)• W «*—0; __ while г V 0 loop М^^^Ш1^^1^Ш1Й д *— г/г'; &|§#& fti v r\ / «' г/ г' \ \u' v' r'J *~ \u-qu' v-qv' r-qr')'1 end loop; return (u, v); end Bezout) Вот другое доказательство, основанное на эквивалентном представлении того же алгоритма. Для этого все рекуррентные соотношения (6) запишем в матричной форме: ( Щ Vi r{ \ _ /0 1 \ fui-i \щ+1 vi+1 ri+ij \l -qi)\ Щ (uq vo r0 \ _ /1 0 a \ \u\ v\ r\ J "" \0 1 b J ' Vi-\ Vi V) u0 vo Эти равенства дают: Щ Vi tit-l Vt-l Щ Vi Щ+l Vt+l =(-ir- Затем: [ * * ) [ , ) = [ * ) , и его «обращение»
11-7.1 Вычисление коэффициентов Везу в квазиевклидовом кольце 229 (:)-<-■>*(-£, -:)(,«)• Алгоритм 3. Алгоритм Безу для квазиевклидова кольца Следовательно, для i = п имеем: а = (— l)nvn+irn, Ь = (—1)п+1ип+\гп и гп = ипа + vnb. Последние соотношения явно показывают, что гп является, с одной стороны, общим делителем, а с другой — линейной комбинацией а и 6. Это порождает новое эффективное доказательство, поскольку гп является НОД а и 6. Этот подход позволяет построить самодостаточный алгоритм (3), в котором больше не фигурирует переменная г. г 0 1 2 2 3 4 5 | 6 д. «» 1 0 0 1 1 1 -1 1 2 1 -3 1 5 2 =8 vt 0 1 -1 2 -3 5 -8 13 Г< 1292 798 494 304 190 114 76 38 «t+i 0 1 -1 2 -3 5 -8 21 Vi+l 1 -1 2 -3 5 -8 13 -34 r.+i 798 494 304 190 114 76 38 о 1 Таблица 3. Вычисление коэффициентов Безу В таблице 3 приведен пример вычисления коэффициентов Безу в Ъ. Этот пример может быть полезен для понимания следующего параграфа. В рассматриваемом примере а = 1292, Ь = 798, их НОД = 38 и найденные коэффициенты Безу и = — 8 и v = 13 (подчеркнутые числа).
230 11-7 Расширенный алгоритм Евклида Коэффициенты Безу часто применяются для вычисления обратного элемента в Ъ/nL. Пусть, например, требуется обратить класс 34 в Z/235Z (34 взаимно просто с 235, следовательно, обратимо по модулю 235): алгоритм Безу дает соотношение 1 = 11 х 235 — 76 х 34, и обратным к 34 по модулю 235, следовательно, является — 76 = 159. Операция обращения часто необходима в модулярной арифметике. Иногда эта конструкция требуется и в других кольцах, например, в кольце целых чисел Гаусса. Так, алгоритм Безу, примененный в Z[i] к числам 23 + 14г и 7 + 5г, дает 1 = (-3 + 2г) х (23 + 14г) + (9 - 7г) х (7 + 5г) и, следовательно, обратным к элементу 7 + 5г по модулю 23+ 14г будет 9 —7г. 7.2 Мажорирование коэффициентов Безу в Z Равенства иа + vb = (и — kb)a + (v + ка)Ь и для d, делящего а и 6, иа + vb = (и — kb/d)a + (v + ka/d)b показывают, что существует много пар {u,v), для которых НОД(а,6) = иа + vb. Расширенный алгоритм Евклида, полученный в предыдущем разделе, позволяет вычислить такую пару {u,v), что, за исключением лишь некоторых особых случаев, выполняются неравенства \и\ ^ \b/2d\ и \v\ ^ \a/2d\. Эти оценки являются объектом исследования для следующего предложения. Единственность такой пары (u,v), удовлетворяющей указанным неравенствам (упр. 33), доказывает, что пара Безу, получаемая алгоритмом Евклида, является самой «красивой». (61) Предложение. (г) Пусть а и b — различные строго положительные целые числа, и пусть d их НОД. Пусть (tft)o^n+b (vi)o^n+i — последовательности, полученные расширенным алгоритмом Евклида. В этих условиях последовательности |iii|i^i^n+i и |vi|o^i^n+i являются возрастающими, не переполняют разрядную сетку машины — в предположении, что a и b представимы машинными кодами — и указанный алгоритм дает коэффициенты Безу u, v, удовлетворяющие оценкам: \ч\ ^ |6/2d|, М <С |a/2d|. (7) (И) Если (a,b) — яара целых чисел, отличная от (0,а), (а,0) и (a,±a), то существуют коэаЪфициенты Безу, удовлетворяющие неравенствам (7).
11-8 Факториальность кольца многочленов 231 Доказательство. I Напомним классические обозначения: П-1 = riQi + Г.-+1, tlj+i = Щ-l - Uiqif Vi+i = Vj_i - Viqi, И Uo = Vi = l, Ui=Vo=0. Легко убедиться, что U2% ^ 0 и 1121+1 ^ 0; значит, |iii+i| ^ |ut-gt-|, откуда видно (ввиду gt > 0), что последовательность (|uf-|) возрастающая для i ^ 1. В конце алгоритма имеем |t/n+i| ^ |?пМп|, где qn ^ 2, что неверно только для случаев, выписанных в явном виде в (И). Однако |un+i| = a/rf, что заканчивает доказательство (для v,- ^доказательство аналогично). 8 Факториальность кольца многочленов Прежде чем закончить эту главу, «пробежимся» по кольцам многочленов, что позволит построить приемлемые алгоритмы вычисления НОД с эффективными оценками трудоемкости. Но сначала немного теории. (62) Теорема. (г) Если А — унитарное нётерово коммутативное кольцо, то кольцо многочленов А[Х] нётерово. То же верно и для кольца А[Х\,..., Хп]. (И) Если К — поле, то К[Х\,..., Хп] нётерово. (ш) Кольцо многочленов Ъ\Х\,..., Хп] с целыми коэффициентами нётерово. Для доказательства теоремы нам понадобятся некоторые простые результаты. Пусть п — натуральное число, / — идеал в А[Х]. Обозначим через dom„(/) часть А, состоящую из коэффициентов при старших (доминирующих) членах многочленов из /, имеющих степень в точности равную п, и к которой добавлена константа 0. (63) Лемма. (г) dom„(7) — идеал в А. (гг) Если n ^ m, то dom„(7) С domm(7) (рассмотреть Xm~n P для Р в I, имеющего степень п). (iii) Если I С J, то dom„(7) С dom„(J). (64) Лемма. Пусть I С J — два идеала в А[Х], такие, что для всякого п: dom„(7) = domn(J). Тогда I = J.
232 11-8 Факториальность кольца многочленов Доказательство. Пусть Р — элемент J. Если Р степени 0, то очевидно (так как domo(7) = domo(J)), что Р £ LB остальных случаях будем использовать индукцию по степени п полинома Р. Пусть Р = аХп + • • • и a Е dom„(J) = domn(7). Поэтому существует Q Е /, такой, что Q = аХп Н . Многочлен Р — Q имеет степень, меньшую, чем п, и принадлежит J. По предположению индукции получаем Р — Q Е /, а тогда Р £ I. Доказательство теоремы 62 Рассмотрим возрастающую последовательность (/,-) идеалов в А[Х]. Семейство идеалов (domn(/t))tjn имеет максимальный элемент (но не максимум на данный момент) domno(/,0). Следовательно, для всякого п ^ по и для всякого i ^ г'о dom„(/t) = dom„0(/,0). Рассмотрим таблицу: domi(/i) С doni2(/i) П П domi(/2) С doni2(/2) П П С • С • • С dom„0(/i) С dom„0+i(/i) С П П • С domno(/2) С dom„0+i(/2) С П П domi(/i0) С dom2(/,0) С ••• С dom„0(/i0) С dom„0 + i(/i0) С П П П П domi(/i0+i) С dom2(/,0+i) С ••• С dom„0(/i0+i) С dom„0+i(A0+i) С П П П П Существование г'о и по означает, что столбцы таблицы, ранг которых превышает по, стабилизируются, начиная с линии г'о. Более того, стабилизируется всякий столбец с номером п < щ. Поэтому, строки предыдущей таблицы, начиная с некоторого индекса д, совпадают: для всякого г ^ q имеем domn(/,) = domn(/g), и по лемме 64 это доказывает, что /,• = Iq. Последовательность идеалов в А[Х] стабилизируется. Следовательно, А[Х] нётерово. ■ Перейдем теперь к свойствам разложения. (65) Лемма (Гаусса). Пусть простой элемент р кольца А делит произведение многочленов Р и Q над А. Тогда р делит Р или Q. Доказательство. Пусть р не делит ни Р, ни Q. Обозначим через а,- и bj такие коэффициенты Р и Q, соответственно, что i и j — наименьшие номера.
11-8 Факториальность кольца многочленов 233 I для которых р \ сц и р \ bj. Тогда р f ]C*+/=i+j а*^ь так как Р делит все слагаемые этой суммы, кроме первого. Противоречие. В действительности лемма Гаусса не утверждает ничего, кроме того, что «если А/(р) без делителей нуля, то это же утверждение верно и |_для А[Х]/(р)». (66) Определение. Пусть А — факториальное кольцо. Назовем содержанием многочлена Р с коэффициентами из А НОД его коэффициентов и обозначим его через с(Р). Многочлен Р называется примитивным, если его коэффициенты взаимно просты, т.е. если его содержание равно 1. Примитивная часть Р равна Р/с(Р), это примитивный множитель. (67) Следствие. (г) Произведение примитивных многочленов является примитивным. (и) Содержание произведения двух многочленов ассоциировано с произведением содержаний этих многочленов: c(PQ) ~ c(P)c(Q). Доказательство. I Пункт (г) является непосредственным следствием леммы Гаусса. Что касается пункта (гг), то можно заметить, что Р = с{Р)Р' и Q = c(Q)Q'', где Р' и Q' — примитивные многочлены. Отсюда получаем, что c(PQ) = c{P)c{Q)c{P'Q'), которое эквивалентно |__c(P)c(Q), согласно пункту (г). (68) Следствие. Пусть Р — примитивный многочлен с коэффициентами в факто- риальном кольце A, Q — другой многочлен. Если Р делит Q над полем частных кольца А, то он делит Q ив А[Х]. В частности, если для a 6 А* Р делит aQ, то Р делит Q. (69) Теорема (Гаусса). Пусть А — факториальное кольцо, К — его поле частных, Sa — система представителей неприводимых элементов из А (т.е. такая система, по которой можно единственным образом разложить любой элемент из А). Пусть S' — система представителей неприводимых многочленов в К[Х] с коэффициентами из А, являющихся примитивными. Тогда S' U Sa — система представителей неприводимых элементов в А[Х]. В частности, А[Х] факториально.
234 11-8 Факториальность кольца многочленов Доказательство. Пусть Р G А[Х] — многочлен положительной степени (в противном случае Р раскладывается по системе Sa)- В /£[X], являющемся кольцом главных идеалов, а следовательно, факториальным, многочлен Р можно разложить в произведение неприводимых: Р = аЦ<Эа«, где аеК* naQeN, Qes1 а можно записать в виде а = p/q, где р, q E А. Следовательно, qP = p]\QaQ, что является равенством в А[Х]. Согласно следствию 68 ПФад> являющийся примитивным многочленом, делит qP, а потому делит Р и а Е А (в силу единственности разложения в #[А"]). Но тогда получим разложение в А[Х]\ Разложение в К[X] единственно, так как К[Х] факториально. Следовательно, разложение в А[Х] единственно. (70) Следствие. (г) Если А — факториальное кольцо, то это же верно и для А[Х\,..., Хп] и результат, разумеется, верен, если А — поле. (и) В частности, Ъ\Х\,..., Хп] — факториальное кольцо. Примечания. 1. Теорема Гаусса позволяет охарактеризовать неприводимые элементы в А[Х\,..., Хп]- А именно: • неприводимые константы в Л, • неприводимые примитивные многочлены над полем дробей кольца А. 2. Всякое кольцо многочленов над факториальным кольцом факториально. Однако кольцо многочленов над КГИ не является, вообще говоря, КГИ. (А[Х] — кольцо главных идеалов тогда и только тогда, когда А — поле). Идеал / = (X + 2)Z[X] + XZ[X] в кольце ЩХ\ не является главным, хотя он и максимален, так как это ядро сюръективно- го морфизма х и3 ЩХ\ на Z/2Z, который каждому многочлену ставит в соответствие класс четности его постоянного коэффициента. Итак, Z[X]/I тело, и / — максимальный. Мы закончим эту, немного абстрактную, часть критерием неприводимости многочлена в факториальном кольце: критерий Эйзенштейна.
II-8 Факториалъность кольца многочленов 235 (71) Предложение (критерий Эйзенштейна). Пусть А — факториальное кольцо и К — его поле дробей. Пусть Р = anXn Н h aiX + ao — многочлен с коэффициентами из А, такой, что для некоторого неприводимого р Е А выполнено: р\ <*о, р \ а\, ..., р\ an_i, нор f an ир2 f ao. Тогда Р неприводим в К[Х], а следовательно, ивА[Х]. Доказательство. Предположим, что Р = (6gX9-f • • •+60)(сгЛ'г + • • +с0), g > 0 и г > 0. Так как р | ao и р2 \ ao, то можно предположить, что р | &о и р2 \ cq. Кроме того, из р2 \ an, следует, что р2 f 6g. Итак, можно найти такое целое число s ^ д, что р | 6* для всякого i < s и р2 \ bs. Так как s ^ q < п, тор делит а5, которое равно 65со+65_icH Ь&*с5_£ с k = min(s, г). Так как р делит все 6; с t < s, то он делит первый член суммы bsco. Так как он не делит 65, то р делит со, откуда |_получаем противоречие, ибо р2 не делит ao. Примеры 1. Пусть р — простое число и ФР(Х) = Х**-1 + Х**"2 + • • • + X + 1. Тогда Фр неприводим в Q[X]. Действительно, ФР(Х +1) = (Х + 1)р — 1 = ]Соо CD^* — многочлен, удовлетворяющий критерию Эйзенштейна. Фр - циклотомический многочлен уровня р. 2. Однако для всякого непростого п > 1 многочлен Рп = Xn_1 + Хп~2 + --- + Х + 1 не является неприводимым. Чтобы это увидеть, достаточно записать, полагая п = аб: _ ХоЬ-1 _ {Xa)b-lXa-l ab " X - 1 - Ха - 1 X - 1 ' 3. Рассмотрим теперь для простого числа р циклотомические многочлены Фр« = Xb-W1 + X<i>-2>'e-1 + • • • + Х*""1 + 1 = Фр(ХРа'1). Эти многочлены неприводимы над Z. Осуществим ту же самую замену переменных X -> X + 1, что и для Фр, и без труда докажем, что р — свободный член многочлена ФР«(Х -+- 1) и Х(р-1)р° — его старший член. Затем рассмотрим Z/pZ[X], где имеем формальное равенство (X + Y)'= X'+ У. Тогда Ф,х + л = С**1)'*-1 = J£L = *о-ч,-'
236 II-8 Факториальность кольца многочленов Следовательно, в ЩХ] имеем ФР°{Х + 1) = Х^~1)ра"1 + pQ, где Q — многочлен с целыми коэффициентами, имеющий степень, строго меньшую (р — 1)ра-1. Критерий Эйзенштейна тогда применяется напрямую (можно посмотреть упражнение 52, которое доказывает неприводимость всех циклотомических многочленов). щ Прежде чем вычислять НОД двух многочленов, рассмотрим алгоритм, позволяющий осуществить псевдоделение в кольце без делителей нуля. Напомним, что обычное евклидово деление многочленов возможно в А[Х], если старший коэффициент делителя обратим в А. Чтобы избежать этого предположения, умножим делимое на подходящую степень старшего коэффициента делителя и вместо обычного равенства Р = QW + R получим, например, тождество аР = QW + R. function Pseudo-Division (А, В € -АрП) return (Q, Я, а) удовлетворяющие аА = BQ + R is п = deg(A), m = deg(B), Я(0 .. п) и Q(0 .. п — т) векторы с компонентами в А. begin Д(0 .. п) <— А(0 .. п); Q(0 .. п - т) <— 0; а <— 1; for k in reverse 0 .. п — т loop R(6 .. 'к - 1) 4— Ът'ЩО ..к- 1); Q(k) V- bmR(m + к); R(k .. т + к - 1) <— bmR(k .. т + к - 1) - Q(k)B(0 .. m - 1); а «— abm; end loop; return (Q, Я(0 .. m - 1), а); end Pseudo-Division; Алгоритм 4. Евклидово псевдоделение многочленов над кольцом без делителей нуля При применении алгоритма 4 к многочленам с целыми коэффициентами (как это и будет сделано далее) коэффициенты промежуточных результатов растут чрезмерно быстро (элемент а равен 6^~т+1), и при желании уменьшить этот рост можно заменить множитель Ьт при умножении коэффициентов на &т/НОД(6т,гт+*). Это ничего не изменит в инвариантах, но зато несколько ограничит рост коэффициентов. Чтобы разработать алгоритм «а 1а Евклид» для вычисления НОД, надо убедиться, что метод, заключающийся в итерированном повто-
II-8 Факториальность кольца многочленов 237 рении псев до делений, сохраняет НОД в некотором смысле, который предстоит определить. Рассмотрим два примитивных многочлена А и В и сделаем псевдоделение А на В: аА = BQ + R. Очевидно, что делитель А и В является делителем R. Обратно, если D делит В, то D примитивен, так как В является примитивным. Если к тому же D делит Д, то он делит и аА) а следовательно, делит А. Итак, псевдоделение А на В сохраняет НОД для примитивных многочленов. Для итерирования этой процедуры можно рассматривать впоследствии только примитивную часть R. Действительно, в предыдущих обозначениях НОД(А,£) и НОД(£, R) имеют одну и ту же примитивную часть. С другой стороны, содержание НОД двух многочленов есть НОД содержаний. Алгоритм вычисления НОД двух многочленов с коэффициентами в (факториальном) кольце заключается, следовательно, в вычислении rf, НОД содержаний двух многочленов. Затем, в выполнении псевдоделений примитивных частей исходных многочленов. Повторяют операцию, заменяя полученный остаток его примитивной частью, и т.д. Алгоритм останавливается, когда полученный остаток нулевой или постоянный. В этом случае НОД двух многочленов — примитивная часть последнего ненулевого остатка, умноженного на постоянную d) вычисленную в начале алгоритма. Пример Сейчас мы вычислим НОД двух многочленов (пример заимствован у Кнута): Р = Х8+Х6-ЗХ4-ЗХ3+8Х2+2Х-5 и Q = ЗХ6+5Х4-4Х2-9Х+21. Эти два многочлена примитивны. Следовательно, никакие поправки после вычислений не должны вноситься в полученный результат. Сделаем первое псев до деление: 27Р = Q • {9Х2 - 6) + (-15Х4 + ЪХ2 - 9), и сохраним только примитивную часть полученного остатка: —ЬХ2 + X2 — 3. Затем повторим эти действия и получим следующую последовательность псев до делений: 27(Х8 + Xе - 3X4 - ЗХ3 + 8Х2 + 2Х - 5) = = (ЗХ6 + ЬХ* - 4Х2 - 9Х + 21)Wi + (-15X2 + ЪХ2 - 9), 125(ЗХ6 + ЪХА - АХ2 - 9Х + 21) = (5Х4 - X2 + 3)W2+ + (-585Х2-1125Х + 2205),
238 11-9 Вместо заключения 2197(5Х4-Х2 + 3) = (13X2 + 25X-49)W3 + (-233150X + 307500), 21743569(13Х2 + 25Х - 49) = (4663Х - 6150) W4 + 143193869. Два исходных многочлена, следовательно, взаимно просты. Отметим, что после каждого псевдоделения сохраняется только примитивная часть остатка. Это приводит к большому количеству вычислений, которые могут существенно замедлить алгоритм. Посмотрим, что стало бы с последовательностью псев до делений, если не осуществлять этого сокращения на каждом этапе. 27(Х8 + Xе - ЗХ4 - ЗХ3 + SX2 + 2Х - 5) = = (ЗХ6 + ЪХА - АХ2 - 9Х + 21)Wi + (-15X2 + ЗХ2 - 9), 3375(ЗХ6 + ЪХА - АХ2 - 9Х + 21) = = (-15Х2 + ЗХ2 - 9)W2 + (15795Х2 + 30375Х - 59535), 3940568584875(-15Х2+ЗХ2-9) = (15795Х2+30375Х-59535) W3 +(1254542875143750Х - 1654608338437500), 1573877825573946701583164062500(15795Х2 + 30375Х - 59535) = = (1254542875143750Х- 1654608338437500)W4+ +12593338795500743100931141992187500. Это апокалиптично! Но нужно осознать, что вычисления с гигантскими множителями, появляющимися в левой части равенств, не являются необходимыми. В частности, никакие действительные умножения многочлена, который делится, не имеют места. Важны лишь полученные в псевдоделениях остатки. В действительности, есть другое решение для сокращения полученных коэффициентов, которые не дают все-таки лучшие результаты, чем сокращения на НОД — без всякого вычисления НОД — но это изложение выходит за рамки, которые нами зафиксированы (см. , например, Кнут [99]). 9 Вместо заключения Начав эту главу с очень простого введения (вычисление НОД двух целых чисел), мы изучили более сложные арифметические понятия, касающиеся колец, отличных от кольца целых чисел, и использовали несколько алгоритмов и методов вычисления. Вот (без всякого доказательства) краткий обзор нескольких приложений, некоторые из которых будут развернуты в следующих главах.
11-9 Вместо заключения 239 Арифметика кольца ЩуД] тесно связана с применением критерия простоты Лукаса — Лемера. Этот критерий, касающийся чисел Мер- сенна, т,е. чисел вида 2я — 1, позволяет найти самые большие известные к настоящему времени простые числа. Например, в 1985 г. доказана простота числа 2216091 — 1 (числа, имеющего 65050 десятичных цифр). Доказательство успешно сочетало арифметику кольца Z[v5], изобретательность Лукаса и Лемера и, конечно, быстроту самых мощных компьютеров, таких как CRAY. Однако вычисления, составляющие критерий Лукаса — Лемера, значительно более простые, чем вычисления, применяемые ординарным методом, приводят к необходимости умножения больших чисел (например, 10000 десятичных цифр), делающих невозможным использование наивных умножений. Это удается сделать использованием результатов о преобразовании Фурье (Кули, Тьюки, Поллард), китайской теоремы об остатках (для которой вычисление коэффициентов Безу играет основную роль), которая позволяет программировать умножения, значительно уменьшающие время вычислений. В этом случае алгебраические структуры, вводимые в игру, есть вычеты Z/pZ, богатые корнями из единицы. Можно, впрочем, вместо факторов Ъ использовать факторы евклидова кольца Щг\: это объект современных исследований. Опишем другое поразительное применение арифметики кольца главных идеалов (не евклидова) Z[-^y—-], кольца целых чисел Q(y/—163). Индийский математик Рамануджан нашел, в частности, ряды, быстро сходящиеся к 1/я\ Вот один из них: 1. А ип (И! 13 591409+545 140 134 хп * V ("!)3(3п)! (640 3203)»+* который сходится при точности до 15 десятичных знаков на слагаемое (основное), но дает тысячи десятичных знаков 7г. В действительности, число 6403203 связано с арифметикой поля Q(y/—163) (механизм этой связи слишком сложен, чтобы быть воспроизведенным здесь). В некотором смысле Q(\/—163) есть то, «что можно сделать лучше»: 163 — самое большое натуральное число cf, такое, что кольцо целых чисел в Q(V^rf) является КГИ. Невероятное применение абстрактной арифметики к конкретным числовым вычислениям. Упомянем также теорию кодов, обнаруживающих (и исправляющих) ошибки, для которой конечные поля, неприводимые многочлены над этими полями, в особенности над Z/2Z, — основные инструменты. Закончим замечанием исторического плана. Уравнение Ферма (1665) было глубокой мотивацией для изучения арифметики в циклотомиче-
240 11-9 Вместо заключения ском кольце Z[>/l] (кольцо, порожденное корнями n-й степени из единицы в С) и это может рассматриваться как исходная точка в развитии теории чисел. Куммер, Ламе, Дирихле, затем Дедекинд, Кронеккер и многие другие математики XIX - XX веков изучали знаменитую «теорему» Ферма: (72) Великая «теорема» Ферма. Для п ^ 3 уравнение хп + уп = zn не имеет нетривиальных решении в целых числах (т.е. решений, отличных от таких, где одно из неизвестных х, у или z равно нулю). Эта проблема, не решенная до настоящего времени1, была (и остается еще) особым мотором в теории чисел. Большой прогресс и эффективность разработанных методов, связанная с использованием мощных компьютеров, позволяют проверить справедливость теоремы Ферма до п ^ 125000. Все сказанное, должно быть, убедило читателя, что изучение абстрактных понятий вовсе не расходится, а находится в согласии с изучением методов эффективных вычислений. Although it is not well known, Kummer at one time believed he had found a complete proof of Fermat's theorem... Seeking the best critic for his proof, Kummer sent his manuscript to Dirichlet... After a few days, Dirichlet replied with the opinion that the proof was excellent and certainly correct, provided the numbers in a could not only be decomposed into indecomposable factors, as Kummer proved, but that this could be done in only one way. If however, the second hypothesis couldn't be satisfied, most of the theorem for the arithmetic of numbers in a would be unproven and the proof of Kummer's theorem would fall apart. Unfortunately, it appeared to XB настоящее время проблема Ферма решена [195]. Последнюю точку в длинной и драматичной истории поставил английский математик Эндрю Уайлэ. Би Би Си посвятило этому событию телевизионную программу, показанную в США в конце 1997 г. На эту же тему имеется книга [194], излагающая историю открытия, из которой видно, что в подготовке приняли участие многие математики. Для интересующихся читателей можно также рекомендовать книгу [191] на русском языке, а также книгу [193], вопрос о переводе которой на русский язык обсуждался. — Прим. ред.
II-9 Вместо заключения 241 him that the numbers in a didn't actually possess this property in general1. Kurt Hensel, Commemoration of the first centennial of Kummer's birth (1910 [153]) *Хотя это и не очень хорошо известно, Куммер некоторое время был уверен, что нашел полное доказательство теоремы Ферма... Желая найти лучшего критика для своего доказательства, Куммер послал рукопись Дирихле... Вскоре Дирихле ответил, что, по его мнению, доказательство великолепно и без сомнения верно при условии, что числа в а могут быть не только разложены в произведение неразложимых сомножителей, как доказано Куммером, но что это может быть сделано единственным образом. Однако, если второе предположение не выполнено, то большая часть теоремы об арифметике чисел в а останется недоказанной и доказательство теоремы Куммера рухнет. К сожалению, ему кажется, что для чисел в а это свойство, вообще говоря, не выполнено. Курт Генэель, Празднование столетия со дня рождения Куммера (1910) [153] 16-1017
Упражнения 1. Десятичные цифры простых чисел Теорема об арифметической прогрессии Дирихле утверждает, что для каждой пары (а, 6) целых простых чисел существует бесконечно много простых чисел вида ап + 6. Использовать этот результат, чтобы доказать, что какова бы ни была последовательность В десятичных цифр, существует бесконечное множество простых чисел, десятичная запись которых включает В. Пример Выберем В = 1991, которое поместим в предпоследнюю позицию. Вот несколько простых чисел, содержащих 1991: 219917, 519917, 1319917, 1919917, 2319917, 2619917, 3219917, 3419917, 3519917, 4719917, ... 2. Вычисление НОД Пусть а и 6 — два целых взаимно простых целых числа. Доказать, что НОД(ат - 6т, ап - Ьп) = аноД("».п) - &ноД(™."). 3. Алгоритм Евклида и непрерывные дроби Обозначим через [а0, ai, аг,..., an_2, an_i, ап] непрерывную дробь 1 х = а0 + Д2 + 1 <*п-2Н — «П-1 + Так как [0, а\}..., ап] < 1 (исключая дробь [0,1] (п = 1, а\ = 1)), то ао можно найти по числу х: ао = [х\. Другой способ найти значения а, содержится в упражнении.
Упражнения 243 a. Доказать, что всякое рациональное число может быть записано в этой форме с а, > 0 для г ф 0. b. Доказать, что если [со,..., ст] = [cf0,..., dn] и если ст > 1, dn > 1, то п = m и с< = cft-. c. Всякая конечная непрерывная дробь, очевидно, представляет рациональное число. Доказать, что всякое рациональное число можно представить непрерывной дробью и притом двумя способами (значения, участвующие в разложении, положительны, кроме, возможно, первого). Каноническая форма представления в непрерывную дробь для рационального числа — самая короткая из этих форм (естественно, предполагается, что последнее частное отлично от 1). d. Вычислить рациональные числа, разлагающиеся в непрерывную дробь [ао, ai,..., ап] для п = 1,2,3,4. Вычислить разложения в непрерывную дробь чисел F4/F3, F5/F4, где F,- — числа Фибоначчи. 4. Многочлены континуанты Определим последовательность формальных полиномов для бесконечного числа переменных следующим образом: К-\ = 0, Ко = 1 и Кп(Хи...,Хп) = XnKn-i(Xi,..., Xn-i) + Kn-2{Xi,..., Хп-2)- Многочлены Кп{Х\)..., Хп) называются континуантами. По определению, континуанта индекса п — это многочлен от п переменных Х\, ..., Хп. a. Вычислить первые члены последовательности континуант. Каковы соотношения между континуантами и числами Фибоначчи? b. Доказать, что многочлен Кп есть сумма всех одночленов, начиная с произведения Х\... Хп, полученных вычеркиванием всевозможных мономов и непересекающихся пар соседних переменных в этом одночлене. c. Вывести из этого другое рекуррентное правило, определяющее последовательность Кп и следующее тождество между рациональными дробями: Кп{Х\).. .,Хп) _ у ^п-2(^3) • • -,Хп) Кп-\(Х2,. ..Хп) Kn-i{X2,.. .,Хп) Какое заключение можно отсюда сделать? 5. Континуанты (продолжение) а. Выразить функцию полиномов-континуант через произведения матриц 16*
244 II Евклид и основная теорема арифметики b. Доказать, что Кп{Х\,.. ,1Хп)Кп(Х21. :.,Xn+i)— —Kn+i{Xi,.. .,Xn+i)Kn-i{X2,...,Хп) = (-l)n. Что можно отсюда вывести, если Кп(а\,..., ап) и Кп-\(а21..., an) являются целыми? c. Рассматривая произведение матриц (Хп+2 1\ ( Kn+i(Xi,... ,Xn+i) Kn(X2)... ,Xn+i) Л ^ О 1Д tfn(*i>--->*n) tfn-xfXa, ;..,*„) У' доказать соотношение: -Кп(Х\,.. .,Xn)A!'n+i(X2,.. .,Xn+2) = (-l)n+ -Xn+2- 6. Разложение в непрерывную дробь Если х G М, то можно определить последовательности (яп) и (an) следующим образом: положим я0 = х, а0 = [xq\ и для п > О з*+1 ~ и a*+i = L^fc+iJ- Xk - а* (в этой последовательности все элементы а* положительны, кроме, при необходимости, первого). Эта последовательность конечна тогда и только тогда, когда х — рациональное число, и дает разложение х в непрерывную дробь (это понятие, очевидно, совпадает с определением упражнения 3, если х рационально). Если / = [ao, ai, а2,...] — непрерывная дробь (конечная или бесконечная), то n-членный отрезок этой дроби, представляющий рациональное число [ao,..., an], называют подходящей дробью для непрерывной дроби /, или приближением /. a. Выразить n-ую подходящую дробь для / через функцию многочленов континуант. b. В предыдущих обозначениях доказать, что х = [ao,..., an, £n+i]. Вывести отсюда, что последовательность подходящих дробей для вещественного числа х сходится к х. Начиная с этого момента будем отождествлять непрерывную дробь и ее значение.
Упражнения 245 c. Вывести из вопроса (Ь) упражнения 5 алгоритм вычисления п-й подходящей дроби для я, приводящий ее к неприводимому виду. Выразить алгоритм в явном виде, как последовательность, сходящуюся к непрерывной дроби. d. Вычислить разложение в непрерывную дробь числа золотого сечения ф. Вычислить последовательные подходящие дроби для этого разложения. 7. Аппроксимация вещественных чисел с помощью непрерывных дробей Пусть [ао) fli) а2) • • •] — разложение в непрерывную дробь иррационального числа х (в действительности все, что доказывается, остается верным и для рациональных чисел, но необходимо учитывать конечность разложения, что излишне усложняет доказательство). Мы не доказываем факт, что разложение в непрерывную дробь единственно. В дальнейшем, чтобы упростить обозначения, мы обозначим через рп и qn числитель и знаменатель n-й подходящей дроби (имеем рп = tfn+i(a0,...,an) и qn = Кп{аи ... ,an)). a. Используя соотношения между континуантами из упражнения 5, доказать, что последовательность qn строго возрастающая, и вычислить знаки выражений (pn+i/qn+i -pn/qn) и (pn+i/qn+1 -pn-i/gn-i). Вывести из этого, что последовательность упорядоченных четных пар строго возрастающая, а последовательность с нечетными номерами строго убывает и х заключен между этими последовательностями. Доказать, что подходящие дроби для непрерывной дроби иррационального числа дают наилучшие аппроксимации этого числа в следующем смысле: V<7, 0 < q<: qn, \ф ^ : \рп - хЯп\ < |р - zq\, (9) Я Яп откуда, конечно, следует, что \х — рп/Яп\ < \в — р/я\- Можно предполагать, что р и q взаимно просты в этом случае. b. Доказать с помощью равенства (11), фигурирующего в решении упражнения 6, следующее утверждение: 1 < ЯпЯп+2 * Рп X Яп 1 < ЯпЯп+1 Вывести, что \рп - xqn\ < |pn_i - zg„_i|, так что \х - pn/qn\ < < |s-pn_i/gn_i|.
246 II Евклид и основная теорема арифметики Для того чтобы доказать результат, можно предполагать (начиная с этого момента), что qn-\ < q ^qn. c. Пусть q = qn. Доказать утверждение (9), опираясь на формулу (12), фигурирующую в решении упражнения 6. d. Пусть qn-\ < q < qn. Используя матричное выражение (8) из упражнения 5, доказать, что если р линейно выражается через рп и Pn-i и q является линейной функцией qn и gn-i> то коэффициенты для выражения q те же, что и для выражения р. Вывести отсюда предложение (9). Замечание Есть и другие результаты по аппроксимации вещественных чисел с помощью непрерывных дробей. В частности, известно, что для двух последовательных подходящих дробей в разложении х хотя бы одна удовлетворяет соотношению \х — p/q\ < l/2g2. Известно также, что иррациональное число обладает бесконечным множеством аппроксимаций, удовлетворяющих соотношению \х—p/q\ < l/q2y/En y/E — наилучшая возможная константа. Кроме того, среди трех последовательных подходящих дробей для х по меньшей мере две удовлетворяют соотношению \х — p/q\ < 1/(/2л/5. Наконец, подходящие дроби для числа х — единственные хорошие аппроксимации х в том смысле, что если \х " Р/я\ < 1/2</2, то p/q — подходящая дробь для х. Детали можно найти также у Левека [119], Харди и Райта [80], Кнута [99] и [103]. Примеры Вот разложения в непрерывную дробь и подходящие дроби для некоторых известных чисел. e. у/2 = [1,2,2,2,2...] = 1,414 213...; первые подходящие дроби 3/2 = 1,5, 7/5 = 1,4, 17/12 м 1,4166..., 41/29 м 1,4137 и т.д. Как и следовало ожидать, таким способом не получим быстро сходящуюся последовательность к \/2, по крайней мере, по-началу. f. уД = [1,1,2,1,2,1,2...] = 1,732 050. Первые подходящие дроби 2, 5/3, 7/4 и т.д. Заметим, что для последних двух случаев разложение в непрерывную дробь оказалось периодическим. В действительности это общее свойство: разложение в непрерывную дробь квадратичной иррациональности периодично. g. тг = [3,7,15,1,292,1,1,1,2,1,3,1,14,2,1,1,2,...] = 3,141592653... Это разложение уже не периодическое, так как сформулированное выше свойство на самом деле — необходимое и достаточное условие. Если вычислить последовательные подходящие дроби, то найдем хорошо
Упражнения 247 известные аппроксимации: вторая подходящая дробь 22/7 « 3,142, четвертая — 355/113 м 3,141592 9. h. Наконец, е = [2,1,2,1,1,4,1,1,6,1,1,8,1,1,10,1,1,12,...] = = 2,718 281828459045... Это разложение, кажется обладает некоторой периодичностью, и действительно доказано, что разложение е есть [..., 2п, 1,1,2п + 2,1,1,...]. Однако никакой результат того же типа не доказан для 7г. 8. Факториал и простые числа a. Доказать, что если п > 4 не является простым, то (п — 1)! = 0 (mod n). b. Доказать, что для любого числа п существует п последовательных натуральных чисел, ни одно из которых не является простым. Указание: рассмотреть число (п + 1)! + 2. c. Доказать, что для любого натурального п в интервале ]п, п! + 1] существует простое число. d. Предыдущие задачи наводят на мысль рассмотреть последовательность (еп), определенную следующим образом: е\ = 2 и еп = ехег .. .en_i + 1. Все ли эти числа просты? Они взаимно просты? 9. Каноническое разложение п! Доказать следующую формулу, называемую разложением Лежандра: „!= Д p£S,l»/r'J. р простое (Несмотря на видимость противного и в сумме и в произведении, входящих в эту формулу, присутствует лишь конечное число членов.) 10. Уравнение Ферма для п = 2 и п = 4 Найдем все решения в целых числах х) у, z уравнения х2 + у2 = z2. a. Доказать, что хиуне могут быть оба нечетными. Почему можно предполагать, что х и у взаимно просты? b. Доказать, что в Z[i] элемент х + iy делится на 1 + i тогда и только тогда, когда х = у (mod 2). Вывести, используя факториальность
248 II Евклид и основная теорема арифметики кольца Z[f], что если х и у — решения уравнения Ферма, то существуют два целых взаимно простых числа и и v такие, что (я, у) или (у, х) = (и2 - v2, 2uv), z = и2 + v2, и обратно, каждая такая тройка дает решение уравнения. Дайте примеры, а затем найти форму решений исходного уравнения. c. Показать, как можно просто перейти в Z[i]. d. Пусть два целых числа х, у > 0. Показать, что х4 + у4 не является квадратом. В частности, уравнение х4 + у4 = z4 не имеет нетривиальных решений в целых числах. 11. Простое диофантово уравнение Диофантовы уравнения — это уравнения в целых числах. a. Найти решение уравнения х2 — Зу2 + 1 = 0 в Z[i]. Доказать, что оно не имеет целочисленных решений. b. Найти все нетривиальные решения уравнения х2 — 5у2 + z2 = 0. c. Обобщить: при каких условиях уравнение х2 —ру2 + z2 = 0 имеет решение в целых числах? 12. Кольцо Ъ[в]/(а + 06), в — квадратичная иррациональность, НОД(о,6) = 1 Пусть а и Ь — два целых взаимно простых числа. a. Доказать, что отображение (р : Z —> Ъ[1]/{а+i6), определяемое по правилу <р(т) = [т]а+,ь, сюръективно, выразив в явном виде элемент t, для которого (p(t) = [i]a+ib- b. Как связаны равенство Кекр = (а2 + Ь2)Ъ и сравнение t2 = — 1 (mod a2 + б2), а + tb = 0 (mod a2 + б2)? Справедливы ли они? Можно ли apriori найти элемент в Z/(a2 + б2), квадрат которого равен —1. Как? Сравнить с уже полученным выражением. c. Доказать, что <р индуцирует изоморфизм кольца Z/(a2 + б2) на Ъ[г\1(а-\- ib). Доказать, что если a + ib делит целое число m (в Z[i]), то а2 + Ь2 делит m (в Z). Найдя в явном виде обратный изоморфизм, представьте линейную форму \х : 71? —> Z, удовлетворяющую соотношению: a + ib | х + iy <=> a2 + b2 \ //(я, у). (10) Примените соотношение (10) к следующим примерам: a + ib = 1 + i, a + ib = 9 + 2i.
Упражнения 249 d. Для произвольных а, 6 (не обязательно взаимно простых) доказать, что Z[i]/(a+ ib) есть кольцо, состоящее из а2 + Ь2 элементов. e. Пусть в — квадратичное целое, т.е. элемент в Е C\Z, удовлетворяющий уравнению X2 — SX + Р = 0. Обобщить предыдущее на кольцо Щв]/(а+ вЬ). В частности, число элементов кольца — абсолютное значение нормы а + 0Ь. 13. НОД в Щг] и суммы двух квадратов a. Пусть р G N — простое число, для которого р = 1 (mod 4), xG2 такой, что х2 = — 1 (mod p) (способ нахождения такого х предложен в с). Доказать, что если и + iv = НОД(р, х + г), то р = и2 + v2. Зная корень квадратный х из -1 по модулю р, найти эффективный метод представления р в виде суммы двух квадратов. Записать в виде суммы двух квадратов следующие простые числа: 1301, 1000037 и 2 000 004 973, зная, что: 512 = -1 (mod 1301), 320 9002 = -1 (mod 1 000 037), 406540 0732 = -1 (mod 2 000 004 973). b. Обобщить результат пункта а, рассматривая целое число п, делитель х2 + у2, где х и у взаимно просты. Если и + iv = НОД(п, х + гу), то показать, что п = и2 + v2 (можно использовать результат упражнения 12: если а + гб с а Л 6 = 1 делит целое число m, to N(a + ib) = (а + ib)(a — ib) делит m). c. Пусть р = 1 (mod 4). Запишем р— 1 = 2*д, где q нечетно и к ^ 2. С у G [1,р— 1] ассоциируем последовательность (yi)o^i^* элементов из C/(ZP) следующим образом: уо = yq mod p, y,+i = у2 mod р = у2 ч mod p. Пусть Я С U (Яр) — подмножество тех у Е C/(ZP), что yi = y2q mod p ^ 1. Для у £ Н доказать, что один из у,- есть корень квадратный из —1. Сколько элементов в Я? Вывести отсюда вероятностный алгоритм вычисления корня квадратного из — 1 по модулю р. 14. Делимость сумм х2 + 2у2 а. Доказать, что кольцо Z[y/^\ (это подкольцо порождено 1 и >/—2 = г'\/2) евклидово с нормой N, определяемой через N(x + У\/~2) = х2 + 2у2 при х,у £ Z. Указание: порассуждайте в поле Q{y/—2)lf поле 1 Вообще, если А — кольцо, то A[xi,X2, • • •] обозначает над-кольцо А (расширение кольца А), порожденное xi,хг,...; то же обозначение применяется, если А — поле. Бели К — поле, то обозначение К(х\,Х2,» • •) определяет расширение К с помощью элементов (над-поле) поля xi, х^,... Здесь, так как Q[-y/—2] уже является полем (у/—2 алгебраический для Q), имеем совпадение Q(y/—2) и Q[y/— 2].
250 II Евклид и основная теорема арифметики частных Z[\/^2]. b. Доказать результат относительно сумм х2 + 2у2, где х,у £Ъ взаимно просты. c. Пусть р — простое целое число, отличное от 2. Показать, что р может быть записано в виде х2 + 2у2 тогда и только тогда, когда —2 есть квадрат по модулю р. Заметим, что последнее эквивалентно р = 1 или 3 (mod 8). 15. Делимость целых чисел вида х2 — 2у2 a. Проверить, что кольцо Щу/2] евклидово для абсолютного значения нормы \N\, определенной соотношением N{x + ууД) = х2 - 2у2, х, у G Z. b. Обоснуйте результат, касающийся сумм х2 — 2у2 и нечетных простых чисел р, выражающихся в этом виде. 16. Кольца Z[\/^3) и Z[>/l0] нефакториальны a. Доказать нефакториальность кольца Z[\/^3), предъявив элемент, разлагающийся двумя различными способами в произведение неприводимых. Указание: найти два целых простых числа, не являющиеся нормами (в данном кольце) и рассмотреть их произведение. b. Тот же вопрос для кольца 17. Целозамкнутые кольца a. Доказать, что рациональный корень унитарного многочлена с целыми коэффициентами есть целое число. Если этот многочлен не имеет целых корней, то он не имеет и рациональных. Вывести отсюда, что если а Е N не является корнем n-й степени в N, то у/а — иррациональное число. Пусть А — кольцо целых чисел, К — его поле частных. Говорят, что К целозамкнуто, если элемент из К) являющийся корнем унитарного многочлена с коэффициентами из А) есть элемент из А. Отсюда, кольцо Ъ целозамкнуто. Для каких колец указанное свойство (доказанное для Ж) может быть обобщено? b. Пусть d G Z не является квадратичным и удовлетворяет соотношению d = 1 (mod 4). Доказать, что кольцо Z[Vd\ не целозамкнуто
Упражнения 251 (и потому не факториально). Доказать также, что 2 — неприводимый элемент, но непростой. с. Найти в Z[2i] неприводимый элемент, не являющийся простым; элемент, разлагающийся двумя различными способами в произведение неприводимых, и многочлен, неприводимый над Z[2i], который не остается неприводимым над полем частных. 18. Целые элементы; целые квадратичности a. Пусть К — подполе поля С, имеющее размерность 2 над Q. Доказать существование и единственность такого d G Z, что К — поле, порожденное над Q элементами 1 и \[d\ К = Q{Vd) = Q®Qy/d. Проверить существование и единственность автоморфизма а поля Аг, оставляющего на месте Q, такого , что <r(Vd) = —y/d. Доказать, что автоморфизм <т инволютивный и множество его неподвижных точек совпадает с Q. b. Пусть два кольца А и В таковы, что А С В. Будем говорить, что элемент из В целый над А степени ^ п, если он является корнем унитарного многочлена степени ^ п с коэффициентами из А. Элементы из С, целые над Z, называются целыми алгебраическими. Квадратичные целые являются целыми алгебраическими степени ^ 2. Каковы целые алгебраические степени 1? При каких условиях рациональное число является целым алгебраическим? c. Пусть d не имеет нетривиальных множителей, являющихся пол- ными квадратами. Доказать, что —-— является целым квадратичным тогда и только тогда, когда d = I (mod 4). 19. Целые числа в Обозначим через d элемент из Z, не имеющий нетривиальных множителей, являющихся полными квадратами, и а — инволютивный автоморфизм Q(\/5), переводящий \fd в — \fd. a. Пусть z G К = Q(Vd). Показать, что z — целая квадратичность тогда и только тогда, когда z + <r(z) G Z и zcr(z) G Z. b. Доказать, что множество целых квадратичностей в К является подкольцом К. Указание: если z и z' — целые квадратичности, показать, что х = z<r{z') + z'<r(z) и у = zz' + <t(zz') — элементы из Ъ (рассмотреть х + у и ху).
252 II Евклид и основная теорема арифметики c. Используя свойства кольца ЩХ] из раздела 8, показать, что целые алгебраические числа из К = Q(yd) являются целыми квадратич- ностями. Множество таких элементов является кольцом целых алгебраических чисел из К. d. Доказать, что кольцо А целых поля Q(y/d) совпадает с: Z[Va], если d = 2 или 3 (mod 4), или 1 + л/31 Z если d = 1 (mod 4), соответственно, {и + vy/d | «,u G 2} и {(и + v\/d)/2 | u, v Е Z,u = v (mod 2)}. 20. Евклидовость квадратичных колец Норма N для квадратичного расширения Q(y/d) является мультипликативной функцией со значениями в Q и определяется следующим образом: N(z) = zcr(z) для z G Q{Vd). Она принимает целые значения на кольце А целых алгебраических чисел в Q(y/d) (см. предыдущее упражнение). a. Доказать, что А является евклидовым для нормы \N\ тогда и только тогда, когда для всякого z E Q(Vd) существует такое q E Л, что \N(z-q)\ < 1. b. Доказать, что А евклидово для нормы \N\, когда d имеет одно из следующих значений: —11, —7, —3, —2, —1, 2, 3, 5 и 13. Замечания 1. Для d < 0 (поля мнимых квадратичностей) нетривиальный результат утверждает, что соответствующее кольцо А является КГИ в точности для следующих значений d: d=-163, -67, -43, -19, -11, -7, -3, -2, -1. Наиболее легкая часть доказательства состоит в проверке того, что эти 9 колец — действительно КГИ и что для 4 простых чисел (4 первых) не евклидовы. Обратное намного труднее. Когда-то, впрочем, считали, что могло существовать десятое rf, такое, что —5,109 < d < —163, для которого кольцо целых чисел в Q(Vd) является КГИ. Но из этого ничего не получилось, как доказал Старк в 1967 [166]. Об остальных деталях можно проконсультироваться у Харди и Райта [80], Эстерле [138], Дьедонне [62] или Пуату [145].
Упражнения 253 2. Для d > О (вещественное квадратичное расширение) ситуация более сложная. Существуют, как в мнимом случае, значения d) для которых соответствующее кольцо есть КГИ, и другие значения, для которых оно таковым не является. Таблицы, предоставляющие этот вид информации (для rf, относящегося или нет к определенному типу), существуют в литературе, например, [28]. Там также утверждается, что самое маленькое d > 0, для которого соответствующее кольцо не является КГИ, есть rf = 10. В настоящий момент неизвестно, существует ли бесконечное множество таких положительных rf, что кольцо целых чисел в Q[v^] является КГИ. Бвклидовость квадратичных вещественных колец ставит также другие открытые проблемы. Известно, например, что кольца, являющиеся евклидовыми для абсолютной нормы \N\, исчерпываются кольцами, соответствующими шестнадцати значениям d (сравнить [80] или [159]): rf=2, 3, 5, 6, 7, 11, 13, 17, 19, 21, 29, 33, 37, 41, 57, 73. В статье Уайнбергера [175] доказано, что из ослабленной гипотезы Римана следует, что всякое вещественное квадратичное кольцо евклидово, коль скоро оно есть КГИ. Однако неизвестно, можно ли в явном виде указать вещественное евклидово квадратичное кольцо, не фигурирующее в данном месте. Например, квадратичное кольцо, соответствующее d = 14, является КГИ и, согласно сделанному выше примечанию, возможно, евклидово. Однако этот тезис на настоящий момент мы не можем ни доказать, ни опровергнуть. В самом деле, результат Уайнбергера утверждает, что при условии справедливости ослабленной гипотезы Римана, всякое кольцо целых чисел (неважно какого поля), за исключением 4 мнимых квадратичных колец, соответствующих d = —163, —67, —43, —19, является евклидовым, как только оно является КГИ. В связи с этим некоторые математики ввели понятия квазиевклидовых колец (см. статью Кука [54] или диссертацию Буажо [31]). Эти авторы выражают в явном виде квазиевклидовы деления в некоторых вещественных квадратичных кольцах, достаточные для вычисления НО Д. Вот некоторые значения rf, для которых соответствующее кольцо является квазиевклидовым (значения rf, для которых соответствующее кольцо является евклидовым по отношению к абсолютному значению нормы, были исключены); d= 14,22,23,31,38,43,46,47,53,61,69, 77,89,93,97,113,129,133,137,181,253.
254 II Евклид и основная теорема арифметики Для этих значений cf, кажется, ничего не известно о евклидовости соответствующих колец. Кроме того, Васерштейн в [171] доказал, что вещественное квадратичное кольцо будет квазиевклидовым, если оно есть КГИ. Следовательно, ситуация вполне предсказуема и мотивирует введение класса квазиевклидовых колец. В самом деле, последний результат наиболее общий. Он утверждает, что всякое КГИ целых чисел неважно какого числового поля, исключая 4 упомянутых выше квадратичных кольца (с d = —163, —67, —43, —19), является квазиевклидовым. 21. Нахождение колец мнимых квадратичностей Пусть А — кольцо целых чисел мнимого квадратичного расширения Q(Vd) поля рациональных чисел, где d < 0 — целое число и |rf| не имеет нетривиальных квадратных множителей. a. Определить группу единиц кольца А. b. Пусть В — евклидово кольцо, не являющееся полем, и <р : В —> N — евклидов алгоритм. Предположим, что все единицы в В исчерпываются ±1. Рассматривая ^-минимальный элемент, доказать наличие Ь Е В такого, что В/(b) поле Ъч или Ъ^. c. Используя упражнение 20 и то, что число элементов кольца A/(z) есть норма в Ъ (см. упражнение 12), доказать, что А — евклидово тогда и только тогда, когда d E {—11, —7, —3, —2, —1}. 22. Вычисление НОД с помощью двоичных операций На машине, располагающей только следующими арифметическими операциями над целыми числами — сложение, вычитание, деление и умножение на степень двойки, а также критерием четности, необходимо написать алгоритм вычисления НОД двух целых чисел. Если а = 2аа' и Ь = 2^6', то какое соотношение связывает НОД (а, 6) и НОД(а',6/)? Отсюда просто вывести алгоритм вычисления НОД на рассматриваемой машине. Примените этот алгоритм к 1610 и 1000. Какой вывод можно сделать с точки зрения эффективности? Можно объединить этот алгоритм с алгоритмом Евклида, используя деление четного остатка: а = bq + г с \г\ < |6| и четным г. Записать и поэкспериментируйте с программой вычисления НОД, основанной на этом делении.
Упражнения 255 23. Другое соотношение для последовательности Фибоначчи Пусть Fn обозначает n-ое число Фибоначчи. Доказать, что Fn+m = FmFn+i+Fm-iFn (доказано в упражнении 13 главы I). Вывести отсюда, что НОД(^п,^т) = ^нод(п,т) (результат, принадлежащий Лукасу). 24. Вычисление НОД n-ки целых чисел Начиная с соотношения, полученного в начале раздела 6.3: НОД(0,0...0,а,0...0,0) = а и, если щ ф 0, то НОД(иь ... ,un) = НОД(и1, U2 mod mi, ..., ип mod щ) и, используя операцию Rotate-Left, определенную соотношением Rotate-Left ((и\, и?,..., ип)) = («2,..., un,ui), можно написать алгоритм вычисления НОД n-ок целых чисел глобальным образом: I loop Number. Of .Zeroes i— 0; for t in 1 .. n loop Rotate-Left (u); exit when u\ ф 0 Number-Of .Zeroes i— Number-Of -Zeroes + 1; end loop; exit when Number-Of -Zeroes ^ n — 1; for t in 2 .. n loop Ui i— Ui mod tii; end loop; end loop; a. Доказать, что если число нулей в массиве и меньше или равно п — 2, то в каждой итерации, кроме, быть может, первой, одна из компонент и строго уменьшается. Вывести отсюда, что этот алгоритм эффективным образом вычисляет НОД чисел щ. b. Перетасовка массива — не очень эффективная операция в программе. Построить алгоритм вычисления НОД и целых чисел, аналогичный предыдущему, но использующий подвижный указатель в массиве вместо его сдвига. c. Можно легко построить еще более эффективный алгоритм, используя два указателя в массиве вместо одного, и рассмотреть только часть массива, содержащегося между этими двумя индексами. 25. Странный алгоритм Евклида Доказать, что отображение <р : Ъ —> N, определенное через <р(п) = |п| при п ф 5 и у?(5) = 100, является алгоритмом Евклида на Z.
256 II Евклид и основная теорема арифметики 26. Возрастающие алгоритмы Евклида Пусть <р — алгоритм Евклида на кольце А. Определим ф следующим образом: £(0) = <р(0) и, если а ф 0, то ф(а) = min{<p(b) \ Ь Е Аа \ {0}}. a. Доказать, что ф — алгоритм Евклида, мажорируемый (р. b. Доказать, что для ненулевых а и Ь ф удовлетворяет соотношению: а\Ь=>ф{а)^ф{Ь). c. При тех же предположениях доказать, что если а \ Ь и ф(а) = ф{Ь)) то Аа = АЬ. 27. Самый малый алгоритм Евклида на 7L Доказать, что отображение у?, ставящее каждому целому числу Ь Е Ъ в соответствие количество двоичных цифр в двоичной записи |6|, является алгоритмом Евклида на Ъ и что этот алгоритм самый малый алгоритм Евклида на Ъ (эта ограниченность, удобства ради, рассматривается на алгоритмах со значениями в N). 28. Реализация кольца целых чисел Гаусса a. Записать алгоритм деления Евклида в кольце Z[i]. b. Написать стандартный пакет Ада-программ, реализующий кольцо Z[i] (включая его евклидову структуру). 29. Реализация алгоритма Безу a. Написать на языке Ада программу, реализующую вычисление коэффициентов Безу в кольце целых чисел. Предусмотрите процедуру, позволяющую проследить эволюцию вычислений. b. Написать стандартный общий пакет на языке Ада в квазиевклидовом кольце. Должна быть предусмотрена процедура, отслеживающая значения промежуточных параметров. c. Рассмотреть этот пакет для случая, когда текущим значением кольца является кольцо целых чисел Гаусса. 30. Конечные поля, порядок которых есть квадрат простого числа Пусть р — простое число, р = 3 (mod 4). Доказать, что фактор- кольцо Z[i]/(p) — конечное поле из р2 элементов. Проверить, что это поле может быть получено из поля Ъ/рЪ присоединением корня квадратного из —1, аналогично построению поля С комплексных чисел, исходя из поля М вещественных чисел.
Упражнения 257 31. Несколько конечных полей порядка, являющегося степенью двойки Выпишите в явном виде поля порядков 2, 4, 8, 16, 32, 64 и 128. 32. Получение всех коэффициентов Безу Пусть а, 6 — ненулевые целые числа, d — их НОД, uq) vq — коэффициенты Безу: сш0 + bv0 = d. Доказать, что остальные коэффициенты Безу (u, v) имеют вид: 6 а и = и0- k-f v = v0 + к-, к£Ъ. а а 33. Единственность ограниченных коэффициентов Безу Пусть аиЬ — два ненулевых целых числа, d — их НОД. Пусть (u, v), (и', t/) — коэффициенты Безу: d = ua + vb = u'a + v'b. Пусть к тому же элементы и и v удовлетворяют неравенствам: \u\ ^ \b/2d\ и \v\ ^ \a/2d\. a. Предполагая, что (u',v') — пара, отличная от (u,v), доказать, что среди неравенств хотя бы одно строгое. b. Вывести отсюда, что (ufv) — единственная и минимальная, в некотором (точном) смысле, пара. 34. Мажорирования коэффициентов Безу в К[Х] Пусть А(Х) и В(Х) — взаимно простые одночлены над полем К. Доказать, что обобщенный алгоритм Евклида находит коэффициенты Безу, удовлетворяющие соотношениям: deg(U) < deg(B) и deg(V)<deg(A). 35. Дерево Штерна — Броко Цель этого упражнения заключается в изучении метода построения несократимых дробей, приводящего к перечислению рационального интервала [0,1]. Отправляясь от двух рациональных чисел 0 и 1, записанных в несократимом виде как у и у, и повторяя операцию, описываемую далее, получаем все числа отрезка [0,1]. Пусть | и К — две 17 1017
258 II Евклид и основная теорема арифметики последовательные дроби, полученные этим приемом. Тогда следующая дробь 1^7 определяет число между ними. Вот что дают первые шаги этого процесса. Исходя из [у, у], получаем медианную дробь |, что дает [у, |, у]. Вводим затем две медианные дроби [у, |, |, |, у] и т.д. Этот процесс может быть представлен естественным образом в виде бинарного дерева, называемого деревом Штерна — Броко, что видно на рис. 1. Рис. 1. Дерево Штерна — Броко В этом дереве каждый элемент, исключая первые два, получается как медиана его двух самых близких возрастающих: самый первый среди расположенных слева (самый большой минорант среди возрастающих) и самый левый среди расположенных справа (самый малый мажорант среди возрастающих). Обозначения: Во всем упражнении а, о!, а" обозначают три положи- тельных рациональных числа, представимых в виде £, Ъ и %— в несократимой форме, соответственно.
Упражнения 259 a. Если две дроби а и а', удовлетворяют соотношению p'q — pq' = 1, то доказать, что их медианное число получается в несократимом виде. Вывести отсюда, что в конструкции Штерна — Броко все полученные дроби будут несократимы и что этот процесс приводит к упорядоченной последовательности дробей. Доказать, что к тому же каждое рациональное число из интервала [0,1] достигается некоторой вершиной дерева. Указание: Доказать, что если £ находится строго между двумя последовательными дробями построения ^и^тос^д + д'. b. Ряд Фарея порядка N — это последовательность Tn рациональных чисел из интервала [0,1], представимых в виде несократимых дробей, знаменатели которых не превосходят N. Вывести из предыдущей задачи алгоритм, который представляет Т^ для возрастающих значений N (вычисление Tn основывается на Tn-\)- c. Если а и а' — два последовательных члена Tn) to доказать, что g + g'>7V. Использовать свойство, доказанное в пункте а, что если а, а', а" — три последовательных члена ряда Фарея (или дерева Штерна — Броко), то р' ^Р + р" q' " g + g'" r>»Q-r>Q»=\(n + N)/Q>\ и fJ^Kl + NVJW-P, РЧ РЯ -LW + iVj/gj и \ g-= L(g + ^)/д']д'- g. Это последнее свойство позволяет дать алгоритм, который из ничего порождает все элементы Т^. d. Пусть р и g — два взаимно простых целых числа, причем р < д. Показать, что получение дроби £ в процессе Штерна — Броко дает не менее двух пар коэффициентов Безу для р и g и что одна из этих пар — самая малая пара коэффициентов Безу для р и д. 36. Вычисление коэффициентов Безу n-ки целых чисел Предполагая, что известна функция Безу для двух целых аргументов, дающая пару коэффициентов Безу в качестве передаваемых параметров, написать и реализуйте алгоритм вычисления коэффициентов Безу n-ки целых чисел. 37. Экспериментальная проверка теоремы Дирихле Написать программу, иллюстрирующую теорему Дирихле: «вероятность взаимной простоты двух целых чисел равна б/Л. 17*
260 II Евклид и основная теорема арифметики 38. Произведение рядов и арифметическое произведение Проверить равенство для двух рядов ЕЛ") х y>g(") _ у (f*9){n) п>\ п>\ п>\ гДе / * 9 — арифметическое произведение / и д. Что можно отсюда вывести, если / и д взаимно обратные функции (в арифметическом смысле)? 39. Сложность центрированного деления Изучим в этом упражнении сложность алгоритма Евклида, порожденного центрированным делением, т.е. делением а = bq + г, где \r\ ^ \Ь\/2. Для этого введем последовательность (Gn)neN, определяемую через Go = 0, G\ = 1, Gn+2 = 2Gn+i + Gn. a. Вычислить первые члены этой последовательности. Проверить, что Gn ^ Gn+i/2. Полагая при п ^ 1 а = Gn + Gn-i, 6 = Gn, доказать, что 0 < Ь < а и что число делений алгоритма Евклида, вычисляющего НОД(а,6), равно п. b. Пусть а и 6 — два целых числа, для которых 0 < Ь < а. Предположим, что алгоритм Евклида, применяемый к (а, 6), требует п делений. Доказать, что Gn ^ b и Gn + Gn-i ^ а. Вывести отсюда, что гг < log1+^2(6 -h 1)2ч/2. Указание : если Го, г\, ..., гп и rn+i = 0 обозначает последовательность остатков, то показать, что |r,-_i| ^ 2|г,| + |n+i| ПРИ г = 2,3,.. .п. Кроме того, можно доказать, что (1 + ч/2)"-(1-У2)" Gn = 2\/2 с. Пусть р — число десятичных цифр в записи 6. Доказать, что п ^ ар + /?, где а и /? следующие: а = 1/log10(l + у/2) « 2,612496 и /? = log10(2>/5)/log1o(l + \/2) к 1,17965. Вывести отсюда, что число центрированных делений, необходимых для вычисления НОД двух положительных целых чисел, не превосходит утроенного числа цифр наименьшего из этих чисел. 40. Порождения простых чисел с помощью многочленов а. Доказать, что не существует непостоянного многочлена с целыми коэффициентами, который принимает только простые значения. Указание: вычислить Р(п + Р{п)).
Упражнения 261 Согласно постулату Бертрана, для любого целого п > 1 в интервале ]п, 2п[ существует простое число. b. Доказать, что если pi означает г-ое простое число, то Рп+1 ^ Pi + • • • + Рп ДЛЯ П > 1. c. Использовать постулат Бертрана для доказательства существования такого вещественного числа К, что n-ое простое число есть целая часть от 10п*К mod 10n. 41. Соотношение Без у для многочленов Пусть Р и Q — два постоянных многочлена с коэффициентами в факториал ьном кольце А с полем частных К. Доказать, что Р и Q взаимно просты (в if [X]) тогда и только тогда, когда найдутся такие два многочлена U и V с коэффициентами в А, что degf/ < degQ, deg V < deg P, и элемент а 6 А, отличный от нуля, что UP + VQ = а. 42. Сложность алгоритма Евклида в К[Х] Рассмотрим сложность алгоритма Евклида в # [X], где К — нётеро- во поле. Алгоритм, в котором используется обычное деление: А = BQ + R с deg(ii) < deg(B). Обозначим через <р отображение К[Х] х К[Х] в N, которое паре многочленов (А, В) ставит в соответствие число делений, необходимых для получения НОД(Л, В). a. Доказать, что (р(А, В) ^ 1 + deg(B). b. Доказать, что эта оценка наилучшая возможная: можно указать последовательность (Fn(X))n^o для которой: deg(Fn) = п и <p{Fn, F„_i) = n (= 1 + deg(F„/i)). 43. Оптимальность алгоритма для К[Х] (теорема Лазара) Цель этого упражнения доказать, что среди всех алгоритмов «а 1а Евклид» вычисления НОД в К[Х] наилучшим является алгоритм, использующий обычное евклидово деление многочленов. Обозначим через /i : К[Х] х К[Х] -> N минимальный квазиалгоритм (см. раздел 6.2) в К[Х] и через (р сложность алгоритма с использованием обычного деления. Докажем равенство \i = (р. а. Для А, А\ В из К[Х] и константы &, отличной от 0, проверить следующие соотношения для \i и (р: 1а(А,В)=0 <=> Д = 0, pi{kA,B)=pi(A,kB)=pi(A,B), /i(A, В) = р(А\ В) если А = А' (mod В).
262 II Евклид и основная теорема арифметики Ь. Пусть А, В в #[Х]. Доказать, используя индукцию по значениям /i, что fi(A,B) = (р(А,В). Указание: введите остатки R и R' от обычного и оптимального деления А на В. Затем рассмотреть 3 случая: deg(ii) < deg(£), deg(ii) > deg(£), deg(ii) = deg(£). 44. К теореме Лазара Рассмотрим последовательность Со = О, С\ = 1 и Сг* = 3C2t-i + Cii-ъ C*2t+i = 2Сг< — C2i-i. Доказать, что алгоритм, использующий центрированное деление, примененный к (Cn+i,Cn), требует п делений. Доказать также, что используя «одно на двоих» не центрированное деление, приходим к алгоритму той же сложности (т.е. необходимо п делений, хотя используется [11^\ нецентрированных делений). 45. (Неэффективное) решето Эратосфена для многочленов a. Дан список целых чисел от 2 до п. Решето Эратосфена позволяет, вычеркивая кратные числа, оставить в нем лишь те, которые являются простыми. Написать алгоритм, реализующий это решето. b. Пусть р — целое простое число. Найти в явном виде биективное отображение множества натуральных чисел N во множество унитарных непостоянных многочленов над ZjpTL. Если п ^ 1, то каким является множество Вп унитарных непостоянных многочленов степени ^ п по модулю р? c. С помощью предыдущего кодирования записать алгоритм «решета Эратосфена», который дает список унитарных неприводимых многочленов по модулю р степени ^ п. Этот алгоритм является неэффективным по многим причинам. Каким? d. Написать программу на языке Ада, позволяющую найти перечень неприводимых многочленов по модулю 2 степени ^ п для достаточно малого числа п (например, п ^ 10). 46. Многочлены Хп — 1 Пусть тип — целые неотрицательные числа, d — их НОД. a. Показать, что Z[X](Xd - 1) = Z[X]{Xn - 1) + Z[X]{Xm - 1). Вывести отсюда, что в любом кольце А имеем A(ad — 1) = А(ап — 1) + А(ат - 1) для а € А и что НОД(ап - 1, ат - 1) = ad - 1. В частности, НОД(Хп - 1,Хт - 1) = Xd - 1. b. Если f(X) и g(X) — два унитарных многочлена с целыми коэффициентами, ъ, h(X) — их НОД, а — целое число, то верно ли, что Л(а) = НОД(/(о),0(о))?
Упражнения 263 с. Если m > 0, то каков остаток от деления Хп — 1 на Хт — 1? 47. Неприводимые многочлены над Ъ Показать, что многочлены неприводимы bZ[X]. 48. Оценка числа неприводимых множителей Возьмем А — кольцо без делителей нуля. a. Пусть А — факториальное кольцо. Доказать, что если найдется неприводимый элемент р такой, что показатель а в р, vp(a) равен 1, то полином Хп — а неприводим (vp (а) есть показатель р в разложении а в произведение неприводимых). b. Пусть / — простой идеал в кольце А (не обязательно фактори- альном) и пусть Р = апХп-\ \-ао такой, что ап £ I и для i ф п: а, £ I. Показать, что всякий непостоянный делитель Р имеет свободный член, содержащийся в /. c. Пусть А — факториально. Доказать, что всякий многочлен, для которого найдется неприводимый элемент р такой, что р \ ап и р \ а< для всех а< имеет не более vp(ao) неприводимых сомножителей. 49. Неприводимый многочлен, приводимый по модулю всякого простого числа a. Проверить, что многочлен ХА + 1 приводим по модулю 2. b. Пусть р — простое число, отличное от 2. Доказать, что число квадратов в группе обратимых элементов ЩХ/рЖ) равно числу неквадратов. Вывести отсюда, что произведение двух не-квадратов есть квадрат. c. Записав ХА + \ в одной из трех форм: X4 — (—1), (Х2 +1)—2Х2 или (X2 — I)2 — (—2Х2), доказать, что многочлен ХА +1 приводим по модулю р. Дайте примеры для разных значений р. Что можно утверждать, если р = 1 (mod 4)? d. Многочлен X4 + 1 неприводим по модулю 25? А по модулю 15? 50. Нули многочленов с целыми коэффициентами а. Пусть Р = J2aiX% — унитарный многочлен с целыми коэффициентами. Доказать непосредственно, что всякий рациональный корень Р является в действительности целым и что он делит ао.
264 II Евклид и основная теорема арифметики Ь. Пусть Р = J2i<n а»^* — многочлен, свободный член которого отличен от нуля. Существует ли рациональный корень p/q этого многочлена, где p/q — несократимая дробь, такой, что р \ ао и q \ ап. 51. Расширенный критерий Эйзенштейна a. Пусть Р = J2i<n а»^* — многочлен с коэффициентами в факториал ьном кольце. Пусть р — неприводимый элемент вЛи^п такое, что р2 \ ао, р \ dk и р | ai для всех г < к. Доказать, что по меньшей мере один из неприводимых делителей Р имеет степень, не меньшую к. b. Доказать, что многочлен Р = X4 + ЗХ3 + ЪХ2 — 5 неприводим. При каких значениях а многочлен Q = ЪХА — &Х3 — аХ2 — АХ + 2 неприводим? Дайте возможные разложения. 52. Неприводимость циклотомических многочленов Определим циклотомический многочлен уровня п как Фп{Х) = П(^~£)> гДе произведение распространено на все первообразные корни п-й степени из единицы в С. В главе V будет доказано, что коэффициенты этих многочленов — целые числа. В упражнении этот факт будет использоваться как известный результат. a. Пусть а Е С корень n-й степени из 1 и Р — неприводимый делитель Хп — 1, для которого а является корнем. Доказать, что если р — простое число, не делящее п, то Р{ар) = 0. Указание: предположите, что Хп — 1 = PQ, и показать, что Р \ Q(XP). Перейдите затем в Z/pZ[X]. b. Вывести отсюда, что Фп неприводим. 53. Идеалы в К[[Х]] Определить все идеалы в К"[[Я]], кольце формальных рядов с коэффициентами в поле К. 54. О факториальных кольцах а. Пусть V — система представителей неприводимых элементов факториального кольца А (каждый неприводимый элемент из А ассоциирован с одним и только одним неприводимым в V). Обозначим через f$(v) с N^ множество семейств целых чисел (t;p)p67>, таких, что vp = 0 для всех, за исключением конечного числа элементов в р. Изучите свойства отображения: <р : U{А) х N<"> -+А- {О}, р(с, (vp)p€V) = е Ц р">.
Упражнения 265 Вывести отсюда, что в факториальном кольце любые два элемента имеют НОД и что множество главных идеалов нётерово по включению. b. В факториальном кольце выполняются следующие свойства: сНОД(а,6) = НОД(са,с6), сНОК(а,6) = НОК(са,с6) [а | 6с и НОД(а, 6) = 1] => а | с, [а | с и 6 | с и НОД(а, 6) = 1] => ab | с. Как доказать? Можно ли дать другое доказательство в случае, когда кольцо является КГИ? c. Пусть А — кольцо без делителей нуля. Доказать, что А фак- ториально тогда и только тогда, когда некоторые два элемента имеют НОД и множество главных идеалов А является нётеровым. Кроме того, всякий неприводимый элемент является простым и множество главных идеалов нётерово. 55. Условия, при которых факториальное кольцо является кольцом главных идеалов В пунктах аиЬЛ означает факториальное кольцо. a. Пусть всякий неприводимый элемент А порождает максимальный идеал. Доказать, что А есть КГИ. Указание: доказать, что любой простой идеал главный, потом доказать, что Ах + Ay = Ad, если </ = НОД(*,у). b. Допустим, что А удовлетворяет соотношению Безу (т. е. если х и у взаимно просты, то 1 Е Ах + Ау). Доказать, что А есть КГИ. c. Доказать, что конечное кольцо без делителей нуля есть поле. Лучше: если R — алгебра без делителей нуля, конечной размерности над полем К, то R — тело (R не предполагается коммутативной). Еще лучше: если R алгебра без делителей нуля, алгебраическая над полем К, то R — тело. d. Пусть А — подкольцо в С, целое для Z (например, кольцо целых числового поля). Доказать, что всякий собственный простой идеал А, отличный от нуля, максимален. Указание: Если / такой идеал, то доказать, что /OZ имеет вид pZ, где р — простое число. Затем рассмотреть Z/pZ-алгебру А/1. Вывести отсюда, что если А факториально, то А - КГИ. 56. Произведение упорядоченных нётеровых множеств Пусть {Ei)iEi — семейство упорядоченных множеств. Наделим Yliel ^* структурой упорядоченного произведения, положив х ^ у тогда и только тогда, когда х,- ^ у* для всякого i E /. В частности, если
266 II Евклид и основная теорема арифметики Е{ = Е для любого г, то Yliei ^» = ^ есть пространство функций из / в Е, наделенное обычным порядком. a. Доказать, что конечное произведение множеств нётерово тогда и только тогда, когда каждый из множителей нётеров. b. Рассмотрим подмножество S С Е®, состоящее из стабилизирующихся последовательностей. Доказать, что в общем случае из нётеро- вости Е не следует нётеровость 5 (а тем более и EN). c. Доказать, что подмножество EN, состоящее из возрастающих последовательностей, является нётеровым, если таковым является Е. d. Установите связь между этими результатами и результатами о модулях (нётеровость произведения или частного двух модулей над кольцом многочленов). 57. Конечные (коммутативные) поля В этом упражнении предполагается доказать несколько вполне классических результатов, касающихся конечных полей. В частности, что для любой степени q простого числа существует одно и только одно (с точностью до изоморфизма) конечное поле из q элементов. Для получения более подробных сведений читатель может обратиться к [111] или [120]. В частности, в [120] можно найти доказательство принадлежащего Веддербарну результата о том, что всякое конечное тело коммутативно. Тела, рассматриваемые в этом упражнении, заведомо коммутативны за исключением пункта (а). Если А — унитарное кольцо, не обязательно коммутативное, то Z Э т -+ ml € А есть морфизм. Его ядро, следовательно, есть идеал в Ъ вида m7L для единственного т ^ 0. Упомянутое целое число т есть, следовательно, наименьшее целое число (в смысле отношения порядка, но также и в смысле делимости) такое, что т • 1 = 0 или по другому т • х = 0 для всякого х 6 А (такое т называется характеристикой кольца А). a. Доказать, что характеристика кольца без делителей нуля есть или 0, или простое число р. В случае поля К доказать, что отображение тнт-1 задает морфизм (инъективный) поля Q —> К или TL/рЪ—> К. Конечное поле имеет характеристику р > 0. Если К С К' два конечных поля, то доказать, что \К'\ есть степень \К\ (в частности, если К — конечное поле характеристики р, то |АГ| — степень р). b. Пусть q — степень простого числа риЙ — поле характеристики р. Доказать, что если П — поле, состоящее из q элементов, то все
Упражнения 267 корни многочлена Xя — X содержатся в П. Доказать обратное, рассматривая автоморфизм Фробениуса х -> хя и показывая, что множество его неподвижных точек ¥я = {х Е П | хя = х} является единственным подполем поля П, состоящим из q элементов. Как доказать (неэффективным образом) существование таких полей П? Замечание. На этом уровне удобно (но не обязательно) рассматривать алгебраически замкнутое поле характеристики р. Напомним, что алгебраически замкнутым называется поле, в котором всякий непостоянный многочлен имеет корень и, следовательно, разлагается в произведение линейных множителей (можно доказать, что всякое поле содержится в алгебраически замкнутом поле, см. например, [111]). В этом смысле все поля F, "живут" в алгебраически замкнутом поле П. c. Пусть К С К' — два конечных поля. \К\ = q, \K'\ = qn. Поинтересуемся промежуточными полями Я, т.е. такими, что К С Я С К'. Если d — делитель п, то доказать, что {х Е К' \ хя = х} промежуточное поле с qd элементами и установите биекцию между делителями п и промежуточными полями. Эта биекция обладает "хорошим" алгебраическим свойством: каким? Если т — какой-либо делитель п, то {х Е К' | х4"1 = х} — промежуточное поле. Какое у него число элементов? Если К\ и 1<2 — два промежуточных поля порядков qdl и qd2 соответственно, то доказать, что \К\ Г\ I<2\ = qd, где d = НОД(с/1, с/г). d. Пусть р — простое число, q = рп — степень р. Тогда, как известно, существует унитарный неприводимый многочлен Р степени п. Это позволяет построить конкретное поле К из q элементов, взяв К = ZP[X]/(P). Пусть К' — другое "абстрактное" поле из q элементов. Всякий многочлен с коэффициентами в Ър может рассматриваться как многочлен с коэффициентами в К'. Доказать, что Р имеет корень у в К', так как взятие значения в точке у для полиномов из ZP[X] задает гомоморфизм у: ZP[X] -> К', индуцирующий изоморфизм К на К'. Отсюда следует, что любые два конечных поля одинакового порядка изоморфны. e. Пусть К — конечное поле из q элементов и К' — расширение К степени п. Доказать, что отображение г : i 4 i9 есть автоморфизм К' порядка п, множество неподвижных точек которого совпадает с К. Доказать, что всякий автоморфизм <г поля К\ оставляющий на месте К, есть степень г.
268 II Евклид и основная теорема арифметики 58. Уравнение хр = х в локальном кольце характеристики р Пусть А унитарное коммутативное кольцо характеристики р, т.е. кольцо, в котором р -1 = 0, и / — идеал в А. Пример для размышлений — А = К[Т], где К — поле характеристики р и I — идеал, порожденный неприводимым многочленом. Доказать, что если q — степень р, то пространство Sn решений уравнения Xя = X в А/1п изоморфно (с помощью применения канонического отображения 7г : А/1п —> А/1) пространству S\ решений того же уравнения в А/1. Этот результат будет применен в главе IV, чтобы определить число неприводимых множителей для степени многочлена с коэффициентом в конечном поле. a. Без всяких предположений относительно А доказать, что если х G А обратим по модулю / и по модулю J (I и J — любые идеалы), то х обратим по модулю IJ и, в частности, по модулю 1п для любого целого п. b. Предположим теперь, что / — максимальный идеал, но не будем налагать ограничений на характеристику кольца А (так что q может быть любым). Доказать, что уравнение хя = х (mod In) эквивалентно х = О (mod In) или xq-x = 1 (mod /n). c. Обратимся теперь к предложению, сформулированному во введении. Проверить, что Sn и Si — две подалгебры и что 7г(5п) С Si. Вывести отсюда и из пункта (Ь), что ограничение 7г на Sn инъектив- но. d. Пусть а — элемент в /. Рассматривая потенциально бесконечную сумму а + ая + ая Н h aqt H , доказать существование такого s E /, что s — sq = a (mod /n). Вывести отсюда, что 7г(5п) = S\. e. Можно обобщить ситуацию, забыв про идеал /п, и использовать только кольцо В = А/1п. Доказать, что это кольцо содержит единственный максимальный идеал .М, такой, что В/М С^ А/1. Утверждается, что это В есть локальное кольцо вычетов В/М. Как сформулировать результаты пунктов (Ь), (с) в зависимости от В и В/Ml Чтобы получить конечный результат, надо наложить ограничения на идеал М. Какое? 59. Эффективное кольцо главных идеалов, не являющееся евклидовым Кольцо целых чисел в Q[\/—19] есть кольцо А = ЪЩ, где в = 1^\ . а. Какому уравнению степени 2 удовлетворяет 01 Возьмите норму N в кольце А. Какие элементы обратимы в А?
Упражнения 269 b. Пусть a Е А, Ь Е А*. Доказать возможность эффективного вычисления таких q,r £ А, что а = bq + г или даже 2а = bq + r с N(r) < N(b). c. Доказать явно, что 2 — максимальный элемент в А. Если а = х + 0у ^ 2Л, то найти такое а, что аа = 1 (mod 2А) , а — самое простое, по возможности. Указание: элемент принадлежит 2А тогда и только тогда, когда его норма четна (в дальнейшем такой элемент будет называться четным). d. Доказать, что А есть КГИ. Указание: пусть / — ненулевой идеал в А, 6 G /* — элемент с наибольшей нормой. Если a G /, то псев до деление а на 6 показывает, что 2а Е {Ь). Использовать теперь максимальность двойки... e. Написать алгоритм, который для данных а, Ь Е А находит и и v такие, что ua + vb = НОД (а, 6). Почему не для всех, а для данных а и 6? В этом случае доказать, что псевдоделение из вопроса (Ъ) позволяет выразить в явном виде u,v,r E A, a EN, такие, что г есть НОД для а и 6, удовлетворяющий соотношению 2°т = ua + vb. Если а ^ 1, выразить 2а_1г как линейную комбинацию от 2°т и а... Записать алгоритм вычисления коэффициентов Безу в кольце А.
Решения упражнений 1. Десятичные цифры простых чисел Пусть / — длина В, т.е. 1(У-1 ^ В < 10' и к ^ 0. Тогда числа вида п • 10*+' + В • 10fc + с являются числами, десятичная запись которых содержит последовательность £, если 0 ^ с < 10*. Если к > 0, то можно взять с взаимно простым с 10 и тогда числа 10*+' и В • 10* + с будут взаимно просты. Поэтому можно применить теорему Дирихле. В действительности оказывается, что существует бесконечно много простых чисел, содержащих фиксированную последовательность цифр В в заранее заданных позициях. 2. Вычисление НОД Допустим, что т > п. Тогда ат - Ьт = {ап - 6n)am"n + (am_n - 6m_n)6n. Это тождество и условия взаимной простоты а и Ь дает НОД(ат - 6т, ап - Ьп) =НОД(ат"п - 6т"п, ап - Ьп) = = НОД(аттос!п-6ттос!п, ап-6п), Повторяя это соотношение как в алгоритме Евклида, получим искомый результат. 3. Алгоритм Евклида и непрерывные дроби a. Пусть а/Ь — рациональное несократимое число (с Ь > 0). Тогда последовательность частных, полученных в алгоритме Евклида, примененном к а и 6, дает разложение а/Ь в непрерывную дробь. К тому же все частные, за исключением, быть может, первого, положительны, если используемое деление является обычным делением Евклида. b. Рассмотрим непрерывные дроби Si = [а, с*+1,..., ст] и ti = [dt-,dj+i,... ,rfn]. Тогда, очевидно, имеем Si = Ci + l/st'+i и аналогичное соотношение для t и d. Отсюда получаем Si > 1 для i < m, и, следовательно, [si\ = с,-. Кроме того, по предположению, «о = [со, с\,..., ст] = [do, d\,..., dn] = to. Используя предыдущее соотношение, получаем со = do (целые части so и to) и s\ =t\. Затем постепенно
Решения упражнений 271 доказываем, что С{ = d{. Этот процесс заканчивается на наименьшем из чисел тип. Допустим, что это т. Тогда sm = tm и ст = dm через предшествующую рекуррентность. Кроме того, sm = cm по определению s. В результате ст = dm и т = п. c. Достаточно рассмотреть последние деления алгоритма Евклида: гп-2 = rn_ian_i + 1 и rn_i = 1 х rn_i с rn_i > 1. Последнее деление можно заменить на следующее: rn_i = 1 х (rn_i — 1) +1 без появления нулевого частного и закончить деление на 1 = 1 х 1. Это означает, что [co,ci,C2,.. .,cn] = [co,ci,C2,.. .,с„ - 1,1], если сп > 1. Это эквивалентно факту, что любое целое число а допускает ровно два разложения в непрерывную дробь: [а] и [а — 1, 1]. d. Вот часть ответа (развиваемая потом в упражнении 6): г 1 г 1 a0ai-f 1 . a0aia2-f a0ai-f axa2 [a0J = a0j la0jaij = , [a0,ai,a2J = — , ai aia2-fl F4/F3 = [1,1,2] и F5/F4 = [l,l,l,2]. 4. Многочлены континуанты a. Легко видеть, что Fn = Кп(1, ...,1). Это означает, что в Кп имеется Fn слагаемых. b. Нетрудно проверить, что свойство верно для п = -1, 0, 1. Рассмотрим моном Х\ ... Хп. Можно разделить исключения примыкающих пар на две категории: те, которые исключают пару XnXn_i, и те, которые оставляют Хп. По предположению индукции, первая категория дает все одночлены от i£n_2, а вторая — все одночлены от Kn-i, умноженные на Хп. Отсюда результат (обнаруженный впервые Эйлером). c. Следовательно, континуанты обладают зеркальной симметрией: Кп {Х\,..., Хп) = Кп(Хп,..., Х\). Можно определить последовательность Кп следующим образом: Кп = XiKn-i(X2,. • •, Хп) + Агп_2(Лз,..., Хп). Соотношение, которое будет использоваться в следующих упражнениях.
272 II Евклид и основная теорема арифметики Требуемое тождество доказывается легко. Оно указывает, что в поле рациональных дробей ■*^n(-^l j • • • j X-n) rv v V 1 V I Если r<_i = Г{йг + rt-+i, где г„ = 1 и rn+i = 0 есть последовательность делений алгоритма Евклида, примененного к целым взаимно простым числам, то ri = Kn-i(ai+i, • • •, ап). 5. Континуанты (продолжение) a. Нетрудно доказать, используя индукцию, что рассматриваемое произведение равно матрице ( Кп(Хи...,Хп) Кп.1(Х1)...)Хп.1)\ \Kn-l(X2, . . . Дп) 1<п-2{Х2, • • .,Xn-l)J ' Этот результат дает другое доказательство зеркальной симметричности многочленов континуант. b. Вычислив определитель, находим искомое равенство (с точностью до индексов). Следовательно, значения Кп{а\,.. .,ап) и Arn_i(a2,..., ап) дают взаимно простые целые числа. c. Простая индукция показывает, что искомое произведение равно V кп{хи...,хп) xn_i(x2,...,xn) )' Определитель этой матрицы (что и требовалось отыскать) равен Хп+2\Кп-\{Х2,.. .)Хп)Кп+\(Х\,.. .,Хп+\) — —Кп{Х\).. .,Хп)Кп(Х2,.. . ,Xn+i)J, т.е. (-l)n+1Xn+2 по предыдущему пункту. 6. Разложение в непрерывную дробь а. Это решение уже намечено в упражнении 3: г т г т ао<ц +1 aoaia2-f aoai-f aia2 la0J = a0, la0,aij = , la0,ai,a2J = — d\ aia2 + l
Решения упражнений 273 Формула выглядит так: г п Arn+i(a0,ai,...,an) [a0,ai,...,anJ = —— ——, Kn(ai).. . ,an) и доказывается по индукции. Попутно использовалось соотношение [ao, ...,an] = [ao, [ai,...,an]] и равенство, выражающее зеркальность многочленов континуант. Ь. Требуемое соотношение вытекает прямо из определения последовательностей (а,) и (х{). Запишем |х - [а0,..., ап]\ = |[а0,..., an, xn+i] - [а0,..., ап]\ _1 An-t-2(flQ) • ",CLn^n+i) Kn+i(ao,.. .,an) #n+i(ai, • •., an, &n+i) ^п(аь ...,fln) 1 Kn{au .. .,an)Kn+i(ai,.. .,an,xn+i). (и) Очевидно, xn+i положительно (по построению) и континуанты возрастают (хорошо видно, каким образом), следовательно, получаем |x-[a0,...,an]|^ —— _<__ — (12) 'Mab • • -,<*„) 2Kn(au .. .,an) Соотношение, которое впоследствии понадобится. Это доказывает сходимость х. Можно также констатировать, что подходящие вещественные числа дают очень хорошие аппроксимации указанного числа. В действительности, как увидим в дальнейшем, они даже наилучшие. с. Установленная в пункте (а) формула дает значение в неприводимой форме, ибо, согласно упражнению 5, вводимые туда числа взаимно просты. Остается их только вычислить, что и сделаем, применяя рекуррентное определение континуант и значений многочленов. Приводим совмещенные вычисления числителя и знаменателя, чтобы минимизировать необходимые операции. К <— 1; К' <— an; for i in reverse 0 .. n — 1 loop (K\K)+-(atK' + K,K'); end loop; В начале итерации для значения i имеем инвариантное отношение к§ г 1 — = [a1+i,...,anJ. 8 1017
274 II Евклид и основная теорема арифметики Этот алгоритм (который оперирует с коэффициентами разложения), разумеется, не должен использоваться для вычисления последовательности подходящих дробей, так как каждый промежуточный этап не дает первые подходящие дроби. Если необходимо вычислить последовательность подходящих дробей, то можно использовать потоковый алгоритм разложения. Для этого используют две рекуррентные последовательности, определяемые через Р0 = 1, рг = а0, Рп = апРп_1 + Рп_2, Q0 = 0, Qi = 1, Qn = anQn_i + Qn_2. Итак, определяемые последовательности удовлетворяют соотношению [ао,..., an] = Pn+i/Qn+i- Это нас приводит к алгоритму 5. input a; р <_ l; p' t_ e; g t_ 0; Q' <— 1; output (P\Q'); loop input a; (P\P)<-(aP' + P,P');(Q\Q)^ output {P',Q')\ end loop; -(aQ' + Q, <?'); Алгоритм 5. Вычисление текущих подходящих дробей d. Число золотого сечения удовлетворяет уравнению х = 1 + 1/я. Следовательно, его разложение в непрерывную дробь есть [1,1,1,1,...]. Последовательность подходящих дробей, согласно пункту (а) упражнения 4 и предшествующему пункту (а) упражнения 6, есть отношения последовательных чисел Фибоначчи: F2/F1, F3/F2, F4/F3, ... 7. Аппроксимация вещественных чисел с помощью непрерывных дробей a. Выражение pn+i0n-i - Чп+iPn-i = Кп+2Кп-\ - Кп+хКп есть знак (—l)n+1, откуда следует результат. Выражение pn+\qn — qn+\Pn = Кп+2Кп — Kn+\Kn+i есть знак (—1)п. Факт, что х находится между двумя сходящимися последовательностями показывает, что эти последовательности сходятся к х. b. Равенство (11) утверждает, что х — 9п = |x-[a0,...,an]| = 1 Кп{а\,.. .,an)Jfn+i(ai,.. .,an,xn+i)
Решения упражнений 275 Используя двустороннюю оценку an+i < xn+i < an+i + 1, а также, что каждая континуанта — возрастающая функция любой из этих переменных, получаем 1 tfnAr„+i(ai,.. .,an,an+i + 1) Но Kn+i(Xi,..., Хп, Xn+i +1). Действительно, первая континуанта, по определению, равна J£n+2(Xi, ..., Xn+i, 1), тогда как вторая равна по определению Kn+i{Х\,..., Хп+\) + Кп{Х\,..., Хп), т.е. второй конти- нуанте. Следовательно, #n+i(ai,...,an,an+i + 1) ^ ^п+2(вь • • • ,an+i,an+2) = gn+2j откуда и получается требуемая оценка. Другие неравенства выводятся немедленно. c. Зная, что \х — Рп/Яп\ < 1/%Яп (соотношение (12)), и что \Рп/Яп - р/я\ ^ 1/?п (так как q = gn), получаем, что \х - p/q\ > l/2gn, что и дает искомое неравенство. d. Матричные соотношения показывают, что матрица [ Pn-i \ \Яп Яп-lJ обратима над Ъ. Следовательно, можно записать р = арп + /3pn-i и Я = <*Яп + РЯп-\, где а и /? — целые. Однако g < gn, откуда следует, что /? — не нуль и что а и /3 имеют противоположные знаки. Кроме того, согласно доказанному в вопросе (а), рп — xqn и рп-\ — xgn-i тоже имеют противоположные знаки. Отсюда а(рп — xqn) и /?(pn_i — xgn_i) одного знака, а потому \p-xq\ = |a(pn-xgn)-f^(pn_i-xgn_i)| ^ |/?||pn_i-xgn_i| > |p„-xg„|. 8. Факториал и простые числа a. Пусть п = р"1 ...р?г — разложение п на простые множители. Предположим сначала, что г > 1. Тогда р?' < п и, следовательно, делит (п — 1)! Если г = 1, то так как п — непростое, это приводит к тому, что rfi > 1. Если d\ = 2, то числа р\ и 2р\ встречаются в разложении (п — 1)!, кроме случая р\ = 2. Если а\ > 2, то числа р\ и р"-1 меньше п и, следовательно, появляются в разложении (п — 1)!. b. Действительно, очевидно, что всякое целое число к из интервала [2, п + 1] делит (п + 1)! + к. Отсюда мы нашли те целые числа, которые искали. х — Яп < 1 ЯпЯп+1 18*
276 II Евклид и основная теорема арифметики c. Одно из двух: либо п! + 1 — простое число, и тогда задача решена, либо оно составное. В последнем случае оно не может делиться на простое число, меньшее или равное п. Итак, оно делится на простое, большее п, и, разумеется, < п! + 1. Это доказательство, в действительности, аналогично доказательству Евклида бесконечности множества простых чисел. d. Первые числа е, являются, действительно, простыми: в\ = 2, е2 = 3, ез = 7, е± = 43. Однако следующее es = 1807 = 13 х 139 уже нет. В действительности при 5 ^ г ^ 17 числа е, составные. Эти числа, очевидно, взаимно простые. Можно также доказать, что существует такая вещественная константа Е « 1,26, что еп = [Е2 + ^J, но это похоже на шутку, как и для константы К из упражнения 40. 9. Каноническое разложение п! Если vp (m) обозначает показатель, с которым простое число р входит в число m, to vp(n\) = J2i<m<nvp(m) и остается только доказать, что эта сумма равна Sn = Y^An/P%\' Это можно сделать по индукции, доказывая, что Sn+i = Sn + vp(n +1), и проверяя, что S\ = 0. Если а и 6 — два целых числа, то записывая а = bq + г, где 0 ^ г < 6, легко доказать, что [(а + 1)/6J — [а/Ь\ равно 0, если 6 \ а + 1, и равно 1, если 6 | а + 1. Следовательно, [(n + l)/Pi\-[n/pi\ = {1' —»^М» + 1). LV J L ' J [0 в противном случае. Отсюда Sn+i -Sn= Е1^«,(п+1) 1 = Мп + Ч- 10. Уравнение Ферма для п = 2 и п = 4 a. Если х и у нечетны, х2 = у2 = 1 (mod 4) и, следовательно, z2 = 2 (mod 4), что невозможно. Если (х,у, z) — решение уравнения, то (rfx, dy, rfz) — также решение уравнения для любого d E Z. Обратно, если d = НОД(я,у), то rf2 | z2, откуда d | z и (x/rf, y/rf, z/rf) — также решения. b. Если (х + iy) = (1 + i)(a + г/?), то х = а — (3 и у = а + /?, что дает искомый результат (см. по этому поводу упражнение 12). В Z[i] имеем г2 = (х + *у)(я — iy), где х и у имеют противопо- ложную четность. Отсюда ясно, что х + iy и х — iy взаимно просты. Действительно, единственное неприводимое число 7г, которое могло бы делить одновременно х + iy и х — iy, должно делить их сумму 2х
Решения упражнений 277 и разность 2у, а потому и число 2, являющееся линейной комбинацией 2х и 2у. Но разложение 2 на неприводимые есть (1 + г)(1 — г), тогда как ни 1 + г, ни 1 — г не делят х + iy (x и у противоположной четности). Однако в факториальном кольце (каковым является Z[i]), если произведение двух взаимно простых множителей является квадратом, то это же справедливо и для каждого из сомножителей, являющихся взаимно простыми, с точностью до обратимых элементов. Итак, х + iy = ±i(a + г/?)2 со взаимно простыми а и /?, что отвечает на прямую половину вопроса. Обратное легко проверить непосредственно. Например, З2 + 42 = 52 {и = 1, v = 2), 52 + 122 = 132 {и = 2, v = 3). c. Предположим, что х и у взаимно просты. Тогда можно считать, что х нечетно, у = 2г/ — четно. Следовательно, z нечетно. Теперь достаточно записать у2 = (z — x)(z + х), а затем у'2 = *^^]г- Два взаимно простых числа Щ^- и £±£? дающие в произведении квадрат, сами являются квадратами. Поэтому немедленно получаем решение. d. Можно предположить, что х и у взаимно просты. Запишем х4 + у4 = (х2)2 + (у2)2 и, применяя предыдущий результат, предполагая (при необходимости х и у можно поменять местами), что х нечетно, у четно, получим: x2 = u2-t;2, у2 = 2ш;, u,t;>0, НОД(и, v) = 1. Тогда имеем х2 + v2 = u2 с НОД(х, v) = 1. Применим еще раз предыдущий результат, учитывая, что х нечетно: х = а2-62, v = 2ab, и = а2 + б2, а,6>0, НОД(а,6) = 1. Отсюда выводим у2 = 2tw = АиаЬ. Однако и, а и 6 попарно взаимно просты, а произведение 4tm6 — квадрат. Следовательно, и, а и 6 — квадраты: а = с2, 6 = d2. Поэтому с4 + d4 = а2 + Ь2 = и квадрат. Но х4 + у4 = (u2 +1;2)2 > и = с4 + rf4. Доказательство закончено, так как в N не существует бесконечной строго убывающей последовательности (это и есть метод бесконечного спуска, принадлежащий Ферма). 11. Простое диофантово уравнение а. Пары (±г,0) и (±2г,±г) являются решениями в Z[i]. Если бы существовало целое решение, то оно удовлетворяло бы соотношению Зу2 = х2 + 1, что невозможно, так как 3 не может делить
278 II Евклид и основная теорема арифметики сумму двух квадратов, стоящую справа (более простое рассуждение заключается в том, чтобы привести уравнение по модулю 3, аналогично тому, как это сделано в следующем вопросе). b. Приведя уравнение по модулю 5, получаем х2 + z2 = 0. Однако 2 не является корнем квадратным из —1 по модулю 5. Следовательно, z = ±2 (mod 5), что дает нам решение (Лг, ±Аг, ±2Аг). Однако оно не единственно. c. Очевидно, что решений нет, если —1 не является квадратичным вычетом по модулю р. Поэтому р = 1 (mod 4). При этих условиях (мы это уже видели) число р может быть записано в виде суммы двух квадратов, что дает бесконечное множество решений рассматриваемого уравнения. 12. Кольцо Ъ[6]/(а-\- 06), в — квадратичная иррациональность, НОД(а,Ь) = 1 a. Если доказать, что [г[а+%ъ = ¥>(*)> то [*+»y]a+t6 = <p(x+ty), что доказывает сюръективность <р. Достаточно рассмотреть в Z[i] уравнение i — t = (a + ib)(v + iu) = (av — bu) + i(au + bv). Если u,v— коэффициенты Безу для а и 6 и положить t = bu — av) то получим искомое соотношение. b. Если Ker <p = (a2 + 62)Z, то <р индуцирует изоморфизм Z/(a2+62) на Z/(a + i6), а так как t переходит в г, то имеем t2 = — 1 (mod a2 + 62). Из очевидного сравнения а2 = —б2 (mod a2 + б2) получаем (аб-1)2 = — 1 (mod а2 + б2), где б-1 — обратный элемент к 6 по модулю а2 + б2. Следовательно, если а+tb = 0 (mod a2+б2), то t = — ab~l (mod a2-f б2), откуда t2 = — 1 (mod a2 + б2). Для выбранного t, t = bu — at;, известно, что a-f tb = 0 (mod a2-f б2) и элемент < = bu—av и в самом деле является противоположным к ab~l по модулю а2 + б2. Примечание Используя выражение < = bu — av и равенство аи + bv = 1 с помощью прямых вычислений можно показать, что <2 = — 1 (mod a2 -f 62). Но можно также использовать соотношение t — i = Q (mod a + гб), откуда t + i = 0 (mod a — гб), из чего выводим t2 + 1 = 0 (mod a2 + 62). ■ c. Положив /i(x + гу) = х + ty и используя соотношение <2 = — 1 (mod a2 + б2), покажем, что /i : Z[i] -> Z/(a2 + б2) — морфизм колец. Ясно, что /i(m) = m для m G Z и /i(a + гб) = a + tb = 0 (mod a2 + 62)- Отсюда следует, что /i дает переход к факторкольцу и Ker <р = (а2 + 62)Z, где равенство следует из того, что /i и <р индуцируют взаимно обратные морфизмы.
Решения упражнений 279 К примеру, 1 + i делит х + гу тогда и только тогда, когда я и у одной четности. Для а + ib = 9 + 2г имеем t = 38 и потому х + гу делится на 9 + 2г тогда и только тогда, когда х + 38у делится на 85. d. Ъ\г\/(а + гб) Существуют два очевидных случая, когда кольцо 7L[i]/(a + гб) состоит из а2 + б2 элементов. Первый случай — когда 6 = 0, второй — когда а и 6 взаимно просты и кольцо Ъ[г\/(а + гб) изоморфно Z/(a2 + б2). В общем случае, если d = НОД(а,6), а = da'', 6 = с/б' каноническое отображение Ъ[1]/(а + гб) в Z[i]/(rf) сюръек- тивно и с ядром, изоморфным Z[t]/(a' + гб') (каноническая инъекция Z[t]/(a' + гб') -> Ъ\}]/{а-\- ib) получается умножением на с/ и образ — в точности это кольцо), откуда следует результат. e. Кольцо Щв] снабжено автоморфизмом, который переводит 0 в другой корень 0 уравнения X2 — SX + Р = 0 и нормой: N(a + 60) = (a + 60)(a + 60) = a2 + 5a6 + P62. Положив z = a + 60, докажем, что кольца Z[9]/(z) и Z/N(z) изоморфны. Для этого достаточно найти в Z/N(z) элемент <, играющий роль 0 в Z[0]/(z), т.е. a + 6< = 0 (mod N(z)). Это возможно, так как 6 взаимно просты с N(z) = a2 + 5a6 + Р62. Следовательно, он обратим по модулю a2+5a6+P62 и потому t = —ab~l (mod N(z)). Элемент t удовлетворяет тому же уравнению, что и 0: <2-S< + P = 0 (mod N(z)). Докажем теперь, что отображение \i : Ъ[в] —> 'L/N(z)) определенное по правилу fi(x + у0) = х + yt, является морфизмом колец, который можно пропустить через Z[0]/(z) -> Z/N(z). Впрочем, N(z) делится на z и потому имеется канонический морфизм (р : Z/N(z) —> Z[0]/(z). Тот факт, что эти морфизмы взаимно обратны, равносилен тому, что t = 0 (mod z), и это как раз тот случай, так как Ы = — a = 60 (mod z). Последнее равенство можно упростить, сократив на 6 (6 обратим по модулю z ввиду иа + vb = 1, что приводит к u(a + 60) + (v — ив)Ь = 1). Отсюда можно сделать вывод, что кольцо Z[0]/(z) состоит из |N(z)| элементов для взаимно простых а и 6, а затем перейти к случаю произвольных а и 6. 13. НОД в Z[i] и суммы двух квадратов а. Специфическое предположение для Z[i], что р делит (х + г)(х — г). Тогда z = и + iv = НОД(р,х + г) является настоящим делителем р: действительно, z не может быть обратимым (если л* неприводимый элемент в Z[i], делящий р, то он делит (х + i)(x — г)). Следовательно, 7Г или 7г делит р и х + г и z не является ассоциированным с
280 II Евклид и основная теорема арифметики с р (так как р \ х + г). Поэтому, если z' такое число, что zz' = р, то N{z)N{z') =р2 => N{z) = и2 + v2 = р. Используя вычисление НОД в Z[i], находим: 1 301 = 252+262, 1000 037 = 9912+1342, 2 000004 973 = 390272+218382. b. Если z = и + iv = НОД(п, х + и/), числа и и v взаимно просты, то можно применить результат упражнения 12. Так как z делит n, zl делит п. С другой стороны, так как z E nZ[i] + (x + iy)Z[t], то получаем zJ G (nZ[iJ + (ж + »y)Z[iJ) (nZ[i] + (ж - iy)Z[i]) С С nZ[t\ + (x2 + у2) Z[f] = nZ[i]. Целые числа п и z'z делят друг друга, откуда следует их равенство. c. Имеем у* = уР-1 = 1 (малая теорема Ферма). Для у 6 Я пусть г — наибольшее целое число, такое, что у; ф 1; 1 ^ i: < k, так как, с одной стороны, у к = 1, а с другой, yi ^ 1 по предположению. Так как 1 = yt+1 = у?, то получаем, что у; = — 1 и y;_i — корень квадратный из —1 по модулю р. Чтобы пересчитать Я, рассмотрим его дополнение (плохие элементы) G = {у Е U(Zp)f y2q = 1}. Это подгруппа циклической группы f/(Zp). Несложное рассуждение показывает, что \G\ = 2g и, следовательно, i^U u = ^гг ^ ^- Вероятность случайным образом выбрать т плохих элементов, следовательно, ^ ^г. Можно запрограммировать вероятностный алгоритм, приведенный ниже (не забывайте вычислять yq mod p при помощи дихотомии!) и сравнить его с детерминистским алгоритмом, который дает (£^-)! modp как корень квадратный из —1 (который из двух более эффективен?). I loop Выбрать у случайно в [2 .. р — 2]; у «— у4 mod р; у' <— у2; exit when у' ф 1; end loop; loop $/•«•$** exit when у' = — 1 modp; у <— у'; у' <— у2; I end loop; &^&^ 14. Делимость сумм х2 + 2у2 а. Норма JV может быть продолжена на поле Q[\/-2], подполе поля С, натянутое на 1 и >/—2- Q[\/-2] есть расширение Q степени 2 с базой
Решения упражнений 281 {1, >/—2}, и, конечно, продолженная норма остается мультипликативной. Если с = г -f <\/^2 G Q[V~2] и х, у Е 7L выбраны так, что \т — х\ ^ ^ и I* — У\ ^ ^) то> обозначая х + уу/^2 через д, имеем: Ar(c-9) = (r-*)2 + 2(<-y)2^ + j. откуда N(c — q) < 1. Если а и 6 — два элемента из Z[V—2), где 6 ^ 0, то достаточно применить этот результат с а/6 Е Q[\/— 2], чтобы найти q Е Щу/—2] такое, что N(a/b — q) < 1 или N(a — bq) < iV(6), что доказывает евклидовость Z[\/^2) относительно N. b. С помощью рассуждений, совершенно аналогичных доказательству леммы 5, докажем, что для неприводимого числа z из 7L выполнено: N(z) — простое число. Копируя доказательство предложения 6, можно показать, что положительный делитель х2 + 2у2, где х и у взаимно просты, имеет форму и2 + 2v2. c. Если р представляется в виде р = х2 +2у2, то у не нуль по модулю р и — 2 = (ху-1)2 в Z/pZ, так как у обратим в Zp; значит —2 — квадрат по модулю р. Обратно, если —2 есть квадрат по модулю р, то найдется х такой, что р делит х2 + 2. Согласно предыдущему, р представимо в виде u2 + 2t;2. 15. Делимость целых чисел вида х2 — 2у2 a. На этот раз кольцо есть Щу/Щ. В отличие от уже изученных случаев это кольцо вещественное: {1, у/2} является Z-базой Z[v5]. Кольцо частных его есть поле Q[v^], имеющее инволютивный автоморфизм z ь-> z, который z = r + ty/2 ставит в соответствие z = г — ty/2. Этот автоморфизм оставляет на месте 7L\y/2\ и позволяет определить мультипликативную норму N через N(z) = zz. Другими словами N{r + ty/2) = г2 — 2<2. Доказательство того, что Щл/2] является евклидовым для \N\, аналогично решению упражнения 14. Заметим, однако, что N может принимать отрицательные значения, откуда и использование абсолютного значения N. b. Заметим, что —1 является нормой: —1 = I2 — 2 х I2 = ЛГ(1 + >/2)« Используя рассуждения, аналогичные предложению 6, докажем, что делитель (положительный или нет) числа вида х2 — 2у2 (х и у взаимно
282 II Евклид и основная теорема арифметики простые) имеет вид (с точностью до знака ±1) и2 — 2v2. Но равенство -{и2 - 2v2) = N({1 + V2){u + «л/2)) = {и + 2t;)2 - 2(ti + t;)2 позволяет пренебречь знаком ±. Следуя соответствующему этапу решения упражнения 13, можно доказать, что нечетное простое число р имеет вид х2 — 2у2 тогда и только тогда, когда 2 является квадратом по модулю р, что эквивалентно |р| = ±1 (mod 8). 16. Кольца Z[\/—3] и Z[\/lO] нефакториальны a. Простое натуральное число, не являющееся нормой в кольце, остается неприводимым в этом кольце (возьмите норму от произведения). Если р и q таковы и pq — норма (pq = N(z) = zl), то z и J неприводимы (используйте норму) и pq разлагается двумя способами: pq = zJ. Например, 2x5 = (1 + \/—3) х (1 — л/~-3)- Это доказывает нефакториальность кольца Z[\/-3]. Можно проверить, что элементы 2(1-1- >/—5) и 10 не имеют НОД в Z[V—3] и что идеал, порожденный 2(1 + л/^3) и 10, неглавный. b. Можно использовать тот же тип рассуждений, что и выше, однако в этом случае норма кольца Z[\/l0] уже не является неотрицательным числом... Однако все улаживается, так как —1 является значением нормы: — 1 = З2 — 10 х I2 = ЛГ(3 + \/Г0)... Вот плохое разложение на неприводимые: 2 х 3 = (4 + у/10) х (4 — у/10) (можно проверить, что ни 2, ни 3 не являются нормами, рассуждая по модулю 10). 17. Целозамкнутые кольца a. Пусть F(X) — унитарный полином с целыми коэффициентами: F(X) =Хп + ап.хХп~1 + • • • + а2Х2 + ахХ + а0 и p/q рациональное число (р и q взаимно просты), являющееся корнем F(X). Тогда рп + an.lPn-lq + an.2pn-2q2 + • • • + a2p2qn~2 + атп~1 + a0qn = 0, откуда следует, ввиду того, что р и q взаимно просты и q делит рп, что q = ±1. Это доказывает целозамкнутость любого факториального кольца. b. Нецелозамкнутость Щу/d] следует из тождества: 2 , l"rf п 1 + \/^ х — х + —-— = 0 с х=—-—. 4 2
Решения упражнений 283 Заметим, что ±2 не может быть нормой в Z[Vd\, так как равенство х2 — dy2 = ±2 приводит к тому, что в Ъ/АЪ х2 — у2 = 2, что невозможно. Отправляясь от равенства 2 = wv, получаем 4 = N(u)N(v) и, следовательно, N(u) = ±1 или 7V(v) = ±1, что показывает неприводимость числа 2. Но 2 — непростое число: 2\(l + y/d)-(l-Vd), хотя 2 | (1 + V5) и 2 | (1 - л/5). с. В Z[2i] число 2 неприводимо. В самом деле, из равенства 2 = zz' получаем 4 = N(z)N(z') и поскольку Z[2i] не содержит элемента нормы 2 (а2 + 462 не принимает значение 2), либо N(z) = 1, либо N(z') = 1, откуда следует обратимость z или z'. Элемент 4 может быть разложен двумя способами в произведение неприводимых неассоциированных элементов: 4 = 2x2 = — 2 г х 2 г. Действительно, неассоциированность 2 г и 2 следует из того, что единственным числом, которое могло бы их ассоциировать, является г, не являющееся элементом в Z[2i]. Кольцо Щ2г\ не является факториаль- ным. Разложение числа 4 демонстрирует еще один феномен. Существуют два числа а и 6 такие, что а2 | б2, но а не делит 6. Кольцо Z[2i], следовательно, не является целозамкнутым. Другая странность, связанная с этим равенством: 2 неприводимо, но не является простым! Наконец, Q[i] — поле частных Z[2i], однако многочлен X2 +1 неприводим в Z[2i][X], но не в Q[i][X]. В противном случае его разложение на неприводимые элементы было бы разложением в поле дробей Z[2i], однако (X + i)(X — г) не является разложением над Z[2i]. 18. Целые элементы; целые квадратичности a. Пусть (1, а) — база К над Q. Докажите, что а является корнем квадратного многочлена с коэффициентами из Z. После этого приведите число, появляющееся под знаком радикала к такому виду, чтобы у него не было множителей, являющихся полными квадратами. b. Целые алгебраические числа являются элементами Z. Другими словами, рациональные алгебраические числа являются целыми рациональными числами. c. Если X"Y^ удовлетворяет уравнению х2 — sx +р = 0, где s,p E Z, то при s = 1, р = ^^. Следовательно, d = 1 (mod 4). Обратно, если d = 1 (mod 4), то s и р определены так: 1 + V3 1-V3 , 1 + V5 1 —л/5 1-rf
284 II Евклид и основная теорема арифметики — целые числа, и l^jd является корнем уравнения х2 — sx + р = 0. 19. Целые числа в Q(y/d) b. Равенства: х + У = (z + *(z))(z'+ *(*)), ху = (z2 + *(z)2)z'*(z') + (zf2+*(z')2)z<r(z) доказывают, что х+у иху — элементы Ъ. Следовательно, х и у — целые алгебраические числа, а так как они принадлежат Q (они остаются на месте под действием <т), то х,у 6 7L. Итак, доказано, что элементы zz' + cr(zz'), zz' -cr(zz') и (z + z') + cr(z + z'), (z + z') -cr(z + z') содержатся в Ъ. Следовательно, zz1', z + z' — целые алгебраические числа. c. Всякий элемент х из Q(y/d) является решением квадратного уравнения над Q. Следовательно, существуют целые а, 6 и с такие, что ах2 + Ьх + с = 0, где а и 6 не равны нулю одновременно. Если, кроме того, х — целый над Z, то он корень унитарного многочлена с целыми коэффициентами Р и тогда НОД(Р, аХ2 + ЬХ + с) есть унитарный многочлен степени, не превосходящей 2, аннулирующийся значением х. d. Пусть z = а + Ьл/d 6 Q{Vd). Равенства: z + <r(z) = 2а и zcr(z) = a2 — db2 показывают, что z — целое квадратичное число тогда и только тогда, когда 2а Е TL и a2—db2 Е Z. Правое условие дает d(26)2 E Z. Затем (так как d не имеет квадратных множителей), обозначив а = | и 6 = |, предыдущее условие можно переписать так: и2 — dv2 E 4Z. Используя то, что квадратами в Z/4Z являются лишь 0 и 1, получаем: (w = 0 (mod 2), v = 0 (mod 2), если d = 2,3 (mod 4), w = v (mod 2), если d = 1 (mod 4). 20. Евклидовость квадратичных колец Ь. Будем различать два случая в зависимости от того, каков остаток от деления d на 4. Первый случаи. Пусть d ф 1 (mod 4). Для z E Q(VS), z = а+/?л/5, гдеа,/?Е<0)идЕЛсд = а+бл/d, имеем: \N(z-q)\ = |(or—а)2—с?(/?—6)2|, откуда извлекаем две оценки: № " ^)1 < \<* ~ а\2 + \Ф ~ 612> и при rf > 0 |iV(z-g)|^max(|a-a|2, d|/?-6|2),
Решения упражнений 285 Если выбрать а, 6 Е Ъ такие, что \а — а\ ^ 1/2 и |/? — 6| ^ 1/2, то получаем \N{z-q)\ ^ (l + |d|)/4 и при d > 0: \N(z-q)\ ^ max(l/4, d/4). Отсюда N(z — g) < 1, так как d G {—1, —2,2, 3}. Второй случаи. Предположим, что d = 1 (mod 4). Норма вычисляется следующим образом: N 1 + Vd Для г €Q(Vd), z = а + /3±±& с a,/? G Q и g € Л, g = а + 6±^, где а, 6 € Z, имеем: Отсюда имеем следующие две оценки |JV(z — g)| в зависимости от знака d: d<0: (a-a+^) +|d|(^)2, d>0: max(|a_a + ^b|2jd|^b|2). Если выбрать b G Ъ так, что |/? — 6| ^ 1/2, а затем aG Z так, что /?~6|<£ l/2,To|JV(z-g)|^ l/4+|rf|/16Hnpnrf>0:|iV(z-g)|^ а — а + - тах(1/4, rf/16), что во всех случаях должно давать \N(z — q)\ < 1. Поэтому d e {-11, -7, -3,5,13}. . п def /— м -h v^ = z z\ у i— LeastRem(v, \N(z)\)\ x i— LeastRem(u, \N(z)\); s + y0; г ЛГ(г) ;g Алгоритм 6. Евклидово деление z' на z в Z[0], где0 = л/5и d= -1, -2, 2, 3. Конечно, возможна реализация евклидова деления, использующая только целочисленные вычисления. Элементы кольца А кодируются своими координатами в базе {1,0} с 0 = л/d, если d = 2 или 3 (mod 4), 0 = —-—, если d ЕЕ 1 (mod 4). Для вычисления частного и евклидова остатка z' для z, вычисляем z'J на целое число N(z). Затем делим (точным образом) полученные результаты на 1. Нам необходима функция
286 II Евклид и основная теорема арифметики LeastRem : 7L х N* —> Z, для которой г = LeastRem(a, b) — наименьший остаток от деления а на 6 (|г| ^ 6/2). Алгоритм 6 рассматривает более простой первый случай, когда d = 2 или 3 (mod 4). Второй случай d = 1 (mod 4) (алгоритм 7) более сложен. Он использует переменные целые числа х и у, предназначенные для установки в них, в соответствии со значениями переменных а и 6 из предыдущего доказательства, следующим образом: у = 6, х = 2а + 6, а = —-—. ■ лdet /— у <— LeastRem(v} \N(z)\); x <— LeastRem(2u + у, 2 х |ЛГ(г)|); у & о {mod #ОД) и 2ц + у ш a {mod %N(z)) cM<№*)\f2*l*\<\N(*)\ | r <— (g - y)/2 + yfl; r <— гг/ЛГ(г); g <— (г' - г)*/ЛГ(*); | Алгоритм 7. Евклидово деление в Z[0] при в = х у d и rf= -11, -7, -3, 5, 13. 21. Нахождение колец мнимых квадратичностей a. Элемент z 6 А обратим тогда и только тогда, когда N(z) = 1. Отсюда следует, что U(A) = {—1,1}, кроме, возможно, d = — 1, —3. Для d = — 1, А = Z[i] выполнено: U(A) — циклическая группа порядка 4, порожденная г; для d = —3, А = Z[j] и £/(А) — циклическая группа, порожденная элементом j порядка 6. b. Пусть 6 6 В* —U(B)) для которого у?(6) имеет наименьшее значение. Если а 6 #, то а = &g + r, где у?(г) < у?(6), что приводит к г G £/(#) или г = 0. Но так как £/(Б) предполагается редуцированной к {—1,1}, то г = 0, ±1 и, следовательно, В/(b) = {0,1,-1}, откуда и заключение. c. Для упомянутых значений d мы видели (упражнение 20), что А — евклидово кольцо. Докажем обратное. Предположим, что А евклидово, и докажем, что d 6 {—11, —7, —3, —2, —1}. Можно считать, что d ф — 1, —3. Это случаи, когда группа единиц редуцируется к {—1,1}. Тогда существует такой элемент z € А, что |A/(z)| = 2 или 3. Но |A/(z)| = |ЛГ(г)| (упражнение 12) и, следовательно, N(z) = 2 или 3. Читатель может сделать вывод самостоятельно, записав N(z) = а2 + |rf|62 при d = 2 или 3 (mod 4), или 4N(z) = а2 + \d\b2 (а и 6 одной четности) при d= 1 (mod 4). 22. Вычисление НОД с помощью двоичных операций Необходимое соотношение, конечно, НОД (а, Ь) = 2inf(a^) НОД (а', &'). Итак, вычисление НОД двух целых чисел приводит после возможного
Решения упражнений 287 деления на степени двойки к вычислению НОД для их нечетных частей. Используя к тому же свойство НОД (а, 6) = НОД (а — 6,6), получаем следующий алгоритм. I function Binary.Gcd(a,b € N*) return d = НОД(а,Ь) is begin Reduce(a,a,a')\ Reduce(b,/3,b')\ while а' ф V loop 'ЕШШ^КжЩ^ШШШЩШЩ if a' > Ъ' then a' <— a1'"-'b'; Reduce(a\ 7, a'); else b' <— b' - a'; Reduce(b\ 7, b'); end if; end loop; if a > /3 then return 2^a'; else return 2aa'; end if; I end Binary.Gcd; в котором процедура Reduce(a, а, а'), начиная с первого аргумента, выдает для а нечетное число а', такое, что а = 2aa'. Этот алгоритм заканчивается за конечное число шагов, так как количество пар (а', 6'), строго положительных целых чисел убывает на каждой итерации (следует заметить, что разность \а' — 6'| может не убывать. Например, для а = 459и6 = 309). Этот алгоритм, примененный к числам 1610 и 1000, более быстрый (по числу итераций), чем алгоритм Евклида, использующий деление с наименьшим остатком, что не противоречит теореме Лазара, сформулированной в разделе 6.2. Впрочем, этот алгоритм заметно более медленный, чем алгоритм Евклида для пары (509, 3). Внимание: деление с четным остатком существует только тогда, когда а и 6 одинаковой четности. В любом случае требуемая программа будет использовать процедуру Reduce, и, следовательно, необходимо наличие этого деления, когда а и 6 нечетные. Учитывая, что деление на 2 — очень быстрая операция, можно предполагать, что полученный таким образом алгоритм, как правило, эффективнее, чем обычный алгоритм Евклида. Но насколько? 23. Другое соотношение для последовательности Фибоначчи Требуемое соотношение доказывается с помощью простой индукции. Если вспомнить, что два соседних числа Фибоначчи взаимно просты, то отсюда легко выводится, что НОД Fn и Fm равен НОД(^„, Fn+m) и тогда можно применять метод Евклида, опираясь на значения индексов. Соотношений для последовательности Фибоначчи очень много (Кнут [99] приводит их в большом количестве). Можно заметить, что последовательность, используемая в доказательстве, есть немедленное
288 II Евклид и основная теорема арифметики следствие аналогичного соотношения для многочленов континуант в упражнении 5. 24. Вычисление НОД n-ки целых чисел b. Вот алгоритм, отвечающий на вопрос: I loop Number. Of .Zeroes <— 0; for i in 0 .. n — 1 loop Repere <— Repere + 1 mod n; exit when «дереге ф 0; Number.Of .Zeroes <— Number.Of .Zeroes + 1; end loop; exit when Number.Of .Zeroes ^ n — 1; Modulus i URepere\ for s in 0 .. n — 1 loop Ui i— Ui mod Modulus; end loop; t*Repere < Modulus; J end loop; c. Главное в этом алгоритме состоит в том, чтобы уравнять два репера, называемые левым и правым, ненулевыми элементами массива и. Эти два репера стремятся друг к другу, и, как только они совпадают, вычисления заканчиваются. Избежим в этом алгоритме повторяющихся критериев обращения в нуль компонентов и и некоторых делений (редукция с помощью Modulus). Вот несколько строчек алгоритма: I loop while левый < правый and then илевый = 0 loop левый <— левый + 1; end loop; exit when левый ^ правый; for i in левый + 1 .. правый loop i*i <— i*i mod илевыя; end loop; Продолжение есть не что иное, как повторение этого фрагмента с переменой ролей левый и правый и с заменой прибавления единицы на вычитание единицы. 25. Странный алгоритм Евклида Для всякого элемента 6 Е N существует система представителей из Z/6Z, элементы которой г удовлетворяют соотношению <р(г) < <р(Ь).
Решения упражнений 289 Это очевидно, если 6^5. Если Ь > 5, то 5 — Ь представляет 5 по модулю Ь... Можно заметить, что мы располагаем парами (а, 6), где 6 — делитель а, с евклидовыми делениями а = bq + г, где г уже не нуль! (Возьмите, например, 40 = 5 х 6 + 10.) 27. Самый малый алгоритм Евклида на 7L То, что <р — алгоритм Евклида, содержится в примере (раздел 3.1) из этого курса. Пусть ф — другой алгоритм Евклида на Z со значениями в N. Докажем с помощью индукции по п = ф(Ь), что (p(b) ^ ф(Ь). Это верно для п = 0, так как из ф(Ь) = 0 следует, что 6 = 0 (см. лемму 29). Предположив, что это выполняется для всех 6, таких, что ф(Ь) < п, докажем, что оно верно и для ф(Ь) = п. Подвергнем ^-евклидову делению [|6|/2J на число 6: [|6|/2J = bq + г, где ф(г) < ф(Ь). Так как г представитель [|6|/2J по модулю 6, то И ^ LW/2J- Отсюда имеем: ¥>(r)£¥>(L|b|/2J) = p(6)-l. Так как ^(г) < п, то по индукции ф(г) = <р(г) и поэтому: <р{Ь)^<р{г) + 1=ф(г) + 1^ф(Ь), что заканчивает доказательство. 30. Конечные поля, порядок которых есть квадрат простого числа Согласно изложенному выше (раздел 1.3, предложение 8), р — не- приводимо в Щг[ и потому порождает максимальный идеал. Итак, Z[i]/(p) — поле, так как: x + iy = Q (modp) <=> х,у = 0 (modp), аддитивная группа Х[г]/{р) изоморфна 7L/{p) х Z/(p), откуда порядок поля, о котором идет речь, равен р2. 31. Несколько конечных полей порядка, являющегося степенью двойки Многочлены Р(Х) следующие: Х2 + Х+1, Х3 + Х + 1, Х4 + Х + 1, Х* + Х7 + 1, Х* + Х + 1, Х7 + Х + 1, 19-1017
290 II Евклид и основная теорема арифметики неприводимые по модулю 2 (для каждой данной степени п — это первые неприводимые многочлены степени п, в смысле лексикографического порядка, о чем читатель, конечно, догадался). Поля Хъ[Х]1{Р) отвечают на вопрос задачи. 32. Получение всех коэффициентов Безу Так как (а, Ь) можно всегда заменить на (a/rf, 6/rf), то будем предполагать, что d = 1, т.е. а и 6 взаимно просты. Тогда имеем: (щ — и)а = (v — vo)b => а | (v — vo)b. К тому же a и 6 взаимно просты. Отсюда а делит v — vq. Следовательно, существует k E 7L такое, что к = uov — vou, так как a(uov — vqu) = v — vo. 33. Бдинственность ограниченных коэффициентов Безу С помощью замены (а, 6) на (a/rf, b/d) можно всегда предполагать, что d = 1. а. Согласно предыдущему упражнению, существует такое к 6 Z, что и' = u — kbnv' = v+ka. Следовательно, число и' есть представитель по модулю 6 числа и, отличный от и. Неравенство для \и\ показывает, что \и'\ ^ \Ь\/2. Равенство возможно только для четного 6. Но а и 6 не могут быть оба четными, так как они взаимно просты. 34. Мажорирование коэффициентов Безу в К[Х] Достаточно сымитировать доказательство, касающееся коэффициентов Безу в 7L из раздела 7.2. Алгоритм создает последовательность Qu Q2, • • •, Qn с одной стороны, £/0, Uu ..., £/„+1 и Vb, Vu ..., Vn+i с: £/0 = 1, £/1=0, Ui+i = Ui-i-QiUi, Vo = 0, Vl = 0, Vi+i = Vi-i - ОМ, 1 ^ i ^ n, и легко проверить, что для 2 ^ г < п deg(Qj) > 0 и: deg(f/2) < deg(f/3) < < deg(f/n+1), deg(V2) < deg(V3) < < deg(7n+1), что дает искомый результат, так как Un и Vn — коэффициенты Безу и £/n+i ~ Б, Vn+i - A.
Решения упражнений 291 35. Дерево Штерна — Броко а. Свойство p'q — pq' = 1 верно для всякой пары последовательных дробей, полученных с помощью описанной процедуры. Это доказывает взаимную простоту числителей и знаменателей полученных дробей и что £ <Г Р+Р' <Г ^~ что я ^ я+я' ^ я' \ Если | < | < ^7, то из неравенств bq—cp^ 1 и cp'—bq' ^ 1 получаем, что Я + Ч' ^ д(ср; - bq') + g'(6g - ср) = с. Ь. Рассматривая во время процесса деления дробь ^, можно заметить, что не может быть получена дробь со знаменателем, большим, чем 6, легко вывести алгоритм 8, в котором используются первообразные уравнения, введенные в упражнении 30 главы I. function Farey(n £ N*) return List is Auxiliaire, Resultat: List; begin if n = 1 then return [£, }]; else Auxiliaire <— Farey(n — 1); Resultat x i— Head(Auxiliaire); Auxiliaire «— while Auxiliaire ф null loop Resultat i— Construct(x, Resultat); у i— Head(Auxiliaire); Auxiliaire «— z i— гфу; if Denominateur(z) ^ n then Resultat i— Construct(z, Resultat); end if; * <—y; end loop; Resultat i— Construct(x, Resultat); return Reverse(Resultat); end if; end Farey; - NULL; Tail (Auxiliaire); Tail (Auxiliaire); Алгоритм 8. Порождение ряда Фарея Список-результат построен в обратном порядке (что не очень важно само по себе). Перед окончанием выполнения его порядок еще раз меняют. В этом алгоритме знак $ обозначает странную операцию, которую применяют к дробям в процессе Штерна — Броко. 19*
292 II Евклид и основная теорема арифметики c. Если две последовательные дроби в Tn не удовлетворяют соотношению g + д' > N, то медиана принадлежит Tn и должна находиться между двумя простыми, что является противоречием. Начиная с соотношения p'q — pq' = 1 и p"q' — p'q" = 1, получаем p'(p"q - pq") =p + p' и q'{p"q " РЯ") = Я + я", что доказывает первое из свойств. Отправляясь от тех же соотношений, можно доказать, что q + q» q + N N-g" РЯ-РЯ = —= — —. Согласно свойству знаменателей, доказанному выше, последний терм меньше 1 и, следовательно, второе свойство доказано. Для формул, позволяющих выразить член ряда Фарея с помощью двух предшествующих дробей, достаточно проверить, что два выражения для р" и q" взаимно просты и что их отношение эффективно дает а". В этом случае запись алгоритма очевидна. d. Предположим, что р и g отличны от нуля и единицы и что р < д. Свойство, сформулированное в первой задаче, позволяет доказать, что обе родительские дроби для £ дают коэффициенты Безу для р и д. Кроме того, свойства • всякая дробь £ получена в дереве Штерна — Броко с помощью двух дробей, расположенных на той же ветви дерева, • на ветви дерева, начиная с уровня 2, знаменатели строго возрастают позволяют доказать, что одна из этих пар коэффициентов минимальна. 36. Вычисление коэффициентов Безу n-ки целых чисел tii <— 1; d i— ai; for t in 2 .. n loop dтЦ0Д(1$^, ;'•*',aUi\m. *$&)!&. *'•■• "+'*4~%Ъ~$ Щ jf > i:Щ m.0 (a,(3)<—Bezout(d, a,); d i—ad + /3at; for j in 1 .. 11 — 1 loop uj i— otuj] end loop; ". <— /3; exit when \d\ = 1; end loop; Алгоритм 9. Коэффициенты Безу
Решения упражнений 293 Пусть требуется вычислить коэффициенты Безу n-ки целых чисел а. Алгоритм 9 находит эти коэффициенты и помещает их в n-ку и. 39. Сложность центрированного деления а. Первые члены последовательности (Gn) выглядят следующим образом: 0, 1, 2, 5, 12, 29, 70, 169, ...Имеется точно п центрированных делений в алгоритме Евклида, примененном к паре (а, 6), ибо: a = lxG„ + G„.i, |G„-i| ^ |G„|/2, Gn = 2 х Gn_i + Gn_2, |Gn_2| ^ |Gn_i|/2, G3 = 2xG2 + Gi, |Gi|^|G2|/2, G2 = 2x Gi + 0. b. Запишем деления в виде r,-_i = r,g, + r,+i с |r,-+i| ^ |rt-|/2 для 1 ^ i; ^ n и |ri| < |го|. Отсюда следует, что |g,-| ^ 2 для 2 ^ г' ^ п. Чтобы доказать неравенство |r,-_i| ^ 2|г,| + |n+i| (для 2 ^ г'^ п), рассмотрим два случая: • kf| ^ 3 : |rt-_i| = \nqi + r,-+i| ^ |g,-||rt-| - |r,-+i| ^ 3|r,-| - |r,-+i| ^ 2|r,-| + |ri+i|. • |g,| < Злишь при g, = ±2. Из того, что |±2r,- + rt+i| = |rt_i| ^ 2|г,|, следует |r,-_i| = |±2r,-+r,-+i| = 2|r,-| + |r,-+i| (если выполняется \u+v\ ^ |u| и \v\ ^ |u|, то \u + v\ = \u\ + \v\). Из неравенств |r,-i| ^ 2|r,| + |r,+i| выводим: |r„|^l = Gi, |r„-i|£2 = G2, |rn_2| }> 2|r„_i| + |r„| ^ 2G2 + Gi = G3j |n| ^ 2|r2| + |r3| ^ 2Gn_i + Gn_2 = Gn, |ro| ^ Ы + |г2| ^ G„ + Gn_b Оставшаяся часть упражнения трудностей не представляет. 40. Порождения простых чисел с помощью многочленов а. Предположим, что существует такой многочлен. Нетрудно показать, что Р(п) делит Р(п + кР(п)) для любого целого к (достаточно расписать Р(п + кР(п))). Так как Р не постоянен и принимает только простые значения, то приведенное свойство означает, что для всякого к 6 Z, Р(п) = ±Р(п + кР(п)). Следовательно, один из многочленов
294 II Евклид и основная теорема арифметики Р — Р(п) или Р + Р(п) имеет бесконечное множество корней, что противоречит тому, что Р не постоянен. Замечание: натуральное число п называется эйлеровым, если многочлен X2 + X + п принимает простые значения для всякого целого числа из интервала [0,п — 1[. Доказано, что существует только шесть (уже известных) чисел Эйлера: 2, 3, 5, 11, 17, 41 (см. Ле Лионне [113]). b. В действительности мы докажем, что это неравенство почти всегда точное. Согласно постулату Бертрана, pn+i < 2pn, и если имеется точное неравенство для рп, то оно имеется и для рп+ь Достаточно теперь заметить, что точное неравенство будет при п = 3 (так как 7 < 5 + 3 + 2). c. Постулат Бертрана позволяет утверждать, что п-е простое число не меньше 2П и, следовательно, 10п. Тогда, если через К обозначим сумму ряда J2k>110~k рл, то это и будет та постоянная, которую мы ищем. Действительно, 10П'К = Ю"2"1?! + 10п2"4р2 + • • •+ 102n"4-i +Рп + 1(Г2п-Vh + 1(Г4п-4рп+2 + • • • = рп + х (mod Ю2""1), где хб]0,1[. Так как рп < 10п, то утверждение верно. Однако, с практической точки зрения, приведенная выше формула числа К неэффективна: чтобы посчитать по ней число К, необходимо прежде всего знать последовательность простых чисел, а затем еще и просуммировать ряд ... приблизительное значение этой суммы 0,2003. Вообще, приемлемая формула, позволяющая находить простые произвольно большие числа, не известна. 41. Соотношение Безу для многочленов Если Р и Q взаимно простые многочлены из А[Х], то они принадлежат и ifpf]. Из равенства Безу UP + VQ = 1, освобождаясь от знаменателей, появляющихся в U и V, получаем соотношение, требуемое в упражнении. Расширенный алгоритм Евклида показывает, что можно выбрать многочлены U и V, удовлетворяющие условиям, наложенным на степени (см. упражнение 34). 42. Сложность алгоритма Евклида в К[Х] а. Пусть (iii)o^i^n+i — последовательность остатков в алгоритме Евклида, примененном к паре {А, В), с Rq = A, R\ = В, Rn+i = 0 и Rn ф 0; тогда 0 ^ degRn < elegit»i < • • • < degR\ и, следовательно, n-l^deg(fli).
Решения упражнений 295 b. Подходящей является последовательность Fo = 1, F\ = X + 1 и Fn+2 = XFn+i + Fn. 43. Оптимальность алгоритма для К[Х] (теорема Лазара) а. Ищем /2 ^ <р. Запишем оптимальное деление в виде А = В х Q + R и евклидово деление А = В х Q' + R! с deg(ii/) < deg{B). Это дает /1(Л, В) = /|(Д, Д) + 1 и р(Д В) = if [В, К) + 1. 1. Предположим, что deg(R) > deg(B). Тогда из двух евклидовых делений B = QxR + BnR=(Qf-Q)xB + Rf выводим: fi(A, В) = 1л(В, R) + 1 = ^(-^j Д) + 1 (определение, затем рекуррентность), = <p(Ri В) + 2 = <р{В, R ) + 3 (1-е, затем 2-е евклидово деление), = ^(-А, -в) + 2 (по определению), что противоречит /х(А, В) ^ у>(А, В). 2. Предположим, что deg(ii) = deg(B). Тогда deg(R') < deg(R), откуда deg(R' — R) = deg(i?) и равенство: B{Q - Q') = R'-R, deg{R' - R) = deg{R) = deg(£), (13) приводит к тому, что Q — Q' постоянный (не нулевой). Если к обозначает 1/Q — Q'), то имеем евклидово деление В на R: В = —kR + kR' с deg(kR') < deg(R), откуда: fi(A, В) = ц(В, R) + 1 = <р{В, R) + 1 (определение, затем рекуррентность), = у?(Д, АгД') + 2 = <p{-kR, R') + 2 (евклидово деление (13), затем вопрос а), = р(В, Я') + 2 = р(А, В) + 1 (В = -kR (mod Я') затем определение), что противоречит /х(А, В) ^ <р{А, В). Поэтому единственно возможный случай deg(R) < deg(B), и, согласно единственности обычного частного Евклида, R= R'... 44. К теореме Лазара Последовательность (Cn)n^i строго возрастающая и, следовательно, состоит из натуральных чисел; ее первые члены 0, 1,3, 5, 18, 31, 111, 191... Нетрудно проверить неравенства: С2.--1 < (1 - ot)C2i < 0,5 х C2t, 0,5 х C2i-i < C2i-2 < «fti-i,
296 II Евклид и основная теорема арифметики константа а введена в теореме Лазара (а « 0,6180339 — обратное к золотому сечению). Предположим, что первый элемент при центрированном делении имеет четный индекс, скажем С2п. Ниже приведена последовательность центрированных делений С2п на C2n-i (записанных в виде а = qb + r): С2п = 4С2п-1 + (С*2п-2 - С2п-\), С2п-\ = (—2)(С2п-2 — С2п-\) + С2п-3, С2п-2 - С2п-1 = (—3)С2п-3 + (С*2п-3 - С2п-4), С2п-3 — C*2n-4 = 3C2n-5 + {С2п-6 _ С2п-^), С2п-Ь = (—2)(С2п-6 — C2n-$) + С2п-7, С3 = (-2)(-2) + 1 или С3 = 2-3+(-1), ±2 = (±2)(±1) + 0 (имеется точно 2п — 1 делений). Можно задать алгоритм Евклида, требующий 2п—1 делений, из которых п—1 нецентрированных (записанных в виде а = qb + г): С2п = 3C2n-i + Сгп-2 (нецентрированное), С2п-\ = 2С2п-2 + (-С2п-з) (центрированное), Сгп-2 = (-3)(-С2п-з) + С2п-4 (нецентрированное), -С2п-г = (-2)С2п-4 + С2п-5 (центрированное), С2п-4 = ЗС2п-5 + С2п-б (нецентрированное), С2 = (±3)(±Ci) + Со Со = 0 (центрированное, остальное нулевое). Используя теорему Лазара, легко проверить, что первая или вторая последовательности оптимальны по длине. 45. (Неэффективное) решето Эратосфена для многочленов а. Пусть СггЫе{2 .. п) — последовательность булевых переменных со значениями «истинно». Решето Эратосфена останавливается на очередном значении г с Crible(i) истинным и вычеркивает все кратные г * j числа i (Crible(i * j) i— False), а затем повторяет эту процедуру для следующего г. Таким образом, про- for t in 2 .. п loop if Crible(i) then for j in t .. п/t loop Crible{i * j) i— False; end loop; end if; end loop;
Решения упражнений 297 стые числа от 2 до п в точности те г, для которых СггЫе{г) истинно. Ь. Пусть А — множество унитарных непостоянных многочленов над Z/pZn В — объединение UfcLii^} x [0>Р*[- Построим биективное отображение А на В следующим образом: если Р(Х) = Хк + а^-\Хк~1 + —\-а\Х+ао — многочлен из А (к ^ 1), то поставим ему в соответствие пару {k,ak-ipk~l Н haip-f a0) из В. for I in 0 .. Вп — 1 loop if Crible(i) then begin for j in t . Crible(<T end loop; . Bn-1 loop -1И0**О'))<- exception when Overflow =Ф end; end if; end loop; - False; null; Алгоритм 10. Решето Эратосфена Отобразим теперь В на N, сопоставляя паре {1} х [0, р[ отрезок [0, р[, паре {2}х[0,р2[отрезок [р,р+р2[итак далее. Если Вп = р+р2~\ Ьрп, то построим следующую биекцию В на N = [Во, Bi[U[B\, i?2[U[i?2, Вз[и • • •• Очевидно, Вп — число унитарных непостоянных многочленов степени ^ п. Пусть п — целое число, а — взаимнооднозначное отображение интервала [0,ВП[ на множество унитарных непостоянных многочленов степени ^ п. Теперь получаем алгоритм 10, в котором Q * R обозначает произведение многочленов Q и R (при помощи Overflow этот алгоритм игнорирует исключения, при которых deg(Q) + deg(R) > n). По окончании работы этого алгоритма определяются все неприводимые многочлены степени ^ п: это в точности те многочлены <т(г), для которых Crible(i) истинно. Разумеется, этот алгоритм неэффективен по времени и объему! Кроме того, он позволяет получить список неприводимых многочленов по модулю 2 степени ^10 или по модулю 3 степени ^ 8. d. Ниже приведен краткий список результатов, которые должна давать программа, реализующая предшествующий алгоритм: степень 2 : X2 + X + 1, степень 3 : Х3 + Х + 1, Х3 + Х2 + 1, степень 4 : Х4 + Х + 1, Х4 + Х3 + 1, Х4 + Х3 + Х2 + Х + 1,
298 II Евклид и основная теорема арифметики степень 5 : X5 + X2 + 1, Х5+Х3 + 1, Х5+Х3 + Х2 + Х + 1, Х5+Х4+Х2+Х + 1, Х*+Х* + Х* + Х + 1, Х5+Х4+Х3+Х2 + 1, степень 6 : X6 + X + 1, Х6 + Х3 + 1, Х6 + Х4 + Х2+Х + 1, Х6 + Х4 + Х3 + Х + 1, Х*+Х6 + 1, X6 + Xs + X2 + X + 1, Х6 + Х5 + Х3 + Х2 + 1, Х*+Х6+Х4 + Х + 1, X6 + Xs + X4 + X2 + 1., 46. Многочлены Хп — 1 а. Равенства {: xun+vm_, _ Г (ХиП - 1) - Xm+vm{X-vm - 1), еСЛИ II ^ О, V <С О, S {Хип - l)Xvm + (Xvm - 1), если и ^ 0, v > О, доказывают, что Xd — 1 — линейная комбинация Хп — 1 и Хт — 1. Для доказательства первой части упражнения заметим, что d положительно и меньше п и т, а поэтому d = tm + vm с, например, u ^ О, v ^ 0. Наконец, d делит п и т, а потому Xd — 1 делит Хп — 1 и Хт — 1. Чтобы перейти к произвольному кольцу, достаточно повторить для него предыдущие рассуждения. b. Конечно, нет: рассмотреть f{X) = X и д{Х) = X + 2. c. Хп - 1 mod Хт - 1 = Хп mod m - 1. 47. Неприводимые многочлены над Ъ Для Р/с осуществим замену переменных X -> X + 1 и получим Pfc(X +1) = 2 + 5^t-=1 (2t. )Х\ Теперь можно применить критерий Эйзенштейна. Заметим, что Р* — это циклотомический многочлен Ф2*+1 РО; в самом деле, для корня а многочлена Р* проверяется, что а2 = — 1, а2 +1 = 1. Значения Р*(2) — это числа Ферма, числа, из которых только 5 считаются простыми. Для Qn можно также применить критерий Эйзенштейна или доказать их неприводимость непосредственно (что сводится к изменению доказательства критерия в данном конкретном случае). Предположим, что Qn = {арХ*> + • • • + а0){ЬгХг + • • • + 60). Тогда ао или &о равно 2; допустим, что это ао. Теперь без труда доказывается (используя то, что разложение нетривиально), что все а,- четные,
Решения упражнений 299 а это противоречит тому, что коэффициент при старшем члене многочлена Qn есть 1. Замечание, аналогичное предыдущему: многочлены Хп — 1 не являются неприводимыми, хотя самые большие известные простые числа — числа вида 2П — 1 (числа Мерсенна). 48. Оценка числа неприводимых множителей a. Запишем Хп - а = (ЬЯХ<* + • • • + Ь0)(сгХг + • • • + с0) с q > О, г > 0. Нетрудно показать, что р делит все 6, или все с,, а это противоречит тому, что коэффициент при старшем члене у произведения равен 1 (можно также применить критерий Эйзенштейна). b. Пусть Q = bqXq + Ь 60 с q < п — делитель Р. А/1[Х] — область целостности (так как / — простой) и в нем апХп = {ЬЯХ* + • • • + Ь0){сгХг + • • • + скХк), с к < п и Ck Ф 0. Однако из а* = 0 = Ь0Ск следует, что 60 = 0, т.е. в А б0е/. c. Применим результаты предыдущего пункта с I = (р): всякий делитель Р имеет свободный член, кратный р, и, следовательно, если г — число неприводимых сомножителей Р, то рт \а§. 49. Неприводимый многочлен, приводимый по модулю всякого простого числа а. Для р = 2 можно проверить, что X4 + 1 = (X + I)4 в Ъ/2Ъ[Х]. с. Если р = 1 (mod 4), то —1 есть квадрат по модулю р и X4 + 1 = {X2 + V=1){X2 - v^), в Z/pZ[X], у/—\ обозначает квадратный корень из —1 по модулю р. Также, если 2 — квадрат (квадратичный вычет) по модулю р, то X4 + 1 = (Х2 + у/2Х + 1)(Х2 — \/2.Х + 1) и, конечно, если —2 квадратичный вычет по модулю р, то X4 + 1 = (X2 + л/^2Х - 1)(Х2 - v^* - 1). Однако одно из трех чисел —1,2, —2, наверняка, квадрат по модулю р: действительно, если —1 и 2 не-квадраты, то таковым является — 2 = — 1 х 2. Которое из этих чисел квадрат, можно узнать с помощью следующих критериев: -1 квадрат <=> р = 1 (4), 2 квадрат <$=> р = ±1 (8), —2 квадрат <=> р = 1 или 3 (4).
300 II Евклид и основная теорема арифметики Приводим несколько примеров: X4 + 1 = {X2 - 2){Х2 + 2) (mod 5), X4 + 1 = (X2 + ЪХ + 1)(Х2 - ЪХ + 1) (mod 23), X4 + 1 = {X2 + iX + 1){Х2 -ЗХ + 1) (mod 11). d. Сравнение — 1 = 72 (mod 25) дает разложение: X4 + 1 = {X2 + 7) х (X2 - 7) (mod 25). Если рассмотреть разложение X4 +1 по модулю 15 в произведение двух унитарных непостоянных многочленов X4 + 1 = P(X)Q(X) (mod 15), то легко проверить, что X4 + 1 = (X2 + 2)(Х2 - 2) в Z/5Z[X], X4 + 1 = (X2 + X - 1)(Х2 - X - 1) в Z/ЗВД, последние — разложения на неприводимые элементы, а значит, имеем: Р{Х) = X2 + 2 (mod 5), Q(X) = X2 - 2 (mod 5) и Р(Х) = X2 + X + 1 (mod 3), Q(X) = X2 - X + 1 (mod 3) (14) или P(X) =X2 -X + 1 (mod 3), Q{X) = X2 + X + 1 (mod 3). (15) Между тем, многочлены P0(X) = X2 + 10X + 7 и QoPO = *2 + 5X +13 удовлетворяют (14), откуда в силу единственности Р(Х) = РоРО (mod 15) и Q{X) = Qo(X) (mod 15). Аналогично, многочлены Р\(Х) = Х2 + 5Х + 7 и Q\{X) = Х2 + 10Х + 13 удовлетворяют (15) и, следовательно, Р(Х) = Pi(X) (mod 15) и Q(X) = Qi(X) (mod 15). Однако, можно проверить, что ни PoQo5 ни P\Q\ не равны X4 + 1 по модулю 15... 50. Нули многочленов с целыми коэффициентами a. Запишем 0 = а0 + Y^!iZ\ а* {р/яУ + {р/я)п • Освобождаясь от знаменателя, получаем 0 = рп + ]С о.%Р%Яп~х + aotfn • Отсюда получаем сначала, что (/ делит р, что приводит к g = 1, а потом, что р делит а0. b. Как и ранее, приходим к выражению 0 = апрп +Yl?=i сцр%Яп~% + аоЯп j нто доказывает (ри я взаимно просты), что р \ ао и я | вп- Это позволяет "находить" все рациональные корни многочлена, так как число делителей а0 и ап конечно. При необходимости это позволяет частично обосновать примитивность Р.
Решения упражнений 301 51. Расширенный критерий Эйзенштейна a. Рассмотрим разложение Р в произведение неприводимых многочленов. Так как р | а0 и р2 \ а0, то он делит свободный член лишь одного из неприводимых факторов, скажем Q = ^Ь{ХХ. В А/(р)[Х] имеем: апХп + • • • + акХк = {ЬЯХ<> + ... + 60)(сгХг + • • • + с0), и, по только что доказанному, 60 = 0, с0 ф 0. Раскрывая скобки и сравнивая, без труда получим, что все коэффициенты Q нулевые, за исключением коэффициента при к-и степени X. Следовательно, степень Q не меньше к. Следует также отметить, что свободный член рассмотренного неприводимого многочлена делится на р. Когда к равно п, степени многочлена Р, получаем критерий Эйзенштейна. b. Если Р разложим, то он может быть записан в одной из форм (так как ни 5, ни —5 не являются его корнями): Р = X4 + ЗХ3 + ЗХ2 — 5 = (X2 + аХ ± Ъ){Х2 -f ЬХ =р 1). Это приводит к системе уравнений а + 6 = 3иа — 56 = 0, которая не имеет целых решений. Следовательно, Р неприводим. Что касается многочлена Q, то в зависимости от четности а возможны два случая. Если а четно, то сразу можно применить критерий Эйзенштейна и Q неприводим. Если а нечетно и Q разложим, то один из его неприводимых множителей имеет степень, не меньшую 2, и его свободный член делится на 2. Если Q имеет целый корень, то, следовательно, это может быть только 1 или —1; действительно, при а = — 3 имеем Q = (X—1)(5Х3— Х2+2Х—2), а при а = 17 Q = (Х + 1)(5Х3— Х2+2Х—2). Во всех оставшихся случаях Q может разлагаться только в произведение двух многочленов степени 2. Запишем Q = (ЬХ2 + сХ±2)(dX2 + eX ±1) с четными сие, откуда достаточно быстро приходим к противоречию. 52. Неприводимость циклотомических многочленов а. Запишем Хп — 1 = PQ и предположим, что Р(ар) ф 0. Тогда Q(ap) = 0, и, следовательно, многочлен Q{XP) имеет корень а. Тогда а — корень НОД(Р,(?(Хр)). Но Р неприводим, а значит Р \ Q(XP). Перейдем к Ъ/рЪ[Х]. В этом кольце имеем формальное тождество Q(XP) = Q(X)P. Если тг — неприводимый делитель Р, то тг также неприводимый делитель Q, а значит, 7г2 делит Хп — 1 в Z/pZ[X], что невозможно, так как Хп — 1 не имеет кратных множителей даже в Ъ/рЩХ]
302 II Евклид и основная теорема арифметики (рассмотреть для доказательства производную Хп — 1 и учесть, что р\ п). Полученное противоречие показывает, что ар корень Р. Ь. Пусть Р — неприводимый множитель Фп. Тогда он обращается в нуль на некотором примитивном корне из 1 степени п, а значит, и на всех остальных тоже. Действительно, пусть а — примитивный корень, тогда все остальные примитивные корни имеют вид ак с НОД(&, п) = 1. Следовательно, Р = Фп. 53. Идеалы в К[[Х]] Всякий формальный ряд, свободный член которого ненулевой, обратим и, следовательно, порождает /f[[X]]. Свободные идеалы #[[X]] состоят из формальных рядов с нулевым свободным членом. Пусть / идеал в -К[[^]] и / Е / многочлен с наименьшим среди многочленов / показателем п таким, что / = Хп J2 а%Хх с а^ ф 0. Тогда / Е (-^п) и, соответственно, Хп Е /. Следовательно, / = (Хп)- Итак, идеал из Й"[[Х]] исчерпываются идеалами {0}, (X), (X2), ..., (Хп), ... и К[[Х]}. 54. О факториальных кольцах a. Отображение (р, о котором идет речь, с одной стороны, биективно, а с другой стороны, является морфизмом (моноидов): <р(сс'.,у + у') = <р(с,у)<р(с,,у'). В частности, любой элемент а Е А — {0} единственным образом записывается в виде с(а) Ylpev PVp^ и а | 6 эквивалентно тому, что ур{а) ^ vp(b) для всякого р Е V. Любая теория делимости в А может быть сведена к вычислениям в f$(v\ Например, проверим, что d = П«eVpmm(vp(a)*vp(b)) является НОД(а,6). Действительно, если заданы v,w E f$(v\ то множество U = т\п(ур, wp)pe-p — наибольшее со свойством ир ^ vp и ир ^ wp для любого р Е V. Поэтому и множество главных идеалов нетерово по включению, так как Аа С АЬ эквивалентно у (а) ^ t;(6), a f$(v) нетерово по отношению к упорядочению ^ (отображение, которое каждому v E N^) ставит в соответствие J2P vp € ^, строго возрастает). Отметим, что отображение <р устанавливает изоморфизм группы U(А) х Z^) на К" {К — поле частных А). b. Данные свойства делимости в факториальных кольцах сводятся к вычислениям в N. Например, с НОД(а, 6) = НОД(са,с6) сводится к проверке равенства 7 + min(a, /3) = min(7 + a, 7 + fi) > которое очевидно. В кольцах главных идеалов эти свойства можно проверять, опираясь на соотношения Безу: например, если Ad = Аа+АЬ, то Acd = Аса+АсЬ ...
Решения упражнений 303 с. Единственная нетривиальная импликация заключается в доказательства того, что если два элемента имеют НОД, то любой неприводимый элемент р прост: если а и 6 такие, что р | аб, то нужно доказать, что р делит а или Ь. Рассмотрим для этого НОД d элементов ар и ab (НОД существует по предположению). Элементы р и а делят ар и ab и, следовательно, р | d и а \ d. Поэтому элемент d/a определен и делит р (ибо d | ар). Так как р неприводим, то 1 ~ d/a, а тогда d ~ а => р \ а или р ~ d/a и в этом случае ар ~ d => ap | ab => р | Ь. 55. Условия, при которых факториальное кольцо является кольцом главных идеалов a. Пусть Р — простой идеал А. Так как нужно доказать, что Р главный, то можно считать, что Р ф {0} и Р ф А. Пусть х G Р — {0}, х необратим и записывается в виде произведения неприводимых х = р\.. .р*. Идеал Р простой, а поэтому содержит один из р%: (р,) С Р. В силу максимальности идеала (р,) получаем необходимое утверждение. Докажем, что Ax/d+Ay/d = А. Предположим, что Axjd+Ayjd С А, тогда идеал Ax/d-\-Ay/d содержится в некотором максимальном идеале (теорема Крулля), а следовательно, в простом и главном, скажем Ар. Тогда элемент р делит как x/rf, так и y/rf, которые взаимно просты — противоречие! Значит Ax/d + Ay/d = А и Ах + Ay = Ad. Теперь ясно, что всякий конечно порожденный идеал — главный. Но так как А факториально, то множество главных идеалов А нётерово. Кольцо, в котором множество конечно порожденных идеалов нётерово (по включению), само нётерово (наличие неконечнопорожденного идеала позволяет построить строго возрастающую последовательность конечно порожденных идеалов). Так как всякий конечно порожденный идеал А главный, то А — кольцо главных идеалов. b. Пусть х и у — два элемента А. Если d = НОД(х,у), то x/d и y/d взаимно просты, и следовательно, 1 Е Ax/d + Ay/d, откуда Ах + Ay = Ad. Отсюда следует искомое утверждение (действительно, если выполняется пункт (Ь), то выполняется и (а)). c. Для доказательства рассмотрим следующие умножения у »-> ху: эти отображения инъективны при х ф 0 и биективны в силу конечности. Рассмотрим последний случай (самый сложный). Пусть х 6 R—{0}, по предположению К[х] Э у »->• ху 6 К[х] инъективно, но это отображение i^-линейно и К[х] — конечномерно (так как х алгебраичен над К), а, стало быть, сюръективно, и существует такой элемент х', что
304 II Евклид и основная теорема арифметики хх' = 1. Аналогично, существует х" с х"х = 1, но известно, что в таком случае х' = х". Так как всякий элемент х обратим в Л, то Л — поле. d. Можно считать, что А не является полем. Идеал /nZ — простой идеал в Z, и осталось доказать, что он ненулевой. / содержит ненулевой элемент х, и х является корнем унитарного многочлена ^сцХ% с целыми коэффициентами, причем можно считать, что его степень не ниже п. Тогда ао ф 0 (иначе после вынесения х получили бы унитарный многочлен с целыми коэффициентами степени < п), и поэтому а0 = — Ya=\ а*х% € ^HZ. Значит, идеал /OZ ненулевой и имеет вид pZ. Инъективное отображение Z —> А определяет инъекцию Z//OZ —> А/1 и алгебра А/1 является алгеброй над полем Z/pZ, а так как она без делителей нуля и алгебраическая над Z/pZ, то является полем по предыдущему пункту. Тогда / — максимальный идеал. 56. Произведение упорядоченных нётеровых множеств a. Достаточно это сделать для двух упорядоченных множеств, что не вызывает особых проблем. b. Если Е = {0,1}, то упорядоченное множество EN изоморфно множеству всех подмножеств N с отношением вложения (при помощи характеристической функции: \а ^ Хв тогда и только тогда, когда А С В). Рассматриваемое подпространство 5 образовано конечными подмножествами или конечными дополнениями и, очевидно, не нётерово: 0 С {0} С {0,1} С {0,1,2} С ... В общем случае для сравнимых между собой а,Ь € Е с а < Ь, например, имеется строго возрастающая последовательность в подпространстве 5: (а, а, а, а, а, а,...) < (а, 6, а, а, а, а,...) < < (а, 6, 6, а, а, а,...) < (а, 6, 6, 6, а, а,...) < • •, которая доказывает, что 5 не нётерово, a EN тем более. c. Доказательство аналогично доказательству, касающемуся А[Х] (стр. 233). d. Если Ем — упорядоченное по включению множество идеалов из М, то, как показано в курсе, имеется строго возрастающее отображение Ем в En x Em/n- Впрочем, отображение, которое идеалу / кольца А[Х] ставит в соответствие domn(/)n6N Е £^[, — строго возрастающее отображение со значениями в множестве возрастающих последовательностей идеалов.
Решения упражнений 305 57. Конечные (коммутативные) поля a. Для доказательства первой части использовать то, что фактор- кольцами Ъ без делителей нуля являются лишь Z/pZ, где р — простое, и само Ъ. Для доказательства второй части заметим, что включение К С К' наделяет К' структурой векторного пространства над К (азначит, \К'\ = |/£|dim*K ). Коммутативность не использовалась. b. Отметим сначала, что корни многочлена Xя — X простые, так как его производная —1! Для первой части, если К поле из q элементов, то К* — мультипликативная группа, состоящая из q — 1 элементов, откуда хя~1 = 1 для всякого х G К*, а стало быть, xq = x для любого х G К. Иначе говоря, К содержится среди корней многочлена Xя — X и, следовательно, совпадает с этим множеством из соображений порядка. Все корни многочлена Xя — X лежат в К, а следовательно, и в П. Это доказывает единственность в П поля из q элементов. Обратно, предположим, что корни Xя — X содержатся в П. Так как они различны, то их точно q. Обозначим через <т : П —> П отображение, задаваемое как <т(х) = хр. Так как (х+у)р = хр+ур, то а — изоморфизм Q на себя. Если q = pn, то отображение гл^а;9, равное <тп, также изоморфизм. Отсюда следует, что ¥q подполе П с q элементами. c. Если К.С Н С К', то \Н\ — степень числа |АГ| и \К'\ — степень числа |#|, а значит, Н — поле из qd элементов с d \ п. Обратно, если cf | п, то все корни многочлена Xя — X лежат в К' (поскольку он делит многочлен Xя — X, чьи корни образуют К') и, следовательно, {х G К' | хя = х] — промежуточное поле из qd элементов. Отображение, которое делителю d числа п ставит в соответствие поле Fqd = {x G К' \ хр = х}, является изоморфизмом упорядоченных множеств в том смысле, что d\ \ g^ эквивалентно Fqd1 С Fgd2. Обозначим через т изоморфизм х *-> хя. Тогда: т°(х) = хи тг(х) = х <=> гнод(''г)(х) = х (рассмотреть соотношение Безу между НОД(«,г), г, s). Этого достаточно, чтобы ответить на последний вопрос. d. Так как \К'\ = рп, то многочлен ХрП — X обнуляется на К' и можно рассмотреть многочлен Q = (Хр — Х)/Р (по теореме 35 многочлен Р делит ХрП — X). Так как degQ < pn, то существует у G К' такой, что Q{y) ф 0, и тогда у — корень Р. Оставшаяся часть вопроса затруднений не представляет. e. Ясно, что тп = Idtf/; обратно, если тт = Id#/, то множество К' порядка qn содержится в множестве корней многочлена Х4™ — X и, 20-1017
306 II Евклид и основная теорема арифметики значит, п ^ т. Так как К' изоморфно полю FP[X]/(Q), то существует х 6 К', который образует К' над Fp, а тем более над К, т.е. К' = К[х]. Элементы х, г(х),..., тп~1(х) — это все различные корни минимального многочлена Р элемента х над К. Автоморфизм <т, постоянный над К, не изменяет и коэффициенты Р, а следовательно, переводит х, корень Р, в другой корень г'(х). Так как морфизмы г* и а совпадают на х, то они совпадают всюду. 58. Уравнение хр = х в локальном кольце характеристики р a. Существуют такие у и z, что 1 — ху Е /, 1 — xz 6 J. Тогда (1 — ху)(1 — xz) = 1 — х(у + z — xyz) G /J, что доказывает обратимость х по модулю IJ. b. Перепишем уравнение x{xq~l — 1) = 0 (mod /n). Если х € /, то Xя'1 6 / и 1 — Xя'1 £ I (в противном случае сумма хя~1 и 1 - х9"1, равная 1, принадлежала бы /). Так как / максимален, то 1 — хя~1 обратим по модулю /, а, следовательно, и по модулю 1п и х = 0 (mod /n). Напротив, если х £ /, то х обратим по модулю / и /п, а значит, хя~1 = 1 (mod/n). c. Так как q — степень характеристики р, то отображение х —> хя есть морфизм алгебр и, следовательно, S\nSn — подалгебры, очевидно удовлетворяющие ir(Sn) С S\. Осталось доказать, что если х является решением Xя = X (mod /n), удовлетворяющим х = 0 (mod /), то х = 0 (mod /n). Но это следует из пункта Ь. d. Так как а = 0 (mod /), то существует такое г, что для j > i aqJ = 0 (mod /n). Положим s = a + ая + ая + (-а9'. Ясно, что s6/, _ _2 i+1 i + 1 а кроме того, sq = ая + ая -\ \-ая , откуда sq = s — а + ая = s-a (mod/n). Доказательство того, что 7г(5„) = S\ сводится к доказательству того, что решение хя = х (mod /) "продолжается" до решения у по модулю /п, т.е. существует х = у (mod I) и уя = у (mod /n). Применим предыдущее рассуждение при а = хя — х (которое лежит в /) и получим элемент s Е / такой, что s — sq = хя — х (mod /n), но это можно переписать в виде х + s = (х + s)q (mod /n) и взять у = х + s. e. Если 7Г : А/1п —> А/1, то Кегтг = 1/1п — максимальный идеал в А/1п\ если J — максимальный идеал в А, содержащий /п, то он содержит / и, следовательно, J = I. Поэтому 1/1п — единственный максимальный идеал в В. Используя то, что В — локальное кольцо, легко доказать, что xq = х в В эквивалентно х = 0 или xq~l = 1. Чтобы получить конечный результат, нужно предположить, что некоторая степень М равна нулю (в случае, когда М = 1/1п, имеем Мп = 0).
Глава III Модули над кольцами главных идеалов В этой и следующих главах факторгруппа Z/nZ будет довольно часто появляться по очевидным причинам для представления (Z/180Z ~ Ъ/22Ъ х Ъ/Ъ2Ъ х Ъ/ЪЪ). Необходимо упрощение описания: обозначение Ъп — не всегда, в действительности, традиционное — отведено при простом п для кольца частных из Ъ со знаменателем из Z — пЪ. При необходимости, во избежание путаницы, оно будет дополнительно оговорено. Для студента — математика теория модулей над кольцами главных идеалов (с классификацией через инвариантные множители) часто воспринимается как трудная: формулировки результатов кажутся заумными, а доказательства слишком техничными. В этом введении абелева группаЪпхЪтявляется простой изучаемой моделью, которая позволит нам попытаться разобраться в этой теории. Основным инструментом в теории модулей является соотношение Безу: можно сказать, что любая теория «основывается» на умении пользоваться этим соотношением. Но начнем с начала. Любой студент математического факультета второго курса университета слышал о китайской теореме: (1) Китайская теорема об остатках (нулевая или минимальная форма). Если пит — два взаимно простых целых числа, то абелевы группы Ъи х Ът и Ъпт изоморфны. Читатель, интересующийся историей китайской теоремы, может обратиться к работе Диксона «History of the theory of numbers» или к работе Марцлоффа «Histoire des mathematiques chinoises»; из последней можно узнать, что в «Суан-Шины» китайский классик арифметики Сунь Цу, живший в первом веке нашей эры, формулирует в форме туманной 20*
308 III Модули над кольцами главных идеалов поэмы: «... gave in the form of an obscure verse a rule called t'ai-yen (great generalisation) to determine a number having the remainders... И правило определения числа, имеющего остатками 2,3,2, соответственно, при делении на 3, 5, 7, что приводит к числу 23. Связь между этой проблемой и абстрактной формулировкой китайской теоремы объясняется далее. Рибенбойм в книге «The Book of Prime Number Records» указывает также, что эта теорема позволяла китайским генералам пересчитать свою армию без особых усилий, распоряжаясь: «выстраивайтесь в ряд 7 за 7 (по 7), затем 11 за 11, затем 13 за 13 и, наконец, 17 за 17». Если эта история верна, то можно вывести максимальное число солдат в армии и даже насколько велико было оживление во время пересчета, но это уже другая история. Китайская теорема может быть сформулирована в другом, более точном, виде, где появляется изоморфизм: (2) Китайская теорема об остатках (форма 1). Если пит — два взаимно простых целых числа, то отображение %nm Э xnm н-). (xn,xm) G Zn x Zm, где xn обозначает класс x G Z no модулю п, является корректно определенным изоморфизмом групп. В действительности, это изоморфизм колец. Можно дать китайской теореме простую формулировку, в которой нет ни групп, ни изоморфизмов: (3) Китайская теорема об остатках (форма 2). Пусть пит — два взаимно простых целых числа; для данных целых чисел у, z система <?f., И • /ХЕЕу (modn)> byy>z> • \x = z (modm) имеет решение х G Ъ; кроме того, х' G Ъ будет другим решением тогда и только тогда, когда х = х' (mod nm). Эта последняя формулировка, более точная, чем предыдущая, содержит следующую структурную информацию: решение х по модулю nm аддитивно и мультипликативно зависит от двух данных значений У и z. Благодаря этой формулировке приходим к загадке: «я выбрал число не более, чем из двух цифр; при делении этого числа на 9 и на 11 получил соответственно остатки 4 и 8; можете ли вы мне сказать какое это число?», математик может ответить в стиле, достойном Пьера Дака и Франциса Бланша: «да, я могу его назвать; более 1«... дано в виде туманного стиха правило, называемое тай-йен (великое обобщение), нахождения числа, имеющего остатки...»
Ill Модули над кольцами главных идеалов 309 того, я могу сказать, что такое число, имеющее самое большее две цифры, единственно]». Благодаря этой тираде, читатель уже понял, что формулировки китайской теоремы, приведенные выше, недостаточны для эффективного решения системы S(y,z). Это решение, связанное с умением выразить в явном виде обратимость изоморфизма %пт Э хпт —> (xn, хт) G Zn х Ът, задает, впрочем, соотношение Безу, которое нам известно из главы II. Действительно, начиная с соотношения Безу для пит: 1 = un + vm, легко выделить системы: Г vm = 1 (mod n), Г un = 0 (mod n), \ vm = 0 (mod m) \ un = 1 (mod m). В других терминах, vm — решение системы 5(1,0) и un — решение системы 5(0,1); в силу линейности, в чем читатель может убедиться сам, х = yvm + zun — решение системы S(y, z). Таким образом, для п = 9, т = 11 имеет место соотношение Безу 1 = 5x9-}- (—4) х 11, которое представляет число х = 4 х (—44)+ +8 х 45 = 184 как решение системы 5(4,8); это решение может быть приведено по модулю 9 х 11 = 99; и получим число 85 как ответ на загадку, приведенную выше. Китайская теорема является частным случаем применения теории инвариантных множителей: если пит взаимно просты, число пт полностью определяет структуру группы Zn x Zm. Таким образом, если п' и т! также взаимно просты, то: Zn х Zm ~ ЪП1 х Zm/ <=> пт = п'т'. Нас сейчас интересует структура абелевой группы Ъп х Zm для произвольных пит (не обязательно взаимно простых и, возможно, нулевых). Как, например, эффективно решить вопрос о существовании изоморфизма между Ъп х Z т и Zn' х Zm'? Первая часть ответа на этот вопрос заключается в следующей теореме, следствии из китайской теоремы, т.е. в следствии из соотношения Безу. (4) Структурная теорема (нормализованная форма произведения двух циклических групп). Если пит — два целых числа, то существует изоморфизм групп Ъп х Ът и Ъпьт х Ъпут; запись n Am обозначает наибольший общий делитель mnn;nWm — наименьшее общее кратное. Если пит взаимно просты, то абелевы группы Ъп х Zm и Znm изоморфны.
310 III Модули над кольцами главных идеалов Доказательство. I Разложим п (соответственно т) в произведение простых чисел (используя нулевые показатели, чтобы в записи фигурировали все необходимые начальные простые числа): (pi простые числа). Тогда имеют место изоморфизмы: Zn ~ ZD-i x Z «2 x ... х Z «fc, Zffl~ZftXbax...xZ^ и, как следствие, группа Ъп х Zm изоморфна Z 1пЦац,0х) X Z inf(o2.^2) X ...XZ inf(afc,0fc) Pi F2 Pfc X £L* Bup(aii,fii) X ^ шир(ог2<^2) X ... X ^ iop(a^ »/*fc) ) Pi P2 Pfc |_т.е. она изоморфна группе ZnAm x ZnVm- В разделе 2.3 мы докажем, что среди всех групп Ъп> х Zm/, изоморфных данной группе Ъп xZm, существует единственная группа, для которой п' делит т', и эта группа ZnAm x ZnVm- Покажем, как этот результат может служить для определения группы Ъп х Ът\ рассмотрим, например, п = 180 = 22 • З2 • 5 и m = 600 = 23 • 3 • 52: Ziso ^ Z22 х Z32 х Z5, Z6oo ^ %2* xZ3x Z52, и, следовательно, Ziso х 2боо изоморфна 222ХзХ5 х 22зхз2Х52) те- группе 2бо х Zisoo- Если мы проделаем аналогичную операцию для чисел п = 360 и m = 300, то мы найдем ^зво х Z300 — ^60 х ^leoo- Абелевы группы Zieo х 2боо и 2збо х Z300 имеют порядок 108 000, и, следовательно, они изоморфны, так как они обе изоморфны группе ^бо х Zisoo- И напоследок, применяя ту же операцию к группе Z240 x ^450> имеющей тот же порядок 108 000, получаем Z240 x Z450 — ^зо х ^звоо с 30 | 3 600, и в силу единственности, последняя группа Z240 x Z450 не будет изоморфна предыдущим. Внимательный читатель может заметить, что в структурной теореме, приведенной выше, явный вид изоморфизма между Z„ x Ът и ZnAm х ZnVm не виден. Чтобы успокоить читателя, отметим, что он появится позже.
Ill—1 Исключение и несколько следствий 311 1 Исключение и несколько следствий В этом разделе мы покажем как рабочие «инструменты» для изучения приведения к каноническому виду матриц с целыми элементами, так и первые приложения, одни из которых имеют абстрактный характер (модуль без кручения конечного типа), а другие — конкретный (вычисление определителей). Напомним, что квадратная матрица обратима тогда и только тогда, когда ее определитель обратим в кольце ее элементов. Кольцо предполагается коммутативным и с единицей. Будем использовать следующие обозначения: • M(n,m, А) и МП}ГП(А) для модуля матриц размеров п х т с элементами из кольца А, • М(т, А) и Мт(А) для кольца матриц размеров тхт с элементами из кольца Д • GL(m, А) и GLm(A) для группы матриц размеров тхт с элементами из кольца А и обратимых в Мт(Л), • SL(m, А) и SLm(A) для подгруппы группы GLm(A), состоящей из матриц с определителем 1. 1.1 Операции над строками и столбцами матрицы Пусть даны два индекса j и к и четыре элемента а, /?, 7> & из кольца; обозначим через (Zf).. квадратную матрицу, описанную ниже. По контексту понятно, как определить размеры этой квадратной матрицы. Определим матрицу ("f). ) а 7 а 7 а 1 /? 8 /? 6 Р 8 'jk (е/) = е, для// j,k, (е,) = aej +iek, /l О {" f) (е*) = ^+'е*' О а /? О о \о о о о 1/ семейство (е*)х^п обозначает, конечно, канонический базис. Напомним, что комбинирование строк (соответственно столбцов) матрицы эквивалентно умножению этой матрицы слева (соответственно справа) на некоторую матрицу.
312 111-Х Исключение и несколько следствий (5) Предложение. Определитель матрицы ("$).. равен aS — /?7- Пусть X — матрица размеров п х т, составленная из столбцов Х\, Х^) ..., Хт; j, k — два индекса столбцов. Тогда оператор, определенный на столбцах по правилу (Xjt Xk) <— (aXj +fXk, /3Xj +SXk), эквивалентен умножению справа на матрицу ("^). . Аналогичная комбинация со строками матрицы X эквивалентна умножению слева на матрицу Cj£)jfc. 1.2 Лемма исключения Следующая лемма является основным средством, позволяющим осуществить приведение матрицы с целыми элементами, и в более общем случае, с элементами в кольце главных идеалов. (6) Лемма. (г) Существует алгоритм, который, будучи применен к паре элементов (х,у) из Ъ, находит матрицу (" ^) из SL(2,Z) (т.е. с определителем 1), удовлетворяющую условию: ("?)(;)=(:) - (•»)(?!)■(••)• (1) в левосторонней форме матрица применяется к строке, а в правосторонней форме — к столбцу. (И) Если х делит у, матрица ("$) может быть выбрана в виде I , 1. Как следствие, чтобы привести вектор (*) к (*), достаточно прибавить ко второй строке несколько раз первую строку, не изменяя этой первой строки. Аналогичная формулировка верна и для столбцов. (iii) Какова бы ни была матрица размеров 2x2, принадлежащая GL(2, Z) и удовлетворяющая условию 1, первая компонента (обозначен-, нал * выше и равная ах + /Зу) является наибольшим общим делителем] чисел х и у. (iv) Эти результаты справедливы, если кольцо целых чисел заменять] на КГИ, в котором имеется алгоритм, позволяющий сосчитать коэф-1 фициенты Везу. Если кольцо с базой А предполагается только КГИ, то]
III-1.2 Лемма исключения 313 матрица (" $) ^ SL(2, А) существует, даже если ее нельзя эффективно вычислить. Доказательство. Если х = у = О, то достаточно выбрать ("$) = (JJ)- Итак, теперь можно предположить, что х и у не оба нули. Чтобы доказать (г), введем наибольший общий делитель z чисел х и у; z не нуль, и равенство Безу z = их + vy позволяет построить «магическую» матрицу (" $) = (_y/2 xlz)> котоРая удовлетворяет условию: {-y/z xV/z)(y)-[o)' и v -y/z x/z их + vy _ Чтобы доказать пункт (ш), достаточно заметить, что матрица будет обратимой, а х и у принадлежат идеалу, порожденному элементом * из формулы (1), и, обратно, последний принадлежит, очевидно, Ах -f Ау. Что касается пункта (iv), то установление наличия матрицы в основном базируется на существовании коэффициентов Безу и, следовательно, обобщается на любое КГИ. Сложность построения связана со сложностью вычисления коэффициентов Безу. Мы найдем алгоритм вычисления матрицы исключения в евклидовом кольце А. Пусть даны х, у Е А. Достаточно вычислить их коэффициенты Безу unv, затем z = ux + vy и, наконец, —y/z и x/z. Читатель, хорошо знакомый с алгоритмом вычисления коэффициентов Безу (глава II раздел 7.1), вспомнит, что этот алгоритм вычисляет величины z = их + vy и множители —y/z и x/z в локальных координатах. Легко изменяя этот алгоритм, можно получить алгоритм, который отвечает условиям леммы 6. Однако, чтобы гарантировать окончание этого алгоритма, нам необходим возрастающий евклидов алгоритм (см. упражнение 1). (7) Лемма и определение. (г) Пусть <р — евклидов алгоритм на кольце А, тогда отображение ф, определенное следующим образом: ф{0) = <р(0), ф(Ь) = min W(b'), Ь'€АЬ- {0}}, является евклидовым алгоритмом более малым, чем (р. Кроме того, ф — возрастающий, т.е. ф(а) ^ ф(Ь) как только a \ Ь и Ь ф 0. Это влечет, в частности, что ф{—а) = ф(а).
314 III-1 Исключение и несколько следствий (и) Если Ь делит а и Ь ф О, то, согласно возрастающему евклидову алгоритму, евклидово деление а на Ь дает в остатке нуль. Алгоритм (1) исключения в евклидовом кольце строит матрицу (а^) с определителем 1, удовлетворяющую условию: (; 0(;)■(;) ■•'»" - (;*)-(;:)• Доказательство (алгоритма исключения). Этот алгоритм заканчивается: действительно, внутри цикла т заменяется на — р + (р/т) * г, которое соответствует остатку от евклидова деления р на, т. Следовательно, Ч>{-Р + (р/т) *т) = <Р(р ~ (Р/Т) * т) < ¥>(г)> (р обозначает возрастающий евклидов алгоритм, основанный на евклидовом делении. Покажем, что алгоритм отвечает пункту (И) леммы 6 в случае х \ у. 1. Если у ф 0, то и х тоже не равен нулю; переменная т определена ненулевым значением х и на первом шаге подвергается преобразованию: (« /3 р\ ( 0 1\(0 -1 -у\ (1 0 х\ V7 S т) \-\ q)\\ 0 х) \q 1 у + qxJ ' где q — евклидово частное от деления —у на х. Так как примененный евклидов алгоритм возрастающий и х \ у, то остаток от деления у на х нулевой и получается немедленно из цикла с матрицей ( in)' что и тРеб°валось- Отметим, что существуют евклидовы деления — для возрастающих евклидовых алгоритмов — a = bq + г, в которых Ь делит а и г ф 0 (упражнение 1). 2. Наконец, если х = 0, то у тоже нуль (так как х \ у); цикл не пробе- /0 -1 0\ гается ни разу, результирующая матрица следующая: I n I — она не имеет желаемой формы. Конечно, случай х = у = 0 можно будет обнаружить в начале алгоритма и тогда ввести матрицу (J J), но на практике этот алгоритм применяется только в случае у ф 0, потому что его цель — правильно обнулить вторую компоненту вектора (*).
II1-1.3 Вычисление определителей 315 Помнит ли читатель наивный метод вычисления определителей, изученный в главе I, разделе 4.6, и время вычисления определителя матрицы размеров 11 х 11? Вот, основанный на лемме исключения, другой, более эффективный метод вычисления определителей в целых числах. function Elimination (x,y € A) return ( " J J € SL(2, A) is (a /3 p\ /0 -1 -y\ \7 * V V1 ° x) begin while r ^ 0 loop : Ь '= ■ m Ы^ктжж: h q <— р/т; $ттт/11!т^т:ШрШ!ш№ту алгоритму (a fi p\ f 0 l\(a -fi pV ^7 S t)*-\-1 q)\y 5 t)' end loop; return (^J; end Elimination; Алгоритм 1. Исключение в евклидовом кольце 1.3 Вычисление определителей Этот метод вычисления определителей основан на приведении матрицы к треугольной форме и описан в следующем предложении. (8) Предложение. Пусть X — п х п-матрица с элементами в кольце главных идеалов А. Тогда существует матрица L с определителем 1 такал, что матрица X' = LX будет треугольной, что позволяет вычислить det(X) через det(X') = х'п х £22 х ... х х'пп, к тому же вычисление X' опирается только на вычисление коэффициентов Безу в кольце А. Доказательство. I Пусть X' — переменная матричного типа размеров n x n с начальным значением X. Выполним на двух первых строках X1 операцию: WX')J \t s)\W)J-
316 III-1 Исключение и несколько следствий Элементы а, /3,1,6 были получены применением алгоритма исключения к двум первым элементам первого столбца матрицы X, путем обнуления х'21. Можно проделать такую операцию со строками 1 и 3, затем 1 и 4, ... , обнуляя последних п — 1 элементов столбца 1. Обнуляют затем п — 2 элементов столбца 2, п — 3 последних элементов столбца 3 и т.д., что приводит к следующему алгоритму: X' <— X; for jin 1 .. п — 1 loop for i in j' + 1 .. n loop Комбинирует xf$f№ft&; end loop; end loop; e индексами 0,ф«4ДОяг immm #^ Этот алгоритм строит матрицу X'', удовлетворяющую условию |__Х' = LX, где L — матрица с определителем 1. Вот иллюстративный пример для этого метода. 2 1 3 -1 -2 -1 -2 -1 Приведение 1 0 3 -1 1 0 0 0 -1 0 -2 -1 -1 -1 0 -2 det(X) 4 0 4 5 - .. Рычиплты* 6 7 8 -6 матрицы X 0 -4 4 5 0 -4 -4 5 = 4 7 8 8 -6 7 13 8 1 +-Х определителя А У 4- к треугольной 1 0 0 -1 1 0 0 0 -1 0 1 -1 -1 -1 0 0 форме 0 -4 4 - 5 0 -4 -4 13 - X' 7 8 -13 -6 7 13 8 -25 ■матршгы 1 0 0 0 1 0 0 0 -1 0 1 -2 -1 -1 0 0 0 -4 4 5 0 -4 1 0 7 8 -13 1 7 13 -1 -4 Этот метод позволяет получить результаты с более разумным временем вычисления: на микрокалькуляторе типа AT время вычисления определителя матрицы размеров 10 х 10 порядка 20 секунд (для наивного метода было нужно более часа вычислений). Наконец, чтобы убедиться в справедливости вычислений (никто не застрахован от оши-
111-1.4 Модули без кручения конечного типа 317 бок), мы вычислили снова определители Майе!: h*(p) = hi(p) = |det(XtJ)3^,>j^(p-i)/2|J Xij для простого р ^ 47 и сравнили полученные нами значения со значениями, встречающимися в литературе. Эти определители имеют большое значение в теории чисел. В действительности, существует целое положительное число, обозначаемое Л(р), которое измеряет степень неглав- ности кольца Ъ\%/Х\ целых циклотомических чисел: h(p) — число классов идеалов кольцаЪ\^/\\. Сказать, что это кольцо — КГИ, равнозначно тому, что h(p) = 1. Разумеется, можно разложить h(p) в произведение h(p) = hi(p)h2{p), где h\(p) и Лг(р) названы, соответственно, первым и вторым множителем числа классов Щ^/\]. Число fti(p), обозначаемое также h*(p) и h~(p) (число Лг(р) обозначается также Л+(р)), обладает следующим фундаментальным свойством: p\h*{p) <=> p\h[p), p\h* (p) => великая «теорема» Ферма истинна для показателя р, указанная теорема утверждает, что уравнение хр + у9 = zp не имеет целых строго положительных решений для простых р ^ 3. Интересующийся этим вопросом читатель может обратится к работе Рибенбойма [153], в которой фигурирует таблица чисел h*(p) для простых р ^ 163, вычисленная вручную Куммером во второй половине 19-ого века. Здесь найдено простое число р, для которого 7L\t/\\ не будет КГИ (р = 23), и простое нерегулярное число р, т.е. такое, что р делит h*(p) (p = 37). Эта таблица дает, в то же время, порядок размера чисел h*{p): например, Л*(149) = З2 х 149 х 512 966 338 320 040 805 461. 1.4 Модули без кручения конечного типа Вот другое более абстрактное применение леммы исключения. (9) Предложение. Пусть М — А-модуль конечного типа, т.е. порожденный конечным числом образующих, и без кручения (т.е. для a 6 А, х 6 X, ах = 0 => а = 0 или х = 0) над КГИ А. Обозначим через р(М) минимальное число элементов в системе образующих М. Тогда (г) любая порождающая М система элементов, имеющая р(М) элементов, свободна, (И) в частности, М свободен. (»-Ш
318 III-1 Исключение и несколько следствий Отметим, что минимальная система образующих необязательно является системой с минимальным числом элементов. Рассмотрите, например, минимальную систему образующих (2,3) в Ъ. (10) Лемма. Пусть А — кольцо главных идеалов, х\, хъ, ..., хп — п элементов А-модуля М', ai, a2, ..., an — п элементов кольца А. Тогда существуют х[, х'2) ..., х'п в М, удовлетворяющие условию: Axi + Ах2 + • • • + Ахп = Ах[ + Ах'2 + • • • + Ах'п и aixi + a2x2 + Ь anxn = dx[, d £ А обозначает НОД элементов a\, a2, ..., an. Доказательство. I В силу индукции достаточно рассмотреть лемму для п = 2; по лемме исключения существует матрица (" ^) 6 SL(2, А), удовлетворяющая условию: (<* 0)(° J) = («i о,), d — НОД(а1, а2). Достаточно определить х[, х2 6 М: Й)-(;?)(::)■ Это равенство можно преобразовать (матрица обратима), доказав, что Ах\ + Ах2 = Ax'j + Ax2. Тогда имеют место равенства: а1х1+а2х2 = (а1 a2)(**j=(<4 a2)(° £j (*>) = (d о)(*})=«/«;, |_что и требовалось доказать. Доказательство предложения 9 Пусть {xi,X2,.. .,хп} порождающее подмножество модуля М, состоящее из п = /?(М) элементов. Рассмотрим соотношение зависимости aixi + ^2^2 + Ь fln^n = 0. Докажем, что все а* нулевые, и, как следствие, что {х\,х2,.. . ,хп} — базис М.
II1-2 Нормальная форма подгруппы группы Zn 319 В силу предыдущей леммы существует семейство образующих {x'^Xj, - ухп} в М такое, что dx[ = О, d — наибольший общий делитель ai, 02, ..., ап. Здесь х[ не нуль, иначе семейство {x'2l х'3,..., х'п} было бы семейством образующих, имеющим строго меньше, чем р(М) элементов. То, что М без кручения, влечет, что d — нуль, и, как следствие, что все а, нулевые. Это доказывает (г) и (гг). 2 Нормальная форма подгруппы группы Ъп Сейчас мы продемонстрируем более общие результаты,чем сформулированные (для Ъ2) во введении к этой главе и касающиеся представления в каноническом виде подгрупп Ъп. 2.1 Исследование подгруппы пЪ х raZ группы Z2 Целью наших действий в этом частном случае является стремление объяснить читателю некоторые составные части теории инвариантных множителей. Во введении мы установили существование изоморфизма между абелевыми группами Ъп х Ът и ZnAm x ZnVm; оно базировалось на разложении чисел п и m в произведение простых множителей, и в явном виде представлено на было; сделаем это сейчас. Основная идея состоит в том, чтобы сконцентрироваться на положении подгруппы пЪ х тЪ вЪхЪ, забыв ненадолго про произведение Zn х Ът. Важно убедиться, что группа n/L x тЪ изучена в окружающем пространстве ЪхЪ. Чтобы понять этот основной нюанс, рассмотрим две подгруппы 2Ъ х Ъъ ЪЪ х Ъ группы И?. Эти две подгруппы, очевидно, изоморфны, но между тем, не существует изоморфизма Ъ7, на себя, переводящего первую группу во вторую (почему?). Следующий результат, применимый к произведению двух циклических групп, является более общим и более конструктивным, чем результат, приведенный во введении. (11) Предложение. Пусть пит два целых числа, d = п Л т, р = nW т. Существует квадратная матрица L порядка 2 с целыми коэффициентами и с определителем 1, представляющая автоморфизм ЪхЪ и удовлетворяющая следующему условию: L(nL х тЖ) = d'Lxp'L. Кроме того, эта матрица легко выражается в явном виде.
320 111-2 Нормальная форма подгруппы группы Zn Доказательство. Отметим еще раз, что построение такой матрицы основано на соотношении Безу. Можно предположить, что одно из двух целых чисел п или т не нулевое; пусть d = ип + vm — отношение Безу и положим h = n/d и m = m/d при условии, что uh + vrh = 1, пт = тп = р. Матрица L = ( _ _ ), которая уже фигурировала в лемме исключения, — искомая: ее определитель, конечно, равен 1, и можно легко показать, что (с?, 0) и (0,р) принадлежат Ь{пЪ х тЪ), т.е. что rfZ x рЪ С Ь{пЪ х mZ). Можно также показать, что L{nL х mZ) С rfZ x pZ. Это доказывает равенство в |_формулировке предложения. (12) Следствие. Б соответствии с предыдущими обозначениями, матрица L = I _ . и обратная матрица L~l = ( _ 1 индуцируют изоморфизмы L из Zn х Zm в Z^ x Zp и L"1 из Z^ x Zp в Zn x Zm (каждая, соответственно). Можно еще улучшить предыдущие результаты: (d 0\_ (n -vp\_r(n 0\/l -vrh\_T(n 0\ \0 p)-L\m up)-L\0 m)\l uh)-L\0 m)H> где R= I _ ) — 2x2- матрица с целыми коэффициентами и с V 1 un J определителем 1. Как следствие имеем: (13) Предложение. Используя предыдущие обозначения, можно выразить в явном виде 2 х 2 - матрицы R и L с определителями 1, удовлетворяющие условию: (о р)=Х(о ш)Д' ГДе d**TP- Замечание. Раньше считали этот результат более сильным, чем предыдущие. В действительности же, интерпретируя nZ x mZ как образ диагональной матрицы ( о m ) полУчаем» что равенство матриц, объявленное в предложении 13, влечет равенство L(nZ х mZ) = dZ x pZ.
III-2.2 Изучение подгруппы а\Ъ х ... х апЪ группы Zn 321 Действительно, этот последний результат является частным случаем следующей более общей теоремы, которая будет доказана позже и которая ведет к классификации абелевых групп конечного типа. (14) Теорема. Пусть дана квадратная q x q-матрица А с целыми элементами. Можно предъявить две q х q-матрицы L и R с целыми элементами и с определителем 1 такие, что В = LAR будет диагональной матрицей и выполняется условие: Ьц | &22, ^22 | ^33, • • j bg_ig_i|6gg, и, как следствие, переходя к частному, Ъя/ Im А ~ ЪъХ1 х ^б22 х • • • х ^ь„. 2.2 Изучение подгруппы a<JL х ... х апЪ группы Ъп Этот параграф, посвященный изучению конечного произведения Zfll х Ъа2 х ... х Ъап циклических групп, должен позволить читателю близко познакомиться с понятием инвариантных множителей: как и в случае п = 2 в предыдущем разделе, мы будем изучать положение подгруппы а\Ъ х а^Ъ х ... х апЪ в группе Ъп. (15) Определения. (г) Две последовательности целых чисел (ai,a2,.. .,ап) и (61,62,.. .,6т) называются эквивалентными, если существует изоморфизм <р : Ъп —> Ът, переводящий подгруппу a\7L x a*{lL х ... х anZ в подгруппу b\Lx b*{IL х ... х ЬтЪ (это незамедлительно влечет равенство п = тп, как мы увидим в следствии 19). (гг) Последовательность целых чисел а\, аг,..., ап называется нормализованной, если ai | а2 | а3 | ... | an_i | ап. Если две последовательности целых чисел {a\, a2,..., an) и (61,62,..., 6m) эквивалентны, то n = m и — что больше всего нас интересует, — фаКТОргруППЫ Ъах X Ъа2 X • • X Ъап И Zbx X Ъъ2 X • • • X Zbm ИЗО- морфны. Достаточно перейти к частным для изоморфизма из пункта (г). Заметим, что при переходе к частным, каждое а,, равное 1 или — 1, соответствует тривиальному фактору Z/Z, который можно опустить. (16) Предложение. Существует алгоритм, который, будучи применен к последовательности целых чисел (ai, аг,..., an), строит нормализованную последовательность (6i, 62,..., 6П), эквивалентную исходной. 21-1017
322 111-2 Нормальная форма подгруппы группы Ъп В частности, для конечного произведения Ъах х Zfl2 x ••• х Zfln циклических групп изоморфизм с произведением Ъъх х Ъъ2 х • • -2^>т, где 6, — целые числа, отличные от 1 и — 1, и 6,- делят 6t+b может быть выражен в явном виде. function Normaliser(a € Zn) return 6 € Zn is 6 = (61,62,..., begin for t in 1 .. n bn) <— (01,02, • • - 1 loop | for j in t + 1 .. n loop (*>.Л)<- end loop; end loop; return (61,62, end Normalise!*; - (б.Лб^б.Уб,); ...,6„); • On) =a; Алгоритм 2. Нормализация последовательности целых чисел Доказательство. I Это доказательство основано на программной обработке, можно также обратиться к упражнению 18. Уточним сейчас, что используемый метод не основан на разложении целых чисел а, в произведение простых сомножителей: единственное, что используется, — это наибольший общий делитель Л и наименьшее общее кратное V. Пусть даны два индекса i < j; из результатов предыдущего раздела понятно, что: (аь.. . ,а,,.. .,Oj,...,an) ~ (аь.. .,а, Ла^,...,а,- V а,,.. .,ап), ~ символизирует эквивалентность последовательностей, фигурирующих в определении 15. Назовем Eij операцию, которая состоит в замене первой из этих последовательностей на вторую. Тогда ясно, что, если выполнить последовательно операции Е\ч, ^135 ^н, • • •, ^in, то получится последовательность а', эквивалентная исходной и удовлетворяющая, кроме того, условиям делимости а[ \ а'2, а[ \ а'3, ..., а[ \ а'п (действительно, а[ — НОД элементов исходной последовательности). Затем можно применить к подпоследовательности (а'2,а'3)... , aJJ операции Е2ъ, ^24, ••-, ^2п, после чего получим, очевидно, эквивалентную подпоследовательность, удовлетворяющую условию а2 I аз> а2 I а4> • • • > а2 I ап и> к тому же, а[ | а*2 (потому что а'*} | является НОД aj, каждое из которых делится на а[).
III-2.2 Изучение подгруппы а\Ъ х ... х апЪ группы Zn 323 Применяя п — 1 раз этот процесс (последней операцией будет En,n-i), получаем последовательность, эквивалентную начальной и нормализованную. Алгоритм 2 нормализации вытекает из этих рассуждений. Интерпретация на языке Ада, которая приводится ниже, основана не на функции, как в алгоритме, описанном выше, а на процедуре. Эта процедура имеет только один параметр типа in out. Цель этого алгоритма, кроме нормализации последовательностей целых чисел, построить след всего процесса нормализации. , Представление в нормализованном виде последовательности целых чисел with Text JO, GCD; use Text JO; procedure Normalization is type PrincipaLRing is new Long-Integer; package Principal-Ring J О is new Integer JO (Principal-Ring); use Principal-Ring JO; n : Natural; package NaturalJO is new Integer JO (Natural); use NaturalJO; type Module-Representation is array (Natural range <>) of Principal-Ring; function Ring-GCD is new GCD (Principal-Ring, 0); procedure Put (a : in Module-Representation; Width : in TextJO.Field := Principal-Ring'Width); procedure Trace-Normalization (b : in out Module-Representation) is begin for t in b'First .. b'Last — 1 loop Step-i : for j in t + 1 .. b'Last loop declare Ы : constant Principal-Ring := b(i); bj : constant Principal-Ring := b(j); GCD-bi-bj : constant Principal-Ring := Ring-GCD (bi, bj); begin b(i) := GCD.bLbj; if GCD-bLbj = 0 then b(j) := 0; else b(j) := (bi/GCDJbi-bj) * bj; end if; Put (b, 6); New-Line; end; end loop Step-i; end loop; end Trace-Normalization; procedure Put (a : in Module-Representation; Width : in TextJO.Field := Principal-Ring'Width) is begin for к in a'range loop Put (a(k), Width); end loop; end Put;
324 111-2 Нормальная форма подгруппы группы Ъп (Продолжение) procedure Get (а : out Module-Representation) is begin for к in a'range loop Get (a(k)); end loop; end Get; begin loop Put ("Ддина<_првдставлвнияи:1_|"Л' Get (n); declare a : Module-Representation (1 .. n); begin Put ("представление|_|:|_|"Л' ^e* (a)>' New-Line; Put-Line ("Данное|_представление|_|:|_|",); ^u* (а » *>)> New-Line; Put ("мПриввдвнив|_|:|_|"Л' New-Line; Trace-Normalization (a); New-Line; end; end loop; exception when Data-Error => null; end Normalization; Вот только несколько примеров применения предыдущей программы. Данное представление : 24 56 Приведение 8 168 8 168 4 168 4 24 4 8 4 8 48 : 48 48 48 336 336 24 100 100 100 200 200 600 8400 Данное представление : 12 0 Приведение 12 0 6 0 1 0 1 36 1 6 1 6 18 : 18 36 36 0 0 36 1 1 1 6 6 36 0 Данное представление 48 10 45 Приведение : 2 1 1 240 240 30 45 90 720 Данное представление 48 36 20 Приведение : 12 4 4 4 4 4 4 4 4 4 144 144 144 144 12 4 4 4 4 4 20 60 60 60 720 720 720 60 20 20 100 100 100 100 100 100 300 300 3600 3600 60 20 20 20 20 20 20 20 20 20 60 3600 А теперь выделим все основные понятия теории инвариантных мно-
II 1-2.3 Единственность нормального разложения 325 жителей: матрицы с целыми коэффициентами, подгруппы образов, факторгруппы Zq/lmA, нормализованные формы... 2.3 Единственность нормального разложения В предыдущем разделе мы показали, что любое произведение Ъп х Ът можно всегда заменить, используя изоморфизм, другим произведением Zn/ х Zm/, где п' делит т'. Но среди всех способов записи Ъп х Ът в виде произведения двух циклических групп лучший, когда п делит т. Пример Рассмотрим группу, имеющую 48 элементов, представленную в виде произведения двух циклических групп, П = ^2X^24- Числа 24 и 2 можно найти, зная только структуру группы П. Действительно, число 24 получено следующим образом: 24Z= {q G Z, удовлетворяющие условию qx = О, Vx G П} = = {q G Z, удовлетворяющие условию qQ = {0}}. Это можно записать (выражение в фигурных скобках является определением слова аннулятор): 24Z = аннулятор(П). Что касается числа 2, оно находится из равенства 2 х 24 = порядок(П). Таким образом, абеле- ва группа fl' = Z4X Zi2 имеет порядок в точности 48, но ее аннулятор — 12Z, поэтому Q' не может быть изоморфна группе П = Ъч х Z24 (две изоморфные группы имеют равные аннуляторы). (17) Предложение. Пусть п, тп, п' и тп' — четыре элемента из Ъ такие, что п \ тп, п' | тп! и Ъп х Ът с^ Zn/ х Zm/. Тогда п = ±nf, т = ±т'; это можно также записать в виде пЪ = п'Ъ и тЪ = т'Ъ. На этой стадии, вдохновленный предыдущим примером (О, = Ъъ х ^24), читатель может доказать теорему единственности, по крайней мере в случае, когда n, m, п', т' не нули. Заметим однако, что этот результат единственности говорит также, что Ъ х Ъ не изоморфна Z, но это уже другая история. Сейчас мы докажем теорему единственности, имеющую очень широкий спектр действия. Технические методы отличны от методов, используемых в частном случае в предыдущем примере: вместо аннуляторов мы будем использовать минимальное число образующих для модулей конечного типа.
326 111-2 Нормальная форма подгруппы группы Ъп (18) Теорема единственности. А обозначает коммутативное унитарное кольцо. Пусть h, h, ..., 1Р и J\, h, ..., Jq — собственные идеалы кольца А, удовлетворяющие условию: 1Р С Ip-i С ... С /i, Jq С Jq-\ С ... С Ji и A/Ii х Ajh x ... х A/Ip ~ A/Ji x AjJi x ... х A/Jq. Тогда р = q и /, = J, для i = 1,2,... (19) Следствие. Пусть А — коммутативное унитарное кольцо; если'р и q таковы, что АР изоморфно Aq, тогда р = q (непосредственное применение предыдущей теоремы в случае, когда идеалы нулевые). Чтобы доказать теорему 18, необходимо использовать несколько лемм. Но прежде всего несколько комментариев о предпосылках теоремы. Замечания. То, что все идеалы будут предполагаться отличными от А, позволяет избежать появления тривиальных множителей А/А; кроме того, условие на цепи идеалов является необходимым, как это показывает пример Z2 x Z3 ^ Ze. Если идеалы главные, I\ = (ai), h = (02), ..., Ip = (ap)f то условие на цепи эквивалентно отношениям делимости: ai | а2 | аз .. .аР-1 | аР. Основное кольцо предполагается коммутативным и фундаментальным. В действительности существуют не коммутативные унитарные кольца А, такие, что А ~ А2 как А-модули. Рассмотрим, например, векторное (^-пространство конечных последовательностей из N в Q и кольцо А эндоморфизмов из Q^. Пусть и и v — два элемента из А, определенные их действием на каноническом базисе: u(e2n)=e„, u(e2n+i) = 0, v(e2n) = 0, v(e2n+i)=e„. Тогда имеем: А = Аи $ Av. Чтобы это доказать, достаточно рассмотреть отображения U и V, отвечающие и и v соответственно, такие, что U(en) = е2п, У(^п) = e2n+i, значит uU = vV = Id. Нетрудно видеть, что в этом случае Id = Uu + Vv. (20) Лемма. Пусть дан А-модуль М конечного типа, обозначим через р{М) наименьшее число образующих из М.
III-2.3 Единственность нормального разложения 327 Пусть I\ D h Э ... Э 1Р — цепь собственных идеалов в А. Тогда p{A/h х Л/12 х ... х A/Ip) = p. Доказательство. Теорема Крулля утверждает существование максимального идеала Ai, содержащего собственный идеал 1\ (если А = Ъ и I\ = (ai), то этот идеал — (д), где g — простой делитель а\). Этот идеал будет самым большим в цепи. Применим тогда сюръективное отображение: тг: A/h х A/h х ... х A/Ip —> {А/М)р, которое является произведением канонических отображений A/Ii -> А/М. Если S — система образующих в A/I\ х A/I2 x ... х А/1Р, то 7г(5) — система образующих векторного А/М- пространства (А/М)р и, следовательно, card S ^ card7r(5) ^ dim(A/M)p = р. Любая система образующих в А/1\ х А/12 х ... х А/1Р содержит по крайней мере р элементов. К тому же, семейство d = (1,0,.. .,0), е2 = (0,1,0,.. .,0), ..., ер = (0,... ,0,1) — система образующих в А/1\ х А/12 х • • • х А/1Р, имеющая ровно р элементов. Следовательно, p(A/I1xA/I2x...xA/Ip)=p. (21) Лемма. Пусть I — идеал в А и b 6 А. Существует канонический изоморфизм ЬА/1 ^ А/1Ь, идеал 1Ъ определяется как 1Ь = {х G А \ Ьх G /}. Доказательство. Отображение А -> ЬА/I, которое элементу х Е А ставит в соответствие элемент Ьх Е ЬА/I является сюръективным с ядром 1Ь и [__индуцирует изоморфизм между Л-модулями ЬА/I и А/1Ь. Доказательство теоремы 18 Пусть Р = A/h х А/12 х • • • х А/1Р и Q = A/Jx x A/J2 x • • • х A/Jq. В силу леммы 20, р = р{Р)> Докажем равенство I\ = {b E А \ р{ЬР) ^ р— 1}. По предыдущей лемме имеет место равенство: bP~A/l\ хЛ//2ьх...хЛ//рь, где /? Э Ib2 D ... D /рь.
328 II1-2 Нормальная форма подгруппы группы Zn В силу леммы 20, если l\ ф Л, то р(ЬР) = р. В тоже время р(ЬР) является минимальным кардинальным числом. Если 1\ = Л, то /?(6Р) ^ р — 1. Следовательно, р(ЬР)^р-1 *=> 1[=А <^=> beli. Аналогично можно показать, что /* = {6 G Л | р{ЬР) ^ р — к] для 1 <С к <С р. Итак, мы определили р, /i, /г, ..., /р, и это определение внутреннее, зависит от Л-модуля Р: Р изоморфно Q, тогда р = q и I{; = J,. Приведем сейчас два следствия из теоремы единственности. Отметим различие между посылками: в первом случае ищут изоморфизм между частными, и а, и 6, предполагаются необратимыми; во втором — речь идет об изоморфизме в окружающей среде, а, и bj могут быть обратимыми. (22) Следствие. Пусть А — коммутативное унитарное кольцо. Если а\, а2, ..., ар и Ь\, Ь2, ..., bq необратимые элементы, удовлетворяющие условиям: а\ | а2 | ... | ap_i \ ар и &i | Ь2 | ... | &<j_i | Ья, А/(аг) х А/(а2) х • • • х А/(ар) ~ А/(ЬХ) х Л/(62) х • • • х Л/(6,), то р = q и элементы а, и 6, ассоциированы. В частности, если кольцо А без делителей нуля, то элементы а* и 6, равны с точностью до обратимого сомножителя. (23) Следствие. А обозначает опять коммутативное унитарное кольцо. Пусть ai, а2, ..., ар и b\, b2, ..., bq — элементы, удовлетворяющие условиям: oi | а2 | ... | ap_i | ар и Ь\ \ Ь2 | ... | &<j-i | 6g, Зу? : Лр -=->• Л9, y?(aiЛ х а2А х • • • х арЛ) = &iА х 62Л х • • • х 6дЛ. Тогда р = q и элементы а, и 6, ассоциированы (т.е. а,Л = Ь,-Д), что влечет равенство: ахЛ х агЛ х • • • х арЛ = &iЛ х 62Л x • • • х ЬЯА. Если кольцо А без делителей нуля, то элементы а, и Ь{ равны с точностью до обратимого.
111-3 Вычисление образа и ядра матрицы 329 Доказательство. I Так как Ар изоморфно Ая (обозначим изоморфизм у>), то р = q. Кроме того, изоморфизм <р индуцирует, будучи перенесен на частное, изоморфизм: А/(ах) х А/(а2) х • • • х А/(ар) ~ А/(ЬХ) х А/(Ь2) х • • • х A/(bq). Нельзя прямо применить теорему 18, так как некоторые из а, или bj могут быть обратимыми. Определим пит следующим образом: 1 ^ i[ ^ п <=> (а,-) = А и 1 ^ j ^ m <=> (6j) = A. Тогда имеет место изоморфизм: ;4/(an+i) х Л/(ап+2) х • • • х А/(ар) ~ i4/(6TO+i) х Л/(6т+2) х • • • х A/(bq). Откуда получаем р — п = q — m, следовательно, n = m (потому, что р = д) и (а,) = (6,) для t > п. Так как а,- и 6,- с индексами, меньшими [_или равными п, обратимы, то для всех г (а,) = (6,). 3 Вычисление образа и ядра матрицы В следующем разделе мы изучим некоторые вычислительные методы, применяемые к матрицам с целыми элементами. Действительно, только одно арифметическое свойство кольца целых чисел используется для этих вычислений, поэтому везде можно заменить слова с целыми элементами на слова с элементами в КГИ. Однако, эти вычислительные методы могут быть применимы, только если в рассматриваемом кольце известны коэффициенты Безу. 3.1 Ступенчатые матрицы Пусть X пхm-матрицас целыми элементами. Прежде всего мы построим базис в ImX — подмодуле из Zn, порожденном т столбцами матрицы X. Основная идея этого метода состоит в замене п х т-матрицы X другой матрицей X'', более простой, чем X, и эквивалентной справа матрице X в смысле, определенном ниже. (24) Определение. Пусть X и X* — две матрицы с целыми элементами. Они называю-
330 111-3 Вычисление образа и ядра матрицы тся эквивалентными справа тогда и только тогда, когда существует обратимая матрица R, удовлетворяющая условию X1 = XR. Это равенство определяет, естественно, отношение эквивалентности. Две эквивалентные справа матрицы X и X' имеют один и тот же образ: действительно, отношение между функциями /' = /#, в котором g обратимо, влечет, что / и /' имеют один образ. Следовательно, если знать образ одной из этих матриц, то тогда известен и образ другой матрицы. Следовательно, необходимо рассмотреть класс матриц, образ которых легко вычисляется. Матрицы, называемые ступенчатыми в столбцах, образуют такой класс. (25) Определения. Высотой вектора х из Ап (А — произвольное кольцо) называется целое число n — i, где i самое большое из чисел, для которых Xj = 0 при 1 ^ J ^ »', т.е. (0,0,..., 0, xt+i, ж,-+2,..., хп) при xi+i ф 0. Термин «высота» происходит из того, что это понятие применяется для столбцов матрицы. Нулевой вектор, и только он, имеет высоту 0. Матрица X размеров n x m со столбцами Х\, Х2, ..., Хт называется ступенчатой в столбцах, если высота ее столбцов является убывающей, т.е. существует к такое, что: h(Xl)>h(X2)>...>h(Xk)>0 и Xk+1=Xk+2 = ... = Xm = 0, где h(Xi) обозначает высоту вектора Х{. 3.2 Вычисление образа матрицы Ступенчатые матрицы имеют простую структуру и обладают несколькими элементарными свойствами, которые широко используются. (26) Свойства (ступенчатых матриц). Пусть X — ступенчатая матрица над кольцом без делителей нуля. (г) Ненулевые столбцы матрицы X образуют базис пространства, порожденного столбцами. (и) Векторы (е; ),->£, отвечающие нулевым столбцам {Xi)i>k, образуют базис ядра матрицы X. Следующая теорема имеет важное значение: она показывает, что любая матрица с целыми коэффициентами (в общем случае — с коэффициентами в КГИ) может быть преобразована в ступенчатую матрицу.
III-3.2 Вычисление образа матрицы 331 (27) Теорема. (г) Существует алгоритм, который, будучи применен к матрице X размеров nxrn с целыми коэффициентами, дает обратимое справа преобразование, которое превращает матрицу X в ступенчатую матрицу X'. Более точно, этот алгоритм, примененный к X, дает пару (X',R), где X' — ступенчатая п х m-матрица, R — m x rn-матрица, принадлежащая SLm(Z) и удовлетворяющая условию X' = XR. В этом случае говорят, что X' специально эквивалентна справа матрице X, чтобы подчеркнуть существование правой матрицы перехода с определителем 1. (И) Результат остается справедливым, если кольцо целых чисел заменить на КГИ, в котором имеется алгоритм, позволяющий вычислить коэффициенты Безу. Если основное кольцо предполагается только КГИ, то матрицы R и X' существуют независимо от того, можем мы их представить в явном виде или нет. Эта теорема, доказательство которой сопровождается алгоритмом, имеет следствия «абстрактной» природы. (28) Следствие. (г) Существует алгоритм, который, будучи применен к m векторам из Zn, строит базис подмодуля в Zn, порожденного этими m векторами. (И) Пусть А — КГИ; любой подмодуль Ап имеет базис, образованный самое большее из п векторов. В частности, над кольцом главных идеалов любой подмодуль свободного модуля конечного типа является свободным конечного типа. X* 6 Мп**{А% Х'и Л& ♦ ♦ ♦ обядаиюн* <*годбц** мад^эды X' X' <—X;j<— 1; for ж in l .. п loop exit when j = m; for k in j + 1 .. m loop Вьгшсшть 11 Jjt у&ъшггтряжщую условиям: (Xj, X'k) ♦— (aX'j + pX'h, yX', + SX'h); end loop; if X'(iJ) ф 0 then i ч— i -h 1; end if; end loop; X* s« ХЙ* tfftfc В •?* м^рйца с <йфедештай»м t. Она не вьгшсдена* Алгоритм 3. Приведение матрицы X к ступенчатому в столбцах виду
332 111-3 Вычисление образа и ядра матрицы Доказательство (следствия). I (г) является частным случаем предыдущей теоремы, если рассмотреть матрицу, образованную данными m векторами. Чтобы доказать (гг), рассмотрим подмодуль М кольца Ап. Так как Ап — нётерово, то подмодуль М имеет конечное число образующих (обобщение модулей предложения 17 раздела Н-2.4, посвященного свойству конечности идеалов нётерова кольца). Тогда можно [^применить пункт (г). Неконструктивное доказательство Докажем по индукции, что любой подмодуль Е кольца Ап свободен с базисом, состоящим из меньшего или равного п числа элементов. Если п = 1, то Е — идеал в А, следовательно, Е имеет вид Аа) и {а} — базис Е (исключая, может быть, случай а = О, для которого 0 будет базисом Е). Возьмем п ^ 2 и пусть 7гп : Ап —> А — координатная функция на е„ — последнем векторе канонического базиса. Если irn(E) = О, то Е С Ап~1 и имеет (предположение индукции) базис {/ь /2,..., /т} для т ^ п — 1. Если жп(Е) фО,тоЕ является идеалом Аа кольца А с а ф 0. Пусть х G Е и 7гп(х) = а. Докажем тогда, что {ЕПАп~1)фАх = Е. (2) Сумма прямая, потому что, если у Е Е П Ап~1 П Ах, то у = Ах и 7гп(у) =0. Отсюда А = 0, затем у = 0. Сумма равна #, так как, если для у £ Е взять разложение у = х/ + Ах, то получим 7гп(у) = Аа, что определяет А (по предположению жп(у) Е Аа). Если положить \f = у — Ах, то получим у* € Е Г\ Ап~1. По индукции подмодуль Е1 П An_1 кольца Ап~1 имеет базис {/ь/г» • •-»/т} при m ^ п — 1. Равенство (2) доказывает, что {/ь/2,...,/т,*} —базис Я. ■ В последнем пункте предыдущего следствия можно убрать условие конечности, что приводит к следующему предложению, доказанному в упражнении 16. (29) Предложение. Над кольцом главных идеалов любой подмодуль свободного, модуля свободен.
Ш-3.2 Вычисление образа матрицы 333 Доказательство теоремы 27 Покажем для начала, как вычисляют X'; вычисление R может быть получено, как частный случай этого метода. Пусть X' — п х m-матрица, определенная по X. Ее столбцы обозначают через Х[, Х'2) ..., Х'т. Благодаря лемме 6 об исключениях, на столбцах X' можно реализовать операцию: (XJ, Х'2) <— (аХ[ + рХ'2, ~iX[ + 8Х'2) при а8-0-у = 1 и 7^ii+^i2 = 0- С обозначениями из раздела 1 эту операцию можно еще записать в виде: (X[,X'2)^-(X[,X'2)(j г12 Эта операция приводит к умножению справа матрицы X' на матрицу го SLm(Z) и обнуляет Х[2. Таким же образом обнуляются элементы в ^12» ^13) • • • » Xim. При итерации метода представляются два случая: • Х'пф0. Тогда приводят к ступенчатому виду (по индукции) подматрицу Х'{2 .. п, 2 .. т), образованную п—1 последними строками и т — 1 последними столбцами. • Х'п =0. Тогда приводят к ступенчатому виду (по индукции) подматрицу Х'(2 .. п, 1 .. т), состоящую из п — 1 последних строк и m столбцов. В обоих случаях результирующая матрица X' будет ступенчатой. Существование правой матрицы перехода R приводит к тому, что каждая операция в действительности является умножением справа на элементарную матрицу. щ Итак, можно дать более простой алгоритм, реализующий преобразование матрицы X в ступенчатую матрицу X', специально эквивалентную справа исходной матрице. Получение правой матрицы перехода Д, использующее только этот алгоритм, будет объяснено ниже. Чтобы лучше понять алгоритм 3, нужно отметить, что на данном этапе выбирают индекс строки г и индекс столбца j и пытаются обнулить все элементы строки г с индексом k > j. Рассмотрим этот процесс на примере. В этой матрице Оц и азг не нули, значки . обозначают произвольные элементы, а • — расположение начального мо- /an \ • 0 0 Я32 3 1 0 0 0 0 • 0 0 0 0 0 к 1 0 0 0 0 * 0\ 0 0 0 .
334 111-3 Вычисление образа и ядра матрицы мента (осевой столбец). Пытаются обнулить элемент * (т.е. элемент в строке г и столбце j). Пример приведения к ступенчатому виду Вот конкретный пример применения программы, иллюстрирующий этапы приведения к ступенчатому виду матрицы размеров 4x3. Приводится каждый этап, в котором обнуляемый коэффициент еще не нуль. Запись 0 обозначает, что данный коэффициент стал нулем на этом этапе. 1 6 1 12 -12 V 18 1 82 -162 83 15 0 30 15 0 -60 120 -60 10 \ 10] 0 ' 20/ *-\ 270 -540 270/ /3 0 [ -24 -60 1 54 120 V-21 -60 / 1 [ 82 ' 1 -162 - V 83 10> 10 0 20/ 0 30 -60 30 V ' / 0 0 0 0 Пусть F — подпространство из Z4, порожденное 3 столбцами матрицы X. Процесс приведения к ступенчатому виду из X в X' дает базис F. Действительно, два первых столбца ступенчатой матрицы X' образует базис ImX', а значит, F = \тХ = \тХ''. Читателю предлагается решить упражнение 12, в котором сообщается, что хотя F имеет размерность 2, свободная система {Х\) Х2] из F не образует базис F и не может быть дополнена до базиса F. (30) Предупреждение. Приведем несколько основных классических результатов линейной алгебры для векторных пространств. (г) ВЪП в общем случае нельзя найти базис системы образующих. (И) Свободная система из п векторов в Ъп не имеет никакого отношения к построению базиса вЪп. (ггг) Дополнить свободную систему Ъп до базиса Ъп, вообще говоря, невозможно. Посмотрим сейчас, насколько это возможно в процессе приведения к ступенчатому виду X —> X' = XR, как вычислить матрицу перехода R. Достаточно взять переменную R матричного типа размеров mx m, пока равную единичной, и произвести над ней те же элементарные умножения справа, что и над X'. Практически, процесс состоит
III-3.2 Вычисление образа матрицы 335 в построении новой матрицы. Приписывая к матрице X снизу единичную т х m-матрицу, применим к этой (п + тп) х m-матрице алгоритм приведения к ступенчатому виду по столбцам, помня, что достаточно преобразовать к ступенчатому виду только верхнюю часть. Если обозначить через X' переменную, представляющую п х т-подматрицу, образованную из п первых строк (т.е. верхних строк) и через R — переменную, представляющую подматрицу размеров m x m, состоящую из т последних строк (т.е. нижних строк), то соотношение XR = Xf, ReSLm{A), остается истинным на каждом шаге (обе части этого равенства умножены справа на одну и ту же элементарную матрицу из SLm(A)). Итак, это соотношение остается истинным до конца алгоритма приведения к ступенчатому виду и позволяет вычислить, таким образом, в явном виде матрицу перехода R. Замечание. Отметим, что в силу соотношения X' = XR возможно получить выражение векторов Xj, векторов-столбцов матрицы X' в зависимости от векторов X,, столбцов матрицы X. Чтобы выразить Xj через XJ достаточно умножить на Я-1 обе части равенства, что возможно сделать с помощью алгоритма. Можно также построить базис, исходя из системы образующих, и выразить в явном виде элемент базиса в этой системе образующих и наоборот. Пример приведения к ступенчатому виду (продолжение) Приведем пример, показывающий получение правой матрицы перехода. Как обычно, показан каждый этап обнуления элемента; это обнуление будет обозначаться через подчеркнутый ноль 0: / 6 15 12 0 -12 30 18 15 1 0 0 1 0 0 10\ 10 0 20 0 0 1/ ( 3 -24 54 -21 -2 1 V 0 0 10\ -60 10 120 0 -60 20 -5 0 2 0 0 \)
336 111-3 Вычисление образа и ядра матрицы 1 82 162 83 6 -3 1 0 -60 120 -60 -5 2 0 ^\ 270 -540 270 20 -10 ъ) / 1 82 -162 83 6 -3 V 1 0 30 -60 30 0 -2 3 °\ 0 0 0 5 2 -6 У Сохраняя предыдущие обозначения, покажем на примере, как знание матрицы R помогает выразить векторы Х[ и Х'2 базиса F в зависимости от начальной системы образующих Xi, Хг, Хз- Равенство X' = XR влечет, в частности, равенства Х[ = XR\ и Х'2 = XR?] они могут быть записаны в виде: Хх = &Х\ — ЗХг + Хз, Х2 = —2X2 + ЗХз- Отметим, что нулевое значение последней колонки влечет отношение зависимости между Х\, Хъ и Хз: 5Xi-f2X2-6X3 = 0. Чтобы выразить Xj через Xj, достаточно знать матрицу R~l. Эту матрицу легко получить, применив алгоритм приведения к ступенчатому виду. Действительно, R получена, начиная с единичной матрицы, умножением справа на элементарные матрицы (^]) . Как следствие, достаточно иметь квадратную матрицу S того же размера, что и Д, и определенную как единичная. Затем подвергнуть ее умножению слева, на элементарные обратные к предшествующим, матрицы столько раз, сколько подвергалась и матрица R. Отношение RS = Idm тогда останется инвариантным с начала и до конца алгоритма. В этом примере мы получили матрицу Я-1 и выражение системы образующих в базисе 6 15 10 \ -16 -41 -27 , Xi = 6Х[ - 16Х£, -7 -18 -12/ Х2 = 15XJ - 41Х£, Хз = ЮХ; - 27Х^. 3.3 Существование решения системы линейных уравнений Пусть А — матрица размеров п х т с целыми элементами и 6 — вектор с п целыми компонентами, ассоциированные с системой линейных уравнений Ах = 6. Решить явно эту систему, значит:
III-3.3 Существование решения системы линейных уравнений 337 1) быть способным показать, имеет ли эта система одно решение и при необходимости предъявить его, 2) если система имеет решения, то найти их все, т.е. найти базис ядра КетА. Общее решение системы линейных уравнений рассмотрено в разделе 3.5. Здесь мы будем рассматривать только поиск решения. Сказать, что система Ах = b имеет решение, то же самое, что сказать, что вектор 6 принадлежит образу Im А; найти решение — значит представить вектор 6 как линейную комбинацию столбцов А. Рассмотрим матрицу, полученную приписыванием справа к матрице А столбца Ь. Итак, достаточно изучить следующую задачу. 3) Пусть дана матрица X с п строками и m столбцами. Определить, является ли последний столбец Хт линейной комбинацией предшествующих столбцов Х\, Х^, ..., Хт-\ и если да, то найти в явном виде эту линейную комбинацию. (31) Теорема. Пусть X — п х m-матрица с целыми элементами. Обозначим через X' и R две матрицы, полученные с помощью алгоритма приведения к ступенчатому виду по столбцам (R — квадратная матрица порядка m и обратима, X' = XR — матрица, ступенчатая по столбцам). Если R= (rij), следующие два свойства эквивалентны: a) последний столбец Хт является линейной комбинацией столбцов Х\, Хч, .. •, Xm-i, b) столбец Хт нулевой и гтт обратимо. Тогда последняя строка матрицы R будет (0,0,...,0,0,1), и имеет место равенство: Хщ = — {г\тХ\ + ГЧтХч + \- Гт-\тХт-\), которое доказывает, что последний столбец Хт матрицы X является линейной комбинацией предшествующих столбцов. Эти результаты обобщаются, очевидно, на любое кольцо главных идеалов; сложность вычисления зависит от сложности вычисления коэффициентов Безу. Доказательство. I Докажем сначала импликацию b => а. Равенство X' = XR, интерпретированное в терминах столбцов, описывается так: ' Xj = r\jX\ + Т43Х4 Л h rmjXm для 1 ^ j ^ m. 22-1017
338 111-3 Вычисление образа и ядра матрицы Если столбец Х'т нулевой и если rmm обратимо, то из равенства, приведенного выше, следует при j = m выражение столбца Хт в виде линейной комбинации Х\) Хъ, ..., Хт-\. Чтобы доказать обратную импликацию а => Ь, нужно доказать, что в любой момент в алгоритме приведения к ступенчатому виду последняя строка матрицы R всегда будет равна (0,0,.. .,0,0,1), что можно еще записать в виде: R{Zn-lx0) = Zn-lx0 и Д(ет)-ет G Г1"1 х 0. (3) Ъп~1 х 0 обозначает подпространство Zn, образованное п — 1 первыми векторами (e,)i^,^n_i канонического базиса. Это доказывается по индукции: сначала возьмем квадратную матрицу R единичной. На каждом этапе R изменяется — умножается на элементарные матрицы: Так как множество матриц, удовлетворяющих условию (3), образуют подгруппу GLm(Z), достаточно доказать, что матрица (*]) принадлежит этой подгруппе, что очевидно, если к < т. Итак, интересен этап, для которого индексы осевых столбцов будут j и т. Достаточно доказать, что в этом случае /? = 0 и 8 = 1. Если X' обозначает матричную переменную XR, то столбец Х'т является линейной комбинацией предыдущих столбцов Х[, Х'2, ..., Х'т_1. Действительно: Х'т d= XR{em) e XR{Zn)=X{Zn) = Х{Ъп~1 х 0) = XR{Kn-1 х 0) d= X'iZ"-1 x 0). Первое равенство верно, так как R обратима. Второе — так как Хт = Х(ет) является по предположению линейной комбинацией Х\, X?, ..., Xm-i и так как R удовлетворяет условию (3). Покажем, что х'^ делит х(т, г — индекс текущей строки. Рассмотрим отношение между столбцами: Х'т = Х,Х[ + \2Х'2 + • • • + XjX'j + • • • + Xm-iX'^. (4) Так как матрица X' уже частично ступенчатая, то подматрица, составленная из i — 1 первых строк, будет ступенчатой. Ненулевые
III-3.3 Существование решения системы линейных уравнений 339 столбцы этой подматрицы, т.е. столбцы с индексом < j, образуют множество линейно независимых элементов, и отношение (4), ограниченное до г — 1 первых строк, образует нулевую линейную комбинацию этой линейно независимой системы. Следовательно, Ai = Аг = ... = Aj_i = 0. Элемент отношения (4), индекс строки которого г, описывается так: x'im = XjX^j, что доказывает указанное отношение делимости. Однако алгоритм оговаривает, что в случае, когда х'^ делит x'im) нужно выбрать элемент (3 матрицы (д]) равным 0, а 8 — равным 1. То, что последний столбец Х'т финальной матрицы X' будет нулевым, доказывает, что этот столбец является линейной комбинацией |_предыдущих столбцов и что X' полностью ступенчата. Пример решения Вот пример решения линейной системы, иллюстрирующий доказательство теоремы 31. Рассмотрим линейную систему Ах = Ь с: /3 2 3 4\ /-8\ U -2 I -i) и Ы Приведем этапы процесса ступенчатости: 0- (-1 3 4-8 1 -1 -3 (:з о о 1 0 О 4 -8\ -8 -1 -з;' о о\ (-\ о О 21 У' \-Ъ 1 о 3 8 -10 0 0 -3 8 -8 -13 (-1 0 3 4 -8\ \-3 8 1 -1 -Зу' /-1 0 0 0 -8\ \-Z 8 -8 -13 -3J' )■ -10 0 0 3 8 0 -13 0 21 -10 0 0 0 0 Получена правая матрица перехода: /-1 -2 -1 -6 1-3 0-7 0 0 V 0 50 \ 55 0 -63 1/ Тогда заключаем, что вектор х = (—50,-55,0,63) является частным решением предложенной системы. 22*
340 111-3 Вычисление образа и ядра матрицы 3.4 Вычисление ядра матрицы Ступенчатый вид матрицы позволяет также выразить ядро матрицы. (32) Предложение. А обозначает здесь кольцо главных идеалов. Пусть X — п х т- матрица с элементами в А и R — обратимая матрица порядка m такая, что X' = XR будет ступенчатой по столбцам. Если Х'к+1, Х'к+2> • • •» Х'т — нулевые столбцы матрицы X', то: (г) последние столбцы Rk+i, ..., Rm, матрицы R образуют базис подпространства Кег X кольца Ат, (И) к первых столбцов матрицы R образуют базис дополнения S до КетХ вАт: к т 5 = 0ЛД,, КегХ=0ЛД, и Ат =S®KerX, *=1 %=к+\ (iii) для х G Ат разложение R~l(x) в каноническом базисе будет иметь вид: R~l{x) = YT=i Л«(х)е«- Тогда £*=1 Xi(x)Ri и YT>k л«(ж)л« будут компонентами X в прямой сумме, описанной выше. Следовательно, Кег X выражает прямое слагаемое в Ат. Доказательство. Равенство X' = XR доказывает для х Е Ат эквивалентность Rx E КетХ <=> х Е КетХ' и, следовательно, Д(КегX') = КетХ. Ясно, что e*+i, е^_|_2) • • •) ет образуют базис ядра X1. Остальную часть [__предложения докажем ниже. Пример Проиллюстрируем это доказательство на примере матрицы размеров 3x4. Возьмем матрицу X, ее ступенчатую форму X', матрицу R перехода от X к X1, удовлетворяющую условию X1 = XR.
111-3.5 Общее решение системы линейных уравнений 341 Если обозначить через Ri столбцы матрицы R, то векторы Дз и R±, которые соответствуют нулевым столбцам матрицы X', образуют базис ядра матрицы X. Кроме того, имеется разложение Z4 в прямую сумму: z4 = (z Ri е zr2) е (z д3 е z АО = (z лх е z д2) е Кег х, а знание матрицы Д-1 влечет разложение: е\ = (&R\— 2Д2)0(Дз — 2Д4), е2 = (ЗДх - 2Д2) 0 (-Д4), е3 = (6ЛХ - ЗД2) 0 (-2Д4), е4 = (Дх) 0 (0). 3.5 Общее решение системы линейных уравнений В разделе 3.3 уже было определено, что значит решить линейную систему с целыми коэффициентами Ах = 6, где х Е Zm и Ь Е Zn. Существование и поиск частного решения уже были рассмотрены в разделе 3.3. В то же время, хорошо известно, что общее решение такой системы — это сумма частного решения и общего решения однородной системы. Однако ядро матрицы А (множество однородных решений) было вычислено в предыдущем разделе. Итак, линейное уравнение, описанное выше, полностью решено. Но нужно сделать замечание: ядро матрицы А может быть вычислено во время поиска частного решения, т.е. одновременно с процессом приведения к ступенчатому виду матрицы А, к которой присоединен вектор-столбец 6. (33) Предложение. Обозначим через (А \ Ь) матрицу, состоящую из матрицы А и присоединенного к ней вектора Ь. Тогда (А \ Ь) будет линейным отображением из Zm х Z в Zn, которое (х, xm+i) ставит в соответствие Ах + 6xm+i. Пусть (А' | 6') — ступенчатая матрица, полученная с помощью алгоритма приведения к ступенчатому виду из раздела 3.2, примененного к матрице (А \ b). R — матрица перехода, удовлетворяющая условию (А | 6) х R = {А1 | Ь') (эта матрица R обратима и порядка m + I). (г) Система Ах = Ь имеет решение тогда и только тогда, когда последняя строка матрицы R равна (0,0, ...,0,0,1) и когда вектор Ь' нулевой. Эти два условия гарантируют частное решение — Rm+i, где Rm+i — вектор, образованный m первыми компонентами из Дт+1. (И) В этом случае А' — ступенчатая матрица, эквивалентная слева матрице А. Пусть k E [1,тп] такое, что нулевые столбцы матрицы А имеют индексы > к. Тогда векторы Rk+i, Rk+2, • • •> Rm E Zm состоят из m первых компонент столбцов Rk+i, Rk+2, • • -, Rm, образующих базис Кет А.
342 111-3 Вычисление образа и ядра матрицы Доказательство. Пункт (г) следует из теоремы 31. Тогда имеет место матричное равенство: (А | 6) х R = {А' | 6') = (А' | 0) для R = R ,()••• 0 Дт+1 ], которое ведет к А' = А х R и ARm+\ +6 = 0; это доказывает пункт (И). Пример Проиллюстрируем данное доказательство примером, уже рассмотренным в разделе 3.3. Речь идет о системе уравнений 3xi + 2x2 + Зхз+ +4x4 = —8 и xi — 2x2 + хз — Х4 = —3. Приведем ступенчатую форму (А1 | 6') матрицы (Л | 6) и матрицу перехода R от (А | 6) к (А1 | 6'): (А' | 6') = -10 0 0 0 -31000 )■ R = <-\ о о \ о 2 3 0 3 0 -1 0 1 0 0 -6 -7 0 8 0 50 \ 55 0 -63 1/ Два основных пункта обеспечивают нулевое значение вектора 6' и то, что последняя строка матрицы R равна (0,0,0,0,1). Действительно, если х — вектор (—50, —55,0,63), то соотношение (А | 6) х Я5 = 0 описывается в виде: — Ах + Г556 = 0. Следовательно, х — частное решение системы Ах = 6. Кроме того, имеет место равенство А х R = А', матрица R будет подматрицей матрицы Д, состоящей из 4 первых строк и 4 первых столбцов матрицы R. Это матричное равенство имеет тот смысл, что матрица А' является ступенчатой формой матрицы А) и R — правая матрица перехода. Векторы Дз и R^) соответствующие нулевым столбцам матрицы Л', образуют базис Кег А. Другими словами, Дз) Ra образуют базис пространства однородных решений. Итак, решения записываются в виде: хх = —50 — u — 6v, X2 = —55 — 7v, Х3 = w, X4 = 63 + 8v для u,v £%.
III-3.6 Ранг модулей 343 3.6 Ранг модулей Вот несколько результатов, относящихся к рангу модулей, которые, возможно, покажутся смешными для читателя, хорошо знающего теорию модулей над кольцом главных идеалов. Предупреждения, фигурирующие в этих формулировках, оправдывают их присутствие здесь. Первые результаты будут верны не только в кольцах главных идеалов, а останутся истинными и в коммутативных кольцах: предположение о том, что кольцо является кольцом главных идеалов, позволяет, однако, доказать, что приведение к ступенчатому виду предоставляет возможность эффективного подхода. (34) Предложение. Два базиса свободного модуля L конечного типа над коммутативным кольцом А имеют одно и тоже число элементов. Доказательство. I Обозначим через р кардинальное число одного базиса и через q — кардинальное число другого базиса. По определению базиса, три Л-модуля L, Ар и Aq изоморфны. В силу следствия 19 раздела 2.3 [_имеем: р = д, что и доказывает предложение. (35) Определения. (г) Если L — свободный модуль конечного типа над коммутативным кольцом А, то мощность какого-либо его базиса называется рангом модуля L и обозначается через rang(L). В частности, ранг Ап равен п. (и) Если М — А-модуль конечного типа, то обозначим, как и в лемме 20 раздела 2.3, через р{М) наименьшее число образующих в М. (36) Предложение. Пусть А — коммутативное кольцо. Семейство образующих в Ап, состоящее из п элементов, является базисом в Ап. Другими словами, любая сюръекция модуля Ап является изоморфизмом. Доказательство. I Напомним, что квадратная матрица X порядка п является обратимой тогда и только тогда, когда ее определитель обратим; это верно в силу равенства det(XY) = det(X)det(Y). Используя это равенство для матрицы X, присоединенной к матрице X, транспонируем матрицу алгебраических дополнений матрицы X: XX = I XX = det(X)Idn.
344 111-3 Вычисление образа и ядра матрицы I Пусть X — п х n-матрица, столбцы которой Х\, Хъ, ..., Хп являются п векторами порождающими Ап. Рассмотрим сначала частный случай А = Ъ. Если X1 — ступенчатая матрица, эквивалентная справа матрице X, то ее столбцы порождают ImX' = ImX = Ъп. Как следствие, всякий столбец матрицы X' — ненулевой. Матрица X' — ступенчатая, ее столбцы независимы и образуют базис Ъп; тогда то же верно и для столбцов матрицы X. Эти же рассуждения применимы, очевидно, и к любому кольцу главных идеалов. Рассмотрим теперь случай произвольного коммутативного кольца. Так как Х{ составляют систему образующих для Ап, то существует семейство (Yi) п векторов из Ап такое, что X(Yi) = et, где множество (е^) обозначает канонический базис. Если У обозначает матрицу, столбцами которой являются векторы Yi, Yi, ..., Уп, то XY = Idn и det(X)det(y) = 1. Следовательно, матрица X с обра- [_тимым определителем обратима; ее столбцы образуют базис в Ап. Внимание: этот результат не имеет аналогов для множества линейно независимых элементов (см. пример и предупреждение 30 раздела 3.2). В упражнении 6 доказан следующий результат. (37) Предложение. Если А — коммутативное кольцо, то в Ап п векторов свободны тогда и только тогда, когда их определитель не является делителем нуля. Другими словами, эндоморфизм Ап инъективен тогда и только тогда, когда его определитель не является делителем нуля. (38) Предложение. Пусть А — произвольное коммутативное кольцо. (г) Множество п + 1 векторов из Ап всегда линейно зависимо. (И) Множество п — 1 векторов из Ап не порождает Ап. (iii) Если модуль М порожден п векторами, то п+1 векторов всегда линейно зависимы; и еще, если М содержит m линейно независимых векторов, то М не может быть порожден m — 1 векторами. (iv) Если L — свободный подмодуль модуля конечного типа М, то rang(L) ^ р(М). (v) В частности, если М — свободный подмодуль конечного типа, то rang(M) = р(М).
Ill [-3.6 Ранг модулей 345 Доказательство. I (г) Классическое доказательство состоит в использовании внешнего вычисления. Но можно дать более простое доказательство, имитирующее внешнее вычисление с помощью подопределителей (упражнение 6). Приведем здесь доказательство в двух частных случаях. Предположим, например, что А без делителей нуля и погрузим п + 1 данных векторов в Кп, где К — поле частных для А. Элементарный результат линейной алгебры о векторных пространствах дает нам нетривиальное соотношение с коэффициентами в К, которое умножается на общий знаменатель и дает нетривиальное отношение с коэффициентами в А. Более простое доказательство над кольцом главных идеалов состоит в использовании ступенчатости. Обозначим через X матрицу с п строками ип+1 столбцами, образованную п + 1 данными векторами, через X' — ступенчатую матрицу, эквивалентную справа матрице Х) через R — матрицу перехода порядка п + 1, обратимую и такую, что XR = X'. Матрица X' обладает строго большим числом столбцов, чем строк. Но так как она ступенчатая, то ее последний столбец нулевой. Равенство Хйп+1 = 0 (Rn+i — последний столбец матрицы R) дает нетривиальное соотношение между столбцами матрицы X. (Hi) Первая часть следует из (г). Пусть и — сюръекция из Ап на М. Рассмотрим тогда п + 1 векторов /ii, /i2, ..., /in+i модулям, порожденного п векторами. Если Х{ Е Ап — прообраз /i,- для i = 1,2,..., п +1, то Х{ в количестве п+1 находятся в Ап. Нетривиальное линейное соотношение между Х{ проектируется с помощью и в нетривиальное линейное соотношение между /i,-. Вторая часть пункта (Hi) — переформулировка первой, которая влечет, в частности, пункт (П). Пункты (iv) и (v) являются непосредственными следствиями из предыдущих пунктов. Дополнительное замечание: метод приведения к ступенчатому виду дает явное доказательство пункта (Н), предъявляя вектор канонического базиса, не принадлежащего пространству, порожденному п — 1 данными векторами из Ап. Действительно, рассмотрим матрицу X, образованную этими п — 1 векторами, и ступенчатую матрицу X'', эквивалентную справа матрице X. Матрица X' имеет п строк, п — 1 столбцов и тот же образ, что и матрица X. Если ни один из диагональных элементов матрицы X' не нуль, то еп не принадлежит образу X', и, следовательно, en ^ \тХ. Напротив, I если X' имеет нулевой диагональный элемент, то выберем из таких
346 111-3 Вычисление образа и ядра матрицы и элементов элемент с самым маленьким индексом г; тогда в{ не будет принадлежать образу X', и, следовательно, е,- £ \тХ. Примеры 1. Первый пример показывает, что 5 векторов в ЪА обязательно линейно зависимы. Рассмотрим векторы: которые записаны в виде столбцов матрицы, внутренняя часть которой ограничена единичной матрицей порядка 5. Применим к этой матрице процесс приведения к ступенчатому виду, получим ступенчатую матрицу X' и матрицу перехода R: Х' = 1 0 1 2 0 -1 -2 -3 0 0 -1 -3 0 0 0 -1 0 0 0 0 и R = Я 0 0 о \о -2 1 0 0 0 0 -1 -1 0 1 -1 0 0 1 0 5\ -4 -3 -1 2/ Последний столбец R$ матрицы R в силу равенства 0 = Х'ъ = XR$ дает соотношение между данными 5 векторами ЪА: 5Xi - 4Х2 - ЗХ3 - *4 + 2Х5 = 0. 2. Второй пример показывает, что 4 вектора из Ъъ не могут порождать Ъъ. Рассмотрим следующие векторы и результирующую ступенчатую матрицу: (1\ 0 0 1 \\) ) (1\ 3 2 0 \2/ ) СА i 2 ■ :2 W (0\ 3 2 1 \2/ И Со 0 1 \1 0 0 0\ 3 0 0 1 2 0 0 —110, 1 0 1/ В этом примере вектор ез канонического базиса Ъъ не принадлежит пространству, порожденному векторами-столбцами конечной ступенчатой матрицы. Следовательно, вектор ез не принадлежит пространству, порожденному 4 данными векторами из Z5. Отметим, что пространство содержит векторы ei, e\ и es.
111-4 Приведение матрицы 347 (39) Предложение. Пусть М — модуль конечного типа над кольцом А главных идеалов. Если N — подмодуль М, то N конечного типа и p{N) ^ р{М). Доказательство. I Пусть (/ii,/i2, •••,/im) — система образующих М с m = р(М). Существует одно и только одно линейное отображение и из Ат в М, удовлетворяющее условию м(е,) = рц для i = 1,2, ...,m. Оно сюръективно, поскольку уц порождают М. Для N С М верно равенство N = u(u~l(N)). Подмодуль u~l(N) Am имеет базис из п элементов cn^m (предложение 28 раздела 3.2). Отсюда следует, что N порождено п элементами, и, как следствие, \__p{N) ^ n ^ m. Замечания. Неравенство для р не будет справедливым для модулей конечного типа над произвольным коммутативным кольцом. Достаточно рассмотреть идеалы коммутативного кольца (не кольца главных идеалов), чтобы в этом убедиться. Можно также убедиться в том, что подмодуль модуля конечного типа не обязан быть конечного типа. Для этого достаточно рассмотреть идеалы коммутативного не нётерова кольца, например, кольца полиномов Q[Xi, Хг,..., X,,...] с бесконечным числом неизвестных. 4 Приведение матрицы В определении 15 была введена эквивалентность двух последовательных целых чисел (at)i^,^n и (fy)i^j^n через существование автоморфизма в Ъп, переводящего подгруппу Па»^ в подгруппу JJbjZ. Аналогичная эквивалентность существует для матриц. (40) Определение. Две матрицы А и В, не обязательно квадратные, но одинаковых размеров, называются эквивалентными, если существуют две обратимые матрицы L и R такие, что LAR = В. Они (матрицы А и В) называются специально эквивалентными, если матрицы L и R имеют определители, равные 1. Прочитав это определение, можно подумать, что две квадратные диагональные матрицы эквивалентны тогда и только тогда, когда последовательности целых чисел, фигурирующие на диагоналях, эквивалентны. Это конечно так, но мы не можем легко доказать необходимое
348 111-4 Приведение матрицы условие: если две квадратные диагональные матрицы эквивалентны, то последовательности целых чисел на диагоналях эквивалентны. Действительно, отношение LA = BR~l показывает, что модули L(ImA) и 1т В равны. Матрица L определяет тогда изоморфизм (р из определения 15. В этом разделе мы покажем, что любая матрица (не обязательно квадратная) эквивалентна диагональной матрице, последовательность диагональных элементов которой является возрастающей последовательностью по отношению к делимости. Этот результат фундаментален и приводит на этот раз к классификации всех подмодулей окружения Ъп и, таким образом, к классификации всех абелевых групп конечного типа и, в частности, всех абелевых конечных групп. Эти результаты даны в виде алгоритма, применяемого к кольцам главных идеалов, в которых коэффициенты Безу вычисляемы. Со строго математической точки зрения этот раздел посвящен классическим результатам теории модулей над кольцами главных идеалов. (41) Определение. Матрица X = (xjj) с п строками и m столбцами называется приведенной, если выполнены следующие условия: Xij = О для i ф j и хц | Xj+i|t-+i для 1 ^ г < inf(n, m). X = Если в приведенной матрице один из элементов хц обратим, то предшествующие ему диагональные элементы также обратимы (так как они делят хц). Аналогично, если хц — ноль, то все следующие за ним диагональные элементы нулевые. Для начала приведем следствие из результатов раздела 2.3, касающееся единственности нормального разложения последовательности элементов коммутативного кольца. (42) Следствие. Пусть X, X' — две приведенные эквивалентные матрицы с п строками и m столбцами и элементами в кольце А. Тогда для 1 ^ i ' ^ inf (n, т) идеалы Ахц и Ах'и равны (т.е. элементы хц и x'i{ соответствуют друг (Хц ' 0 0 \ о 0 122 0 0 язз 0 0 %пп 0 . 0 . 0 . 0 . .. 0\ .. 0 .. 0 0 .. 0/ Слева показана схема, представляющая общий вид такой матрицы (эта схема предполагает, что n ^ m).
111-4 Приведение матрицы 349 другу). В частности, если А без делителей нуля, то диагональный элемент хц матрицы X равен элементу x'i{, и обратно. Доказательство. I По определению эквивалентности матриц существуют две обратимые матрицы L и R такие, что X' = LXR. Тогда можно применить следствие 23 к двум подмодулям 1тХи 1тX' из Ап. Действительно, матрицы X и X' будут приведенными: ImX = хцА х хцА х • • х хггА хОАх-хОАс Ап, ImX' = х'пА х х'^А х • • • х х'ггА хОАх-хОАсАп. В этих равенствах г обозначает inf(n, m), а число дополняющих нулей (т.е. 0) равно п — г. Кроме того, L представляет изоморфизм из Ап на Ап, переводящий ImX blmXf: ImX' = LXR{Am) = LX{Am) = L{lmX). |_Итак, следствие 23 дает нужный результат. (43) Теорема приведения. (г) Существует алгоритм, который будучи применен к матрице X размеров n x m с целыми элементами, дает приведенную матрицу X', специально эквивалентную матрице X, т.е. обладающую свойством: существуют L 6 SLn(Z) и RE SLm(Z) такие, что X' = LXR. (И) Результат остается верным и в кольце главных идеалов. Доказательство приводится в конце раздела. Алгоритм приведения матриц использует несколько под-алгоритмов, которые будут изложены сейчас в виде лемм. В описании этих алгоритмов используется следующее определение. (44) Определение. В кольце А главных идеалов длиной элемента a 6 А (обозначается long(a)J называется длина разложения на простые элементы. Для ненулевого элемента а, если а = p\p<i.. .pk, Pi — простые, не обязательно различные элементы, то long (a) = к. По соглашению длина 0 принимается равной оо. Отсюда следует, что для двух элементов a,b E А— {0}: (i) long(a) = О *=> aeU{A), (ii) long(ab) = long(a) + long(6), (iii) a | b => long(a) ^ long(6), (iv) a\b и long(a) = long(6) => a = eb, с G U(A).
350 111-4 Приведение матрицы (45) Лемма (обнуление подстолбца). Алгоритм 4, примененный кпх т-матрице X с целыми элементами и с парой (io, jo) индексов строки и столбца, строит матрицу X' той же природы, специально эквивалентную слева матрице X, такую, что х'^о = 0 для i > io. Кроме того, выполняются условия: (г) если Xi0j0 делит каждое xtj0 для г > г'о, то строка г'о матрицы X неизменна (xfioj = xtoj для 1 ^ j ^ m), (гг) если Xi0j0 не делит ни одно из xtj0 для г > г'о, то l°ng(x<ojo) < long(xtoJO). function СanceLSub-Column (X £ Mnm(Z) to ^ n jo ^ m) return X' € Mnm(Z) is h (X*h h(X% *- м UiX*) t>G<wmw№ a#o*a* wwmm X* begin X' <— X; for i'in to + 1 .. n loop Вычисление ( ~ f ) удовлетворяющей условиям: 7*;QJ0 + <fcrt',0 = 0, crf-/37 = l; Вели z'^h &****$to**ofi**$t a **£» 1 (li0{X')\ (ali0{X') + fili{X')\ {lt(X'))*-{ylt0(X')+6lt(X'))> end loop; return X'; end CanceLSub-Column; Алгоритм 4. Обнуление подстолбца Можно схематизировать алгоритм 4 следующим образом: / Хц Xij0 Xim \ Яг01 \ХП1 ^ojo Lnj0 b%om Xnm I Cancel_Sub_Colum $ Cancel_Sub_Column '11 <i \<i clJo "tojo 0 *lm\ . . I «om x' /
III-4 Приведение матрицы 351 Доказательство. Возьмем матрицу L с определителем 1, удовлетворяющую равенству справа. Следовательно, x'iojo является наиболь- /Чл\ о = L / x>ojo \ ^•o+ljo V о J \ X шим общим делителем xt0j0, я,-0+1 jo> ..., xnjo. Если xiojo делит xijo для i > i0, то строка г'о матрицы X' не изменяема (по отношению к строке г'о матрицы X), так как матрицы перехода имеют вид (* ®). .. Если x%QjQ не делит x,j0, то я(. -о является точным делителем x,0j0: длина |_строго уменьшается. (46) Лемма (обнуление подстроки). Алгоритм 5j аналогичный алгоритму 4, оперирует со строками вместо столбцов и, примененный к матрице X, дает матрицу X' = XR, где R 6 SLm(Z). Кроме того: (г) если Xi0j0 делит каждое Xi0j для j > j0, то столбец j0 матрицы X не изменится (х^о = Xij0 для 1 ^ г ^ п), (И) если Xi0j0 не делит ни одно из X{0j для j > j0, то long«jo) < lonS(x iojo)- function CancelSub-Row-AndJ>ub-Column jo € [1, m]) return X' € M begin X' <— X; loop X' «— CancelJSub-Row(X',io, jo); exit when под столбец X'(io + 1 .. n jo) X' i— CancelJSub-Column(X', to, jo); exit when подстрока X'(t'o, jo + 1 . end loop; return X'\ end С ancelSub-Row-AndSub-Column-, m) (X€Mnm(Z) is нулевой; нулевая; to € [l,n] Алгоритм 5. Обнуление подстроки и подстолбца (47) Лемма (обнуление подстроки и подстолбца). Алгоритм 5, примененный кпх m-матрице Х с целыми элементами и с парой (г'о, jo) индексов строки и столбца, дает матрицу X', специально эквивалентную матрице X f такую, чтох'^о = x'ioj = О дляг > г0 nj> j0. Кроме того,
352 111-4 Приведение матрицы (г) если xiojo делит xijo и xioj для г > г0, j > jo, то x'iojo = xiojo, (г'г) если X{0j0 не делит ни X{j0, ни X{0j для г или j, удовлетворяющих неравенству г > г0, j > jo, то long(x<ojo) < long(z;ojo). Следующая схема иллюстрирует это преобразование: /х 11 ^t0l \*nl xljo L»oJo bnj0 Xlm \ Cancel-Sub-Rowt And_Sub_Column Cancel_Sub-Row> And_Sub_Column ^11 Liol :lio «ojo 0 V*' nl 0 L»o+l,jo + l Ln,j0+1 'lm L»o+l,m / Доказательство. Цикл обнуляет подстроку г'о, затем подстолбец jo 5 затем снова подстроку го... Величина long(x(- о) не может строго уменьшаться до бесконечности. Итак, x(0j0 делит все xfioj (соответственно все х^0) и, следовательно, подстолбец jo (соответственно подстрока г'о) не изменяется после извлечения информации из CanceLSub.Row (соответственно из С'anceLSub-Column), будучи обнуленным на предыдущем этапе извлечением информации из СanceLSub.Column. Итак, этот подстолбец (соответственно подстрока) нулевой и цикл останавливается. Анализ заканчивается аналогичными рассуждениями, что и в дока- |_зательстве леммы 45. (48) Лемма (приведение подстроки и подстолбца). Алгоритм 6, будучи применен к n x m-матрице Х с целыми элементами и с парой (г'о, jo) индексов строки и столбца, дает матрицу X', специально эквивалентную матрице X, удовлетворяющую условию: х'. • — т'. . X«Jo ~ X*oJ О для г > г'о, j > jo- Кроме того, имеется отличие от алгоритма 5: x(oJo делит все элементы подматрицы {x'ij)i>ioj>j0.
Ill—4 Приведение матрицы 353 Доказательство (леммы 48). I Для начала нужно заметить, что преобразование li0{X')<-li0{X')+li(X') эквивалентно умножению слева матрицы X' на элементарную матрицу. С другой стороны, это преобразование эквивалентно также действию x'ioj <— x'{j для j = j0 + 1, j0 + 2,..., из этого следует, что подстрока X'(io,jo + l •• ти) нулевая. Итак, одно такое преобразование матрицы X' является преобразованием коэффициентов х\- в позиции (io,j), и в этом случае в результирующей матрице x'io-Q не делит ни одно x'ioy. применение СancelJSub .Row-And-Sub .Column будет тогда строго уменьшать long(xJ • ). Конец доказательства аналогичен концу доказательства предыдущей леммы. В каждом проходе тела цикла, за исключением может быть первого раза, значение long(xJ •) строго уменьшается... а в N не существует бесконечной строго убывающей последовательно- 1_сти. Ниже показан конечный алгоритм приведения матриц, который позволит нам доказать теорему 43. I X' <— X; г «— inf (n, ш); for t in l .. г loop X' i— ReduceJSubJiow.And.Sub.Column(X'\ t, j); end loop; Доказательство теоремы 43 Ясно, что в результирующей матрице недиагональные элементы нулевые. Чтобы убедиться в отношении делимости, предположим, что имеется nxm-матрица видаХ = (х^ у), элемент которой хц делит все элементы У, и что матрица У приводится к матрице У. Тогда матрица X' = (^q1 у,) эквивалентна матрице X, и хц делит все элементы У. Действительно, достаточно заметить, что когда элемент делит все элементы матрицы У, он делит также все элементы любой матрицы LYД, так как эти последние элементы являются линейными комбинациями первых. Пример приведения целочисленной матрицы Покажем здесь все этапы приведения Зх4-матрицы. В этом процессе
354 III-4 Приведение матрицы function ReduceJSubJiow-AndJSub-Column (X € Mnm(Z) to € [l,n] jo € [1, m]) return X' € Mnm(Z) is begin X' <— X; loop X' «— Cancel Sub .Row .And Sub .Column^1, t'0,.7'0); exit when x[0j0 делит подматрицу X'(to .. n,jo .. m); Выбрать s > to так, чтобы подстрокаX'(t, jo .. rn) содержала элемент, не делимый на xj0j0; lio(X') ♦— lio(A") + 1<(Л"); end loop; return X'\ end Reduce-Sub-Row-AndSub-Column; Алгоритм 6. Приведение подстроки и подстолбца приведения мы представим только те матрицы, в которых элемент только что обнулился. Начальная матрица — это матрица X: 2 0 4 20\ О -12 18 30 , -14 -60 4 10/ (2000 0 -12 18 30 0 -60 32 150 0 0 0 -2 -116 -290 0 -348 -870 0 0\ /2 0 0 , 0 348 -870 / V 0 Вот левая (L) и правая (R) матрицы перехода: 1 о о\ /-1 "2 62 i = I —7 -5-1 и Я = -21 -14 -3, 1 -34 -5 1 -30 О О 1 2/ Доказательство следующего следствия мы оставляем читателю (можно дать элементарное доказательство, используя упражнение 8). (49) Следствие. Линейное отображение и:Ъп -±Ъп инъективно тогда и только тогда, когда det и ф 0, или еще тогда и только тогда, когда факторгруппа
III-5 Модули конечного типа над кольцом главных идеалов 355 Zn/lmu конечна, и (в этом случае) cardZn/Imu = |detu|. 5 Модули конечного типа над кольцом главных идеалов В этом разделе мы снова вернемся к некоторым естественным результатам предыдущего раздела. Будет рассмотрена более абстрактная точка зрения, и алгоритмические результаты всех предыдущих разделов, относящиеся к векторам из Ап или матрицам из Мпт(Л), будут теперь переформулированы в случае модулей над кольцом главных идеалов. Для поля К хорошо известно, что класс изоморфизмов векторного пространства (конечного типа) характеризуется целым числом (его размерностью). Два векторных К-пространства изоморфны тогда и только тогда, когда они имеют одинаковую размерность. Для кольца главных идеалов классификация модулей конечного типа немного сложнее. Мы покажем, что класс изоморфизмов модуля М конечного типа характеризуется конечной последовательностью элементов ai,a2,.. .ат, в которой а, делит a,+i; а,, равные 1, определяют свободную компоненту модуля М (изоморфную Ап) и другие компоненты кручения М. Последовательность а\, аг,..., ат, которая полностью определяет структуру М, является последовательностью инвариантных множителей М. Способ получения этой классификации состоит в описании М в виде E/F, где Е — свободный модуль конечного ранга. Итак, это приводит нас к изучению классификации пар (Е, F) (две пары (Е, F) и (£", F') изоморфны, если существует изоморфизм из Е на £", который преобразует F в F') и понятию множителей F, инвариантных относительно Е. 5.1 Дополнение, свобода и кручение Подмодуль N модуля М не обязан иметь дополнение в М. Например, 2Z не имеет дополнения в Ъ. Приведем без доказательства несколько соотношений между прямыми суммами и проекциями. (50) Лемма. (г) Пусть N 0 N' — разложение модуля М в прямую сумму. Тогда проекции itn и 7Tjv/ на N и N' соответственно, рассматриваемые как эндоморфизмы М, удовлетворяют соотношениям: 23*
356 III-5 Модули конечного типа над кольцом главных идеалов (И) И обратно, пусть 7г — проекция на М, т.е. эндоморфизм М, удовлетворяющий условию тг2 = 7г. Тогда разложение х = 7г(х)+х—ir(x), х £ М, дает разложение в прямую сумму: М = Im 7г0Кег 7г. Кроме того, Ид/-я" также проекция, и верны равенства: 7Г О (Им - 7Г) = (Им - 7Г) О 7Г = О, Im 7г = Кег(1с1м — я"), 1т(Ым — я") = Кег 7г. (51) Лемма (существование дополнения). (г) Подмодуль N является прямым слагаемым в М тогда и только тогда, когда существует линейное отображение т : М —> N такое, что т(х) = х для всех х £ N. Любое дополнение для N в М изоморфно M/N. (И) Если 7Г : М —> Р — линейное сюръективное отображение, то Кег 7Г является прямым слагаемым в М тогда и только тогда, когда тг имеет сечение <т, т.е. существует линейное отображение a : Р —> М, удовлетворяющее условию тг о a = Idp. В этом случае Imcr является дополнением для Кег тг. Доказательство. I Если N — прямое слагаемое в М, проекция из М на N относительно разложения М = N 0 N' является линейным отображением г, которое и отвечает на наш вопрос. Обратно, если т удовлетворяет условию леммы, то М = N 0 Кег т. Действительно, для х € М можно написать: £ = £i+£2, Xi=r(x), Х2 = X — г(х), где xi 6 ЛГ, хч 6 Кег г. Кроме того, ЛГ ПКегг = 0, в чем легко убедиться. Речь идет о разложении, встречающемся в предыдущей лемме, примененной к проекции т — образу N. Пункт (И) является только переформулировкой пункта (г) предыдущей леммы. (52) Следствие. Пусть Р — свободный модуль, а тг — линейное сюръективное отображение из М на Р. Тогда Кег тг является прямым слагаемым в М, и любое дополнение Кег тг изоморфно Р и, следовательно, свободно.
III-5.1 Дополнение, свобода и кручение 357 Доказательство. I Пусть (е,) — базис Р, х,- — элементы М такие, что 7г(х,) = е,-. Тогда отображение а из Р в М, определенное равенством <т(е,) = х,, является сечением 7г. Это доказывает, что Кег 7г — прямое слагаемое в |_М, из дополнения 0 Ах{. (53) Определения. (г) Пусть дан модуль М над кольцом без делителей нуля А. Определим подмодуль кручения tors(M) модуля М равенством: tors(M) = {х € М | За £ А — {0} такое, что ах = 0}. То, что tors(M) будет подмодулем М, следует из условия на кольцо А (без делителей нуля). (гг) Модуль М называется модулем без кручения, если tors(M) = 0. Другими словами, если для a € А и х € М имеем: ах = 0 => а = 0 или х = 0. (ггг) Модуль М называется периодическим, если tors(M) = М. Или: Vx € М, За £ А — {0} такое, что ах = 0. (ги) Пусть дан подмодуль N модуля М. Замыканием N в М называется подмодуль N из М, определенный равенством: N = {х е М \3a e А- {0} такое, что ax € N}. Этот подмодуль, очевидно, содержит N. Действительно, N — единственный подмодуль М, содержащий N и удовлетворяющий условию Tf/N = toTs{M/N). Примеры Абелева группа П может рассматриваться как Z-модуль. Его периодическая подгруппа является тогда подгруппой в П, состоящей из элементов конечного порядка. В частности, любая абелева конечная группа — это периодическая группа. Пусть П = Ж/Ъ — аддитивная группа действительных чисел по модулю 1. Ее подгруппа кручения является группой Q/Z рациональных чисел по модулю 1.
358 III-5 Модули конечного типа над кольцом главных идеалов Пусть и — эндоморфизм векторного пространства Е конечной размерности над полем К. Пространство Е тогда будет оснащено структурой if [X]-модуля, обозначаемого EUi чтобы отличить его от векторного пространства Е, и будет определено равенством: Р(Х) • х = Р{и){х) для Р(Х) в К[Х] ихвЕ. К[Х]-модуль Еи является тогда периодическим модулем, как это показывает теорема Гамильтона — Кэли: если PU(X) = det(XId£; — u), то Pu(u) = 0, т.е. Pu-Eu = 0. (54) Предложение. Пусть Е — подмодуль свободного модуля L над кольцом А главных идеалов. (г) Подмодуль Е является прямым слагаемым в L тогда и только тогда, когда модуль L/E свободен. (гг) Если к тому же предположить, что L конечного типа, то Е — прямое слагаемое в L тогда и только тогда, когда L/E — модуль без кручения. Доказательство. I Если L = Е 0 £", то L/E изоморфно подмодулю Е модуля L. Однако Е' — подмодуль свободного модуля L над кольцом главных идеалов. Следовательно, он свободен без каких-либо дополнительных предположений конечности. Обратно, предположим, что L/E свободен и пусть 7г: L —> L/E — каноническая сюръекция. Следствие 52 дает нам ответ, и 0|€/Лх,- — дополнение Е. Это завершает доказательство пункта (г). Если L конечного типа, то фактормодуль L/E также конечного типа. В этом случае имеется эквивалентность между свободным модулем L/E и модулем без кручения L/E (предложение 9), что [_доказывает пункт (И). Приведем результат, следующий из предложения 54, о том, что для модуля М фактормодуль M/tors(M) будет модулем без кручения. (55) Предложение. Пусть М — А-модуль конечного типа над кольцом главных идеалов A, a tors(M) — его подмодуль кручения. Тогда М/ tors(M) — свободный модуль и tors(M) — прямое слагаемое в М, изоморфное М/ tors(M), свободно.
III-5.2 Инвариантные множители подмодуля свободного модуля 359 5.2 Инвариантные множители подмодуля свободного модуля В разделе 2.2 мы привели алгоритм, позволяющий преобразовать с помощью автоморфизма в Ап подмодуль &i А х Ь?А х • • • х ЬпА из Ап в подмодульа\Аха2Ах- • хапА, гдеах | а2, а>ъ | а3, ..., an_i | ап. В этом разделе мы покажем, что любой подмодуль может быть представлен в таком виде. (56) Определения. (г) Подмодуль Е модуля Ап называется эквивалентным подмодулю F модуля Ат, если существует изоморфизм <р : Ап —> Ат, переводящий Е в F, что влечет необходимое условие п = тп. (гг) Подмодуль Е из Ап называется нормализованным, если он имеет вид: Е = ахА х a2A x • • • х anA, где ai | а2 | а3 | ... | an-i | «п- (57) Теорема (положение подмодуля в свободном модуле). Любой подмодуль Е из Ап эквивалентен единственному нормализованному подмодулю а\ А х a^A x • • • х апА. Если rang(E') = m, то щ = 0 для г > т. Доказательство. I Подмодуль Е имеет базис из m элементов, где m ^ n (раздел 3.2, следствие 28). Пусть X — n x m-матрица, удовлетворяющая условию \тХ = Е. Алгоритм приведения из теоремы 43 дает две обратимые матрицы L и R такие, что матрица LXR будет приведенной. Если X' = LXR, то подмодуль Im X' является нормализованным подмодулем а\А х а?А x ... х апА, где: а, = xj,- для 1 ^ г ^ m и a,- = О для m < г'^ п. Так как L(lmX) = ImX', то L влечет изоморфизм в Лп, преобразующий подмодуль Е в нормализованный подмодуль. Единственность [_подмодуля (нормализованного) следует из следствия 23 раздела 2.3. Приведем другую эквивалентную формулировку. (58) Предложение (положение подмодуля в свободном модуле). Пусть Е — подмодуль ранга тп свободного модуля L ранга п над кольцом главных идеалов А. Тогда существует базис {/i, /2,..., /п} в
360 IH-5 Модули конечного типа над кольцом главных идеалов L и ненулевые коэффициенты а\, аг,..., ат такие, что: {<4fi}i$i$m будет базисом Е и ах | а2 | а3 | ... | am_i | ат. Коэффициенты а, единственны с точностью до обратимости. Такой базис будет называться адаптированным в модуле Е. Этот последний результат может быть доказан прямо, конструктивным способом. (59) Определение. Пусть L — свободный модуль над кольцом главных идеалов А. Для х £ L определим идеал в А: с(х) = {<р(х) \<p£L* = HomA(L, A)}, называемый содержанием х в L. Говорят, что элемент сх из А является содержанием х в А, если сх порождает идеал с(х). Говорят также, что сх — содержание х в А равносильно тому, что существует <р £ L*, удовлетворяющее равенству <р(х) = cXt и для любого ф € L* элемент сх делит ф(х). Например, если х = (12,15,18) G Ъъ, то: с{х) = {12и + 15v + 18w, u,v,weZ} = НОД(12,15,18)Z = 3Z. Вообще, легко показать, что наибольший общий делитель координат х в произвольном базисе является содержанием х. (60) Лемма. Пусть L — свободный модуль над кольцом главных идеалов. Следующие четыре утверждения эквивалентны. (г) Содержание х в L совпадает с А. (гг) Существует линейная форма <р € L*, удовлетворяющая равенству <р(х) = 1. (ггг) х — не нуль, и Ах — прямое слагаемое (имеет дополнение) в L. (iv) х — часть базиса в L. Доказательство. I Докажем импликацию (гг) => (ггг), используя равенство L = Ах 0 Кег <р.
III-5.2 Инвариантные множители подмодуля свободного модуля 361 I Если у £ ЛхПКег <р, то у = Хх и <р(у) = А<р(х). Это влечет равенство А = 0, затем у = 0. Чтобы разложить у € L в Лж + Кег <р, представляют у в виде у = Хх + (у — Ах); и условие <р(у — Хх) = 0 влечет соотношение А = <р(у). Чтобы доказать импликацию (ш) =>> (it;), достаточно представить L в виде L = Ах (В L' и рассмотреть базис В' в V и дополнить его до базиса {х} U В' в L. Наконец, чтобы доказать импликацию (iv) =>> (и), достаточно рассмотреть базис L, содержащий х и координатную форму на х. Эта [_форма будет линейной формой <р, которая отвечает пункту (и). (61) Обозначение. Если х Е L — ненулевой вектор, и если сх — содержание х, то существует один и только один вектор у такой, что сху = х (рассматривается базис L). Этот элемент, содержание которого равно 1, обозначается х/сх. (62) Лемма. Пусть L — свободный модуль над кольцом главных идеалов А, Е — ненулевой подмодуль L. Пусть х £ Е выбрано таким образом, чтобы с(х) был максимальным среди содержаний Е; сх — содержание х в L и <р € L* такие, что <р(х) = сх. Тогда верны следующие свойства: (г) L = Ах/сх 0 Кег <р, (И) Е = Ах®{Кет<рС)Е), (ш) ф{Е) С Асх для всех ф £ L*. Доказательство. I Пункт (г) следует из того, что (р(х/сх) = 1, и из доказательства предыдущей леммы. Покажем теперь, что <р(Е) С Асх. Действительно, Асх + <р(Е) является идеалом в Л и, следовательно, имеет вид Ad. Элемент d описывается равенством Хсх + <р(у) = <р(Хх + у), где А £ А и у £ Е. Откуда: с(х) = Асх С Асх + <р(Е) =AdC c(Xx + у). Максимальность с(х) влечет равенство с(х) = с(Хх + у) и, следовательно, <р(Е) С Асх. Это включение доказывает, что сх делит <р(у), I и позволяет представить у в виде:
362 III-5 Модули конечного типа над кольцом главных идеалов У = Ыу)/сх)х + У- (<р(у)/сх)х. Это равенство доказывает, что сумма (Н) прямая. Докажем последний пункт (Hi). Имеем: ф(Е) = Аф(х) + ^(Ker (p n E) С с(х) + ^(Кег <рПЕ)= Ad. (5) Можно представить d в виде d = \сх -\-ф(у)> где у Е Кег <рС\Е. Если р : L —> Кег <р обозначает проекцию в разложении L = Ах/сх®Кет <р, то р(х) = О и р(у) = у, и, как следствие, d= (фор + <р)(\х + у). Это равенство доказывает, что d Е с(Ах + у). Используя (5), получают с(х) С с(\х + у). Максимальность с(х) влечет Асх = Асх+ +ф(Кет <рГ\ Е), т.е. ^(Кег <р П Е) С Асх. Вместе с (5) это последнее [_включение влечет ф(Е) С Асх, что доказывает пункт (ш). Другое доказательство предложения 58 Предложение 58 можно также доказать с помощью индукции по п = rangL. Можно предположить, что Е ф 0. Применим предыдущую лемму к L и Е, полагая а\ = сх, е\ = х/сх и L\ = Кег (р. Тогда: L = Ае\ ф Li, £ = Aaiei 0 (Li П £). Так как rangLi = п — 1, то можно применить предположение индукции к паре (Li, Li П £). Тогда существует базис ег,.. .,еп в Li и ненулевые скаляры 02,..., ат такие, что а, делит a,+i и а^ч,..., amem будет базисом Li П £. Из равенства, приведенного выше, следует, что ^lel j ^2e2j • • • Ятет баЗИС Е\ С\ , 62, • • • , 6П — базис L. Остается доказать, что а\ делит 02. Пусть ф координатная форма на z<i\ в силу пункта (Ш) предыдущей леммы ф(Е) С Аа\, в частности, ^(а2^2) = 02 € Aai, что и требовалось доказать. (63) Определение. Используя те же обозначения, что и в предложении 58, коэффициенты (a,-)i^,-^m, или, скорее, идеалы Ла,, которые определяются по коэффициентам единственным образом, называют инвариантными множителями подмодуля Е по отношению к свободному модулю L. Замечание. Инвариантные множители Е в L зависят от модуля L, в котором содержится Е. Пусть, например, Е = 4Z, L\ = 2Z и
III-5.2 Инвариантные множители подмодуля свободного модуля 363 Z/2 = Z, тогда Е С L\ С £2- Следовательно, Е в Ьг имеет своим неприводимым множителем число 4 или идеал (4), тогда как Е в L\ имеет своим неприводимым множителем число 2 или идеал (2). Следующее предложение дает формулы, связывающие инвариантные множители Е в L с минорами матрицы, столбцы которой порождают Е. Эти формулы позволяют вычислить инвариантные множители. Эти вычисления реализованы в случае, когда ранг L мал, но они предпочтительны во всех случаях технического приложения раздела 4. (64) Предложение. Пусть а\, 02,..., am — инвариантные множители подмодуля Е ранга m свободного модуля L. Определим через АЯ{Ь) А-модуль q-линейных знакопеременных форм на L и через ФЯ(Ь,Е) идеал, порожденный следующим образом: V>(*i,*2,...*g), Ф €Ag(L), (xUX2,...Xq) С Eq. (г) Тогда для 1 ^ q ^ m идеал ФЯ{Ь,Е) порождается элементами a\CL2.. .aq. (гг) Кроме того, если рассмотреть матрицу произвольной системы образующих в Е над произвольным базисом из L, тоФя(Ь,Е) порождается q х q-минорами этой матрицы (т.е. НОД миноров), и, следовательно, a i02 .. .ая являются наибольшим общим делителем q x q-миноров матрицы образующих в Е. Доказательство. I Покажем сначала, что ФЯ(Ь,Е) С (a\a2 .. .aq). Любой элемент х Е Е можно представить в виде х = fi^i/i + £2^2/2 + Ь ZmO>mfm, где {/i, /2, • • ? /п} — базис L, адаптированный в Е. Термы, которые встречаются в разложении формы ф(х\, хъ,.. -хя) имеют вид: £а{1а{2...а>дф(/{1, /<а,..., fiq), где 1 ^ г*1 < г2 < ... < iq ^ n и £ G А] и все они кратны а\а^ .. .ая в силу делимости на а*. Покажем, что aia2...a9 принадлежит ФЯ(Ь,Е). Рассмотрим на L относительные координатные формы (7rt)i^j^n в базисе {/i j /2j • • • j /n}- Тогда форма ^ определяется равенством: V>(*i,*2,...,*g) =det(7Tj(Xj)). I и является линейной знакопеременной g-формой на L такой, что:
364 111-5 Модули конечного типа над кольцом главных идеалов ^(01/1,02/2, • • ,a>qfq) = o,ia2.. .ад^(/ь/2,- ••>/?) = ai02...ag. Отсюда следует нужный нам результат. |_Второй пункт вытекает из следующей более общей леммы. (65) Лемма. Пусть А — произвольное коммутативное кольцо. Обозначим через {е\, ег,..., еп} канонический базис А-модуля Ап. Если {s\, S2,..., sp} — система образующих подмодуля Е модуля Ап, то идеал ФЯ(АП,Е), определенный как и в предыдущем предложении, является идеалом, порожденным q х q-минорами матрицы системы {s\, $25 • • •, Sp} в базисе {ei,e2,.. .,е„}. Доказательство. I В действительности здесь речь пойдет о внешнем вычислении. Разложим каждый элемент Sj данной системы образующих в каноническом базисе: Sj = J27=i sijei- Пусть ф Е Ag(Er). Если 1 ^ ji < 21 < • • • < jg ^ Р, то Ф{8^,8,2,...,8,ч) = ]Г ±MHHOp/JV(c<1,6f-a,...,6<J. 1^»1<»2< <tq^n В этом выражении I и J обозначают последовательности индексов, а Минор/j обозначает минор, соответствующий индексам строк или столбцов, образованных / и J, соответственно. Если х\, £2, ..., хя — семейство q элементов из Е, то ^(^1, ^2» • • •, xq) является линейной комбинацией слагаемых формы i>(sjx, Sj2,..., Sjq). А равенство выше доказывает, что ф(х\, Х2,..., хя) принадлежит идеалу, порожденному q х g-минорами. Отсюда следует, что ФЯ(АП,Е) содержится в идеале, порожденном этими минорами. Обратно, рассмотрим q x д-минор Минор/j, определенный возрастающими последовательностями индексов I и J. Тогда форма ф(х\,Х2,..., xq) = det(7Tj(xj))t-6/, где 7Г* — проекция на г-ую компоненту, и является g-линейной знакопеременной формой, удовлетворяющей условию: 1>(*ji , *ia, • • • , Sjq) = MHHOp7J . |_Это доказывает, что минор принадлежит идеалу ФЯ(АП,Ь). Базис {/i, /2,..., fn} в L, встречающийся в предложении 58 не един-
II 1-5.2 Инвариантные множители подмодуля свободного модуля 365 ствен. Однако подмодуль, порожденный m первыми векторами /,, единствен, как показывает следующее предложение. (66) Предложение. Пусть А — кольцо главных идеалов, Е — подмодуль ранга m свободного модуля L ранга п, имеющего инвариантными множителями ai, Q2,..., ат- Если {/i, /г, • • •, /п} — базис L, адаптированный к Е, т.е. Е = ®?=1А(ц/{,то: _ (г) Семейство f\, /2,..., /т — базис модуля Е, замыкания Е. В частности, Е является прямым слагаемым в L, а L/E свободен: l = i?eл/т+1 еAfm+2е• • -ел/п и l/~e ~ Afm+1 0л/т+2е• • -®Afn. (гг) фактормодуль Е/Е является периодическим модулем конечного типа, и существует изоморфизм: ~Ё/Е ~ A/{ai) х A/{a2) x • • • х A/(am). В этом выражении некоторые А/(а,{) могут быть тривиальными, если ai обратимы. {iii)t Существует изоморфизм модулей L/E ~ Е/Е 0 L/E, который можно схематизировать, говоря, что периодический модуль Е/Е имеет всегда кручение фактормодуля L/E и свободу свободного модуля L/E. Доказательство. I Покажем, что Е = ф^ Aft. Прежде всего, для 1 ^ i ^ m, fi Е Е, так как a^/j Е Е и а* ненулевые. Обратно, каждое х Е L можно представить в виде х = у + z, где у Е 0™ х Afi и z E ©J=m+i Afr. Тогда, если х Е £, т.е. если существует такое ненулевое а, что ах € Е, то az = 0, откуда z = О, и наконец, х Е 0^i АД- Пункты (г) и (гг) теперь легко доказываются. Чтобы доказать пункт (iii), заметим, что £ = Ё0^, где F = Afm+i © Afm+2 © • • •© A/ViJ это дает равенства: L/E = Е/Е + {F + Е)/Е = ~Ё/Е 0 (F + Е)/Е, так как (F + Е) С\ Е = Е. Однако каноническое отображение F ►->• (F + E'J/E' сюръективно с ядром F П £ = 0, и следователь- |_но, (F + Е)/Е ~ F ~ Ь/Е, что завершает доказательство.
366 111-5 Модули конечного типа над кольцом главных идеалов 5.3 Инвариантные множители модуля конечного типа Поговорим сначала о прямых суммах однопорожденных модулей. Од- нопорожденный Л-модуль имеет вид М = Ах. В этом случае линейное отображение из А в М, определенное соответствием а »-)- ах, сюръек- тивно и имеет своим ядром идеал-аннулятор М: Апп(М) = {аеА |аМ = 0}, что индуцирует изоморфизм А/ Апп(М) ~ М. Обратно, если / — произвольный идеал из А, то модуль А/1 является однопорожденным (с Т в качестве образующей) с аннулятором /. (67) Теорема (структура модулей конечного типа). Пусть М — А-модуль конечного типа над кольцом главных идеалов. (г) Существует разложение М в прямую сумму однопорожденных ненулевых подмодулей: * M = Mi0---0Mg, где Ann(Mg) С Ann(Mg_i) С ...С Ann(Mi) ^ A Подмодуль кручения модуля М является прямой суммой М{ с ненулевым аннулятором и, следовательно, допускает в качестве дополнения свободный подмодуль, состоящий из Mj, с аннулятором 0: tors(M) = 0 Mi, Free = 0 Mj и М = tors(M) 0 Free. Ann(M,)^0 Ann(Mj)=0 (и) Другая формулировка этого результата такова: М изоморфен прямой сумме: М - A/h Ф A/h 0 • • • 0 A/Iq, где Iq С Iq-\ С ... С h ф А. Из этих условий идеалы U определяются единственным образом и называются инвариантными множителями модуля М. Так как эти идеалы главные, U = (а,), то говорят иногда, что а,, определенные с точностью до обратимости, являются инвариантными множителями М. Они не обратимы и удовлетворяют отношению делимости: ai | а2, а2 | а3, ag_i | aq.
III-5.3 Инвариантные множители модуля конечного типа 367 Доказательство. I Построим сюръекцию из Ап на М, используя п векторов канонического базиса Ап в качестве семейства п образующих М. Следовательно, модуль М изоморфен фактормодулю Ап/Е, где Е — подмодуль Ап ранга т ^ п. В силу предыдущих результатов существуют ненулевые коэффициенты (&i, 62,..., 6m), удовлетворяющие отношению &i | 62 | • • • | Ьт-1 | Ьт, и базис {/i, /2,..., fn} из Ап такой, что {^1/1,62/2,..., bmfm} будет базисом Я, т.е. ап = Afi 0 Af2 0 • • • е Afn и я = a&i/i e лб2/2 е • • • е Abmfm. Отсюда следует изоморфизм: м ~ A/{bi) 0 л/(б2) е • • • е А/(ьт) ® Ап~т. Исключая обратимые 6,, которые приводят частные А/(Ь{) к тривиальному виду, и записывая Ап~т = А/{0} 0 А/{0} 0 ... 0 0Л/{О}, вводим последовательность идеалов (Ii)i^i^q) удовлетворяющих условиям: M~A/Ii®Alh®---®AIIq, где Iq С Iq-\ С ... С h ф А. |_Остальное легко выводится из этого отношения. Примененный к кольцу целых чисел Z, этот результат дает структуру абелевой группы конечного типа. (68) Предложение (структура абелевой группы конечного типа). Любая абелева группа конечного типа П является прямой суммой своей периодической подгруппы tors(fl), которая является подгруппой, состоящей из элементов конечного порядка, и свободной группы ранга г, изоморфной Ъг. Подгруппа tors(fl) является конечной и изоморфной конечному произведению циклических групп: tors(fl) ~ Ъ/п\Ъ х Ъ/п2Ъ х • • • х Z/ntZ, где щ — целые числа, большие или равные 2, удовлетворяющие условию: п\ | П2 | пз | ... | nt-\ | nt. Целые числа г, t и щ, 712,... щ определяются структурой группы П единственным образом. Числа п\, П2,.. .nt являются инвариантными множителями абелевой группы конечного типа П.
368 111-6 Беглый обзор 6 Беглый обзор Начав с очень простой леммы исключения, с помощью которой мы быстро вывели несколько конкретных применений (вычисление определителей, вычисление базиса пространства, порожденного конечным семейством векторов, и др.), к концу этой главы мы добрались до классических результатов теории модулей над кольцами главных идеалов: инвариантные множители, классификация модулей конечного типа (в частности, абелевых групп конечного типа). Была предпринята попытка установить каждый раз привилегию алгоритмической точки зрения и реализацию некоторых алгоритмов на языке Ада, однако без отречения от понятий линейной алгебры. Мы отдавали себе отчет в том, что эффективность линейной алгебры «конечного типа» над кольцом главных идеалов обуславливается вычислением коэффициентов Безу в этом кольце главных идеалов. Читатель, желающий получить классический обзор, может обратиться к одной из глав прекрасной работы Самуэля: «Алгебраическая теория чисел». Там он найдет компактное изложение (2 страницы!), касающееся модулей над кольцами главных идеалов. Эта замечательная небольшая работа может быть рекомендована любому интересующемуся теорией чисел. Однако в литературе существуют и другие изложения: например, очень полное у Бурбаки, книга II «Алгебра», глава 7 «Модули над кольцами главных идеалов1, или книга Ленга, Algebra. Последняя работа Симса, «Algebra, A Computational Approach», представляет очень хорошее введение в эту теорию. Однако в этой главе имеется большой пробел: отсутствует применение теории модулей над кольцами главных идеалов к приведению эндоморфизмов векторного пространства конечной размерности — классификация с точностью до подобия2, теория, в которой кольцо главных идеалов К[Х] играет основную роль. Приведем перечень (без доказательства) основных результатов. Приведение эндоморфизмов Если и — эндоморфизм векторного /^-пространства Е конечной раз- раздел книги Бурбаки называется «Вычисление инвариантных множителей», но думал ли, Бурбаки, что действительно можно вычислить инвариантные множители матрицы с помощью миноров этой матрицы? 2Две матрицы А и В подобны, если существует обратимая матрица Р, удовлетворяющая равенству А = РВР~1, это влечет отношение эквивалентности, классы которой называются классами подобия. Это понятие нельзя путать с понятием эквивалентных матриц: А и В эквивалентны, если существуют две обратимые матрицы L и Я, удовлетворяющие условию А = LBR.
111-6 Беглый обзор 369 мерности, соответствующая ему структура К[Х]-модуля на Е, обозначаемая EUi определяется следующим образом: Рх = Р(и)(х) для РеК[Х] и хеЕ. Аналогично, если U Е МП(А), присоединяют к нему структуру К[Х]-модуля на Кп, обозначаемую К$. Тогда любой результат на К[Х]-модуле Еи (или К$) интерпретируется как результат на классе подобия и. Ниже приводятся самые важные результаты. (г) Подмодули Еи являются в точности векторными подпространствами Е, стабильными по отношению к и. Многочлен Р обнуляет Еи тогда и только тогда, когда Р{и) = 0. Он обнуляет х тогда и только тогда, когда Р(и)(х) = 0. (И) Два модуля Еи и Fv Аг[Х]-изоморфны тогда и только тогда, когда и и v сопряженные, т.е. если существует ^-изоморфизм <р из Е на F такой, что (рои = v о <р. Этот результат может быть также выражен в терминах матриц. К[Х]-модули Кц и Ку изоморфны тогда и только тогда, когда U и V подобны, т.е. U = PVP~l, где Р 6 GLn(K). Доказано также, что это эквивалентно тому, что матрицы ХЫп — U и XIdn — V из МП(А[Х]) эквивалентны: XIdn - U = L х (XIdn - V) х Я, где L, Я Е GLn(K[X]). (Hi) Пусть £/, f/i, f/г, ..., Uk — квадратные матрицы порядков п, п\, П2, ..., Пк соответственно, где п = п\ + n*i + h п*. Сказать, что Кц ~ Кц1 х Кц* х • • • х Кц*, рассматриваемые как А'[Х]-модули, тоже самое, что сказать, что матрицы U и diag(f/i, £/2, • • •, Uk) подобны. (iv) Элемент х Е Е является образующим в Аг[Х]-модуле Еи тогда и только тогда, когда Е = Кх + Ки(х) + Ки2(х) + \- Киг(х) + • • • Тогда говорят, что векторное пространство Е циклично под и. В этом случае, если Р(Х) — минимальный полином от и и если п = deg(P), то легко доказать, что {х, и(х), и2(х),..., un_1(x)} — базис Е. Выражение и в этом базисе является матрицей Фробениуса, соответствующей Р (или сопутствующей матрицей, соответствующей Р): Фр = (° 1 0 0 0 1 0 0 0 -<*о -«1 -«2 \ \0 0 0 1 -a„_i/ если Р{Х) = Хп + an-xX"-1 + • • • + 04Х + а0. М- 1017
370 111-6 Беглый обзор (v) Понятно, что для каждого унитарного многочлена Р имеется модель циклического пространства с минимальным многочленом Р. Для этого достаточно рассмотреть факторкольцо К[Х]/(Р), которое является векторным Jf-пространством размерности deg(P), и оснастить его эндоморфизмом-умножением на X. В каноническом базисе К[Х]/(Р) этот эндоморфизм имеет для матрицы Фр свой минимальный (или характеристический) многочлен Р. Если Еи определено как и ранее, то имеет место #[Х]-изоморфизм из К[Х]/(Р) на Еи (1 преобразовывается в х). Итак, класс подобия циклических эндоморфизмов характеризуется минимальным многочленом (впрочем, равным характеристическому многочлену). (vi) Китайская теорема формулируется следующим образом: если Р\ и Рч — Два взаимно простых многочлена, а Р = Р\Ръ — их произведение, тогда Фр подобна diag^px, Фр2), что влечет китайский изоморфизм между K\X\-iiloдулями: К[Х]/(Рг) х К[Х]/(Р2) ~ К{Х]/(РгР2). (vii) На алгебраически замкнутом поле матрицы Фробениуса связаны с матрицами Жордана. Действительно, если Р(Х) = (X — А)п, простое изменение базиса показывает, что Фр подобна матрице Жордана J\: Jx = Китайская теорема доказывает, что матрица Фробениуса Фр подобна блочной диагональной матрице, блоками которой будут жордановы матрицы (пишут Р(Х) = (X-Ai)ni .. .(X - \k)nk). (viii) Можно рассмотреть матрицы Фробениуса как кирпичи, с помощью которых можно построить любой эндоморфизм и подобие. Действительно, так как Еи — Аг[Х]-модуль кручения конечного типа (в силу теоремы Гамильтона — Кэли характеристический многочлен обнуляет Еи), то теорема об инвариантных множителях формулируется следующим образом: существует такой базис #, что матрица и в этом /А 0 0 U 1 А 0 0 0 1 0 0 о\ 0 А 1 0 \)
111-6 Беглый обзор 371 базисе будет выражаться следующим образом: /Фр, 0 0 \ О Фр2 0 : I I ) : О \ О 0 0 ФРк/ где Р{ — многочлены, удовлетворяющие условию Pi \ Ръ \ Рз - - • \ Pk> и к тому же единственны. Они являются инвариантами подобия эндоморфизма и, а матрица называется нормальной формой Фробениуса. Можно также интерпретировать этот результат в виде: E = Ei®Ei®---®Ek, где Е{ — стабильные (по отношению к и) и циклические под и пространства, минимальный многочлен и \ Е{ делит минимальный многочлен и | Д+ь Инварианты подобия характеризуют класс подобия и: два эндоморфизма и и v подобны тогда и только тогда, когда они имеют одни и те же инварианты подобия. (ix) Многочлен Р*, последний инвариант подобия, является в точности аннулятором Еи. Следовательно, Pk — минимальный многочлен для w, а произведение Р\Р2 ... Рк инвариантов подобия не что иное, как характеристический многочлен для и. Отметим аналогию между векторным пространством конечной размерности, оснащенным эндоморфизмом и (который скрывает структуру Аг[Х]-модуля кручения) и конечной абелевой группой (которая тоже скрывает Z-модуль кручения). Таким образом, характеристический многочлен соответствует порядку группы, и теорема Гамильтона — Кэли приближена к теореме Лагранжа (которая утверждает, что пх = О в любой группе порядка п); целое число, соответствующее минимальному многочлену, является наименьшим общим кратным порядков элементов группы (существует элемент группы, порядок которого является наименьшим общим кратным порядков, существует элемент векторного пространства, минимальный многочлен которого является минимальным многочленом пространства Е в целом)... Имеются по крайней мере две причины, по которым мы не стали рассматривать приведение эндоморфизмов: первая причина заключается в том, что реализовать простой перевод недостаточно с педагогической точки зрения (основная теорема, касающаяся представления в виде блоков Фробениуса, может быть доказана более простым способом 24*
372 111-6 Беглый обзор с помощью структуры сопутствующего векторного ./^-пространства). Однако, было бы крайне желательно хорошее изложение некоторых тем (алгоритмы вычисления характеристического многочлена, минимального многочлена, определение инвариантов подобия, представление в виде блоков Фробениуса... сопровождаемые многочисленными примерами), которое существенно удлинило бы эту главу. Нужно отметить, что такие алгоритмы используют специальные методы для матриц — не вычисляют, например, характеристический многочлен как определитель с коэффициентами в # [X], а просто пользуются вычислениями в К и приспособленными для этого методами. Этот подход используется в литературе: можно, например, обратиться к диссертации Озел- ло [140], в которой описываются алгоритмы вычисления нормальной формы Фробениуса матрицы А Е Мп(К). Сложность этих алгоритмов полиномиальна от п в случае, когда К = Q или К = Ъ/pL. В ее библиографии можно найти множество других рекомендуемых работ, касающихся явного приведения эндоморфизмов.
Упражнения 1. Евклидовы возрастающие алгоритмы a. Дать примеры евклидовых делений а = bq + г, в которых 6 | а игфО. b. Предположим, что <р — евклидов возрастающий алгоритм над кольцом А, т.е. такой, что если а делит 6 и 6 не нуль, то <р(а) ^ <р{Ь). Доказать, что если 6 | а и если 6 ф О, то евклидово деление по возрастающему евклидову алгоритму а на 6 дает в результате нуль. c. Убедиться, что большинство известных евклидовых алгоритмов возрастающие. 2. Явное выражение подмодуля a. Если А — кольцо главных идеалов, то доказать, что любой подмодуль в Ап имеет вид ImX, где X — некоторая п х m-матрица. Доказать, что существует подмодуль, который нельзя представить в виде КетХ. b. Доказать, что над кольцом главных идеалов любой модуль конечного типа может быть определен m образующими /i, /2, ..., /m и п соотношениями: {flll/l + «12/2 + ••• + fllm/m =0, <*2i/i + «22/2 + ••• + a2mfm = 0, flnl/l + <*n2/2 + * * * + CLnmfm = 0. c. Сформулировать несколькими способами явное описание подмодуля в Ап. 3. Система образующих для SL»2(Z) Чтобы выразить в явном виде систему образующих группы SL2(Z), — группы 2 х 2-матриц с целыми элементами и с определителем 1, —
374 III Модули над кольцами главных идеалов вводят следующие матрицы в SL2(Z): a. Вычислить A2, BqBqi, B~l. Выразить Ся через А и Bq. Каков порядок А? В? С? b. Пусть а, 6 G Z, где 6^0. Доказать, что существует такое q Е Z, что (; ■;)(:)■(?)■ -"-'<"' Доказать, что существует матрица М, равная произведению матриц Cq и удовлетворяющая условию: М c. Доказать, что SL»2(Z) порождена матрицами А и В, а также матрицами Л и С (в частности, SL,2(Z) порождена элементом порядка 4 и элементом порядка 3). 4. Метод приведения к ступенчатому виду для вектора Что даст метод приведения к ступенчатому виду, примененный к вектору (xi, £2, • • • j хт) как к 1 х т-матрице? 5. Необходимое и достаточное условие того, что Ах является прямым слагаемым в Ап Пусть А обозначает кольцо главных идеалов, а х Е Ап. a. Дать необходимое и достаточное условие того, что х входит в часть базиса Ап. Доказать, что это условие эквивалентно тому, что Ах является прямым слагаемым в Ап. b. В случае, когда х удовлетворяет этому условию, дать алгоритм, позволяющий вычислить базис Ап, содержащий х. Привести пример базиса Z4, содержащего вектор х = (30,42,70,105). 6. Определители и линейная независимость над коммутативным кольцом Пусть А — унитарное коммутативное кольцо, an — положительное целое число. Для / С {1,2,..., п} обозначим через pi проекцию из Ап :-'.•
Упражнения 375 на Л7, а через р, проекцию на г-ую компоненту. Это упражнение доказывает следующую теорему: т векторов v\, V2,..., vm из Ап линейно зависимы тогда и только тогда, когда существует такое a E А — {0}, что для любого подмножества I из [1,п] с кардинальным числом тп, имеет место равенство <*det(p/(t;i),p/(t;2),... ,p/(t;m)) = 0. В частности, п векторов из Ап линейно зависимы тогда и только тогда, когда их определитель является делителем 0 в А. a. Пусть v\, V2,..., vm — m векторов из An, J С {1,2,..., ri] с кардинальным числом m — 1. Пусть дан индекс j, и полагают / = J U {j}. Доказать, что m 5^(-1)* det(pjvi,... ,pjvi-i,pjvi+i, • • • ,pjvm) -Pj{vi) = _ Г 0, если j G J, " \±det(p/t;i,...,p/t;m), если j g J. b. Доказать теорему (например, по индукции). c. Доказать, что в Лп, и вообще в любом модуле, порожденном п элементами, п + 1 векторов линейно зависимы. 7. Орбита вектора под действием GL„(2£) Рассмотрим отношение эквивалентности, определенное на Ъ7, следу- ющим образом: если, по определению, 3 А Е GL»2(Z) такая, что Л Охарактеризовать более простым способом это отношение эквивалентности. (Указание: доказать существование в любом классе эквивалентности вектора, вторая координата которого нулевая.) Обобщить на размерность п. 8. Определитель матрицы М и порядок Zn/lmM Пусть дана квадратная матрица М порядка п с целыми элементами, нужно вычислить элементарным способом порядок факторгруппы Zn/lmM. :■(! 0-0-
376 III Модули над кольцами главных идеалов a. Предполагается, что М имеет порядок 2 и верхнюю треугольную форму. Какое условие нужно наложить, чтобы группа Z2/ImM была конечной? В этом случае каков ее порядок? Указание: можно начать, например, со случая диагональной матрицы. b. Предполагается, что М имеет порядок 2. Показать, что существует такая матрица U Е GL2(Z), что UM имеет верхнюю треугольную форму, затем ответить на вопросы из пункта а. c. В общем случае показать, что факторгруппа Zn/ Im M конечна тогда и только тогда, когда det(M) ф О, и в этом случае факторгруппа Zn/ImM является группой, имеющей порядок, равный абсолютному значению det(M). 9. Нормы и число элементов частного Пусть в — целое квадратичное число, т.е. комплексное число, удовлетворяющее унитарному уравнению второй степени с целыми коэффициентами. Предположим, что в — истинное квадратичное целое число, т.е. не элемент из Ъ. Трехчлен, в котором в является корнем, будет тогда единственным, а в обозначает второй корень. Тогда кольцо А = Z[0] оснащено автоморфизмом <т, удовлетворяющим условию а(в) = в (этот автоморфизм единственный, инволютивный и оставляет фиксированным Z), и алгебраической нормой N, определенной равенством N(z) = zcr(z). Для z Е А доказать, что N(z) = det(m2), где mz обозначает умножение на z. Для z Е А* вывести, что факторкольцо A/(z), где (z) обозначает идеал в А, порожденный z, является кольцом, имеющим \N(z)\ элементов. 10. Вычисление ядра а. Доказать, что ядро матрицы X име- у __ I о 1-2 3 1 2 14-11 1-12 11 ет ранг 2 (предъявить базис). Вычислить базис {R\, Д2, Лз, ^4> Я5} из Z5, удовлетворяющий условию: Ъь = Е 0 Кег X, Е = ZRi 0 ZД2 0 £Дз, Кег X = ZД4 0 ZЯ5- Ь. Выразить в явном виде линейные формы (Af-(x))i^^5, удовлетворяющие условию: х = \\(x)Ri + А2(х)Д2 H Ь А5(х)Д5-
Упражнения 377 11. Поиск образа и ядра /1 2 3 4> a. Применить алгоритм приведения к сту- v = | к б 7 8 пенчатому виду к матрице X. \9 10 11 12 b. Предъявить базис В образа X. Определить отношения между столбцами X, выражение этих столбцов в В и выражение векторов В через эти столбцы. c. Предъявить базис ядра X и разложение ЪА = Кег X 0 Е. 12. Несколько предупреждений Пусть F — подпространство из Z4, порожденное тремя векторами: Хх = (6,12, -12,18), Х2 = (15,0,30,15), Х3 = (10,10,0,20). a. Выразить базис F (какова его размерность?) и отношение между векторами Х{. b. Доказать, что {Л^Лг} является множеством линейно независимых элементов F и что Хз не принадлежит подпространству, порожденному Х\,Х2. Доказать, что {Х\,Хъ} не может быть дополнено до базиса F. Тот же вопрос и для перестановки векторов Х\, Х2 и Хз. 13. Решить, является ли вектор линейной комбинацией других векторов Рассмотрим векторы Х\ = (1,-1,2,1), Хч = (3,1,2,1) и Хз = (3,5,2,3) из Z4. Является ли вектор В = (5,3,4,3) линейной комбинацией векторов Х\, Хч и Хз? 14. Матричное уравнение В = АХ Рассмотрим следующие матрицы: А = a. Доказать, что А является инъекцией из Ъъ в Z4. b. Доказать, что ImВ С Im А и построить матрицу С размеров 3x3, удовлетворяющую условию В = А х С. c. Показать, что фактормодули Im A/Im В и Ъг/\тС изоморфны. Каков порядок фактора Im A/ Im B1 2 1 2\ 3 2 0 1 1 1 1 2 0/ В — > lj (Ъ 5 3 \г 3 10\ 1 7 1 6 -1 5/
378 III Модули над кольцами главных идеалов 15. Проекторы Пусть R и S — две квадратные взаимно обратные п х п-матрицы. Любое разложение п = р + q индуцирует горизонтальное разложение R и вертикальное разложение 5: р _ /р/ | р/м е- ( S'\ Г71Р (К :пх р, Я" : п х д, Я_(Я|Я). S-^J, где |5,:рхП) 5//:gxn. Доказать, что R'S' и Д;/5/; являются двумя проекторами (т.е. двумя идемпотентами) суммы Idn и образов 1тД', 1т Д" соответственно. 16. Над кольцом главных идеалов любой подмодуль свободного модуля свободен Пусть (Ei)iei — семейство А-модулей (А — произвольное унитарное коммутативное кольцо) такое, что любой подмодуль Е{ свободен. Нужно доказать следующий результат: любой подмодуль М из ф,-6/ Е{ изоморфен прямой сумме 0^6/ М,-, где М,- С Е{ и, в частности, что М свободен. Доказательство использует трансфинитную индукцию по / (если / конечно, то речь идет об обычной индукции). Для этого снабжают / структурой корректного порядка, т.е. для которого любое непустое подмножество / имеет наименьший элемент. Положим также: a. Доказать, что существует Mi С Li Г\М, изоморфный подмодулю Ei и удовлетворяющий условию: Li П М = (Li П М) ф М<. b. Показать, что М = 0*6/ M,-. c. Доказать, что над кольцом главных идеалов любой подмодуль свободного модуля свободен. 17. Китайские формулы для 3 модулей Предъявить в явном виде изоморфизм между Ъ± х Ъ$ х Ъчь и Zgoo- Можно найти 3 целых числа ai,a2,a3, удовлетворяющих условию: (1 (mod 4), (0 (mod 4), Г 0 (mod 4), О (mod 9), a2 = < 1 (mod 9), a3 = < 0 (mod 9), 0 (mod 25), [О (mod 25), [l (mod 25).
Упражнения 379 18. Нормализация произведения циклических групп Пусть (а\, 02,..., ап) и (&i, 62,..., 6П) — две последовательности целых чисел (или, в общем случае, элементов кольца главных идеалов). По определению, они эквивалентны, если: 3<р: Ъп -^ Ъп, <p{aiZ х а2Ъ х • • • х апЪ) = b{L x b2Z x • • • х bnZ. Обозначение (а\, а2,..., ап) ~ (b\, 62,..., 6П). Эквивалентность двух последовательностей влечет изоморфизм между факторгруппами 7Lai х Ъа2 х • • • х Ъап и Ъъх х Ъь2 х • • • х 1<ьп, через частный изоморфизм <р. То, что это соответствие истинно, не очевидно: это будет доказано в упражнении 36. Для начала речь пойдет о выражении единственной нормализованной последовательности (6i, 62,..., 6П), которая эквивалентна (ai, 02,..., an), через a,. a. Доказать, что (paa,p^6) ~ (p^a,pa6), где р — простое число, не делящее ни а, ни 6. Указание: можно доказать, что (а, 6) ~ (а', 6') как только аЛЬ = а' ЛЬ' и ab = а'Ь'. b. Для простого числа р обозначим через vp(x) показатель р в разложении на простые множители числа х. Запишем: о^р-Л-'Ц, а2 = р^'Ц, ..., ап=р""(0-)а'П) где р не делит а'{. Затем упорядочим последовательность vp(ai), ..., vp(an) в возрастающую последовательность а* ^ • • • ^ а£. Доказать, что (ai, 02,..., an) ~ ~ (р""^, рара'<2,.. .,papajj). Предъявить нормализованную последовательность, эквивалентную (3 600,960,40). c. Повторить предыдущую операцию для каждого р в случае, когда: а1=П^р(а0> .... ап = П^р(ап)' р р и, полагая 6Х = JJpa", ..., 6n = JJpap, доказать, что последовательность (61,62,.. .,6П) нормализованная и эквивалентная данной последовательности (ai,02,..., an). Сравнить этот метод с методом, описанным в этой главе. d. Для 1 ^ к ^ п показать, что 6i62 .. .Ьк = HC^{atla<2.. .atJ 1 ^ ii < г2 < • • • < ik ^ п).
380 III Модули над кольцами главных идеалов 19. Какие группы изоморфны? Среди следующих абелевых групп (порядка 48) найти изоморфные группы. Z48, ^2 X ^24, Z4 X Z12, ^8 X Z6, Zi6 X Z3, Z2 x Z2 x Z12, Z2 x Z4 x Z6, Z2 x Z8 x Z3, Z2 x Z2 x Z2 x Z6, Z2 x Z2 x Z4 x Z3, Z2 x Z2 x Z2 x Z2 x Z3, 20. Вычисление обратной матрицы к квадратной матрице Пусть X — п х n-матрица с элементами в кольце главных идеалов. Написать алгоритм, позволяющий вычислить обратную матрицу к X (если X не обратима, то алгоритм должен этот случай исключить). Применить этот алгоритм к следующим примерам: [ -95 111 -16 , ( i в о 1 21. Вычисление полного прообраза Пусть А — кольцо главных идеалов, и : Ат —> Ап и v : Ар —> Ап — два морфизма. Придумать метод, позволяющий вычислить базис подмодуля u_1(Imt;) в Ап. Можно рассмотреть морфизм (и | v), определенный на Ат х Ар соотношением: Ат хАр Э (х,у) •-> и(х) + v{y) е Апу и проекцию р\ : Ат х АР —> Ат на первый множитель. Рассмотреть следующий пример: (1 4 2 4 7\ /1 0 0\ 2 3 14 4 2 1 О 322561' 13-101 4 0 2 5 5/ \4 -2 1/ 22. Вычисление пересечения двух подмодулей Пусть Е и F — два подмодуля в Ап (А — кольцо главных идеалов) , порожденные соответственно векторами Х\, Хъ, ..., Хт и У\,
Упражнения 381 Уг, . ..,Yp. Придумать алгоритм, вычисляющий систему образующих пересечения EOF. Рассмотреть следующий пример: E = lmX, F = ImY, где / 1 2 3\ ( 1 3> Х = -1 2 2 1 ^ 1 1 1 -3/ и У = \ 0 ^-2 -2 3 1 23. Система сравнений a. Объяснить, как найти все решения (xi,X2,X3,X4) Е Z4 системы: {ацХ1 + ^12^2 + сцзхз + ai4^4 = 0 (mod gi), a2iXi + 022^2 + агз^з + ^24^4 = 0 (mod дг), fl3i^i + ^32^2 + азз^з + аз4^4 = 0 (mod дз), где dij и д< принадлежат Ъ (некоторые д* могут быть нулевые). b. Решить систему линейных уравнений, а затем следующую систему сравнений: 4xi + Зх2 + 2х3 + х4 = О, 5xi + 6х2 + 7х3 + 8х4 = О, .12x1+ Пх2+ Юхз+ 9х4= О, 4xi+ Зх2+ 2х3+ х4= 0 (mod 8), 5xi + 6х2 + 7х3 + 8х4 = 0 (mod 2), 12xi+ Пх2+ Юхз+ 9х4= 0 (mod 6). 24. Подмодули максимального ранга Пусть А — кольцо, L — подмодуль Ап. a. Предположим, что L — свободный подмодуль ранга п, и обозначим через d определитель базиса L в базисе Ап (нужно отметить, что все определители этих базисов равны с точностью до обратимого элемента). Доказать, что d не является делителем 0 и что dAn С L (можно дать два доказательства, из которых одно будет верно лишь для главного случая). b. Предположим, что А — кольцо главных идеалов. Доказать эквивалентность rang(L) = п <$=> 3d G А — {0}, dAn С L.
382 III Модули над кольцами главных идеалов 25. Дополнение и замыкание Рассмотрим три модуля М С N С L над кольцом А. a. Если М является прямым слагаемым в L, показать, что М — прямое слагаемое в N. В дальнейшем в этом упражнении предполагается, что А — кольцо главных идеалов, a L — свободный модуль конечного типа. b. Доказать, что если М — прямое слагаемое в L и если М и N имеют один и тот же ранг, то М = N. c. При каком условии М = М? Напомним: W={xeL\3aeA- {0}, ах G М}. d. Предположим М С N. Доказать, что М = N эквивалентно rangM = rangAT. 26. Ортогональность и дополнения Если х,у G Zn, будем полагать, что (х,у) = ]СГ=1 Х«У« и М1 = {х G Zn | V у G М, (х, у) = 0}, где М — подмножество в Ъп. a. Пусть {/ь/г,-•-,/п} — семейство из п элементов из Ъп. При каком условии матрица (fi,fj)ij будет обратимой? b. Пусть М — подмодуль Ъп ранга т. Доказать, что ML — подмодуль в Ъп ранга т — п. Указание: можно сначала предположить, что М — прямое слагаемое, затем заметить, что М1 = М . c. Доказать, что MLL = М и что, в частности, MLL = М тогда и только тогда, когда М является прямым слагаемым в Ъп. 27. Идеалы кольца целых квадратичных Пусть в — целое квадратичное (в £ Ж) и А = Щв\. Доказать, что любой идеал I в А порожден двумя элементами. Кроме того, / = An + Az, где п — целое число, определенное из равенства nZ = IП Z. 28. Формула Пика Рассмотрим квадратную сетку на комплексной плоскости, построенную из точек с целыми координатами, и многоугольник V с вершинами в точках этой квадратной сетки. Обозначим через п число точек
Упражнения 383 квадратной сетки, находящихся строго внутри V, а через / число точек квадратной сетки, находящихся на границе V. Формула Пика выражает площадь V: площадь('Р) = £ + п — 1. Например, для приведенного справа многоугольника V п = 13, f = II и по формуле Пика площадь('Р) = //2 + п — 1 = 17,5, что можно легко проверить. a. Доказать формулу Пика для п = 0 и / = 3 (многоугольник тогда будет треугольником и 3 вершины треугольника являются единственными точками, принадлежащими треугольнику). Указание: рассмотреть две стороны треугольника и показать, что векторы, соответствующие этим сторонам, образуют базис Z2. b. Доказать формулу Пика с помощью индукции. 29. Теорема о ядре Пусть М — модуль над кольцом главных идеалов А. Для а £ А обозначим через Кегм а подмодуль М, определенный равенством Кегм а = {х € М | ах = 0}. a. Пусть ai,ci2,...,а* — взаимно простые элементы А, и пусть а = а\аъ .. .a,k — их произведение. Доказать теорему о ядре, которая гласит, что Кегм а = Кегм <*i Ф • • • Ф Кегм в* и, кроме того, каждый проектор Кегм а -> Кегм сц является гомотетией. b. Перенести предыдущий результат на случай, когда М — векторное Jf-пространство, и — эндоморфизм в М, и М снабжено следующей структурой К[Х]-модуля: Р ф х = Р(и) • х = апип(х) Н Ь aiu(x) + а^х, п где х е М и Р(Х) = ]Г а,-Х* € /фГ]. о c. Пусть М — векторное С-пространство, состоящее из бесконечно дифференцируемых функций из 1 в С, на котором действует оператор дифференцирования ^. Тогда М наделено следующей структурой СЭД-модуля: P.f = Pidl)(f) = Qn^ + ...+aift+aof< п /ем, Р(0 = $>,<'ес[<]. О
384 III Модули над кольцами главных идеалов Вычислить {X - А) • еА7; {X - А)" • extf; Кег(Х - А)". Пусть Р(<) = tn+an-itn~1-\ |-ai<+ao — унитарный многочлен из C[t] степени п, которому соответствует дифференциальное уравнение dnf dn~lf df t n Если P(t) = Hi=l{t - Л,)г«, доказать, что {thXtt | 0 ^ j < rt, 1 ^ i ^ k} — базис пространства решений этого дифференциального уравнения. 30. Примерные компоненты модуля кручения Пусть М — модуль кручения над кольцом главных идеалов А. Для максимального элемента тг (т.е. экстремального) из Л определим тг-примарную компоненту модуля М: Мп = {i G М | 3 n E N : тгпх = 0}. Если П — система, представляющая максимальные (экстремальные) элементы А, то доказать, что имеет место каноническое разложение: М = 0^6п ^» и что Для ^ € М тг-компонента хп элемента х является кратным х. (Указание: использовать теорему о ядре.) 31. Примерные модули над кольцом главных идеалов (задача) В этом упражнении А обозначает кольцо главных идеалов, тг — экстремальный элемент кольца А. Нас интересуют тг-модули над А, т.е. Л-модули М, обнуляющиеся степенью тг: тг*М = 0 для некоторого к. Цель упражнения — доказать следующий результат: Любой тг-модуль М над кольцом главных идеалов является прямой суммой однопоро- жденных подмодулей. Доказательство, приведенное ниже, является непосредственным следствием основного материала, помещенного в главе и не использует никакого предположения о конечности. a. Доказать следующие утверждения: (г) если N — подмодуль М, удовлетворяющий условию М = АГ + тгМ, то N = М, (и) если (Ж|)|е/ — базис векторного Л/тгЛ-пространства М/тгМ, то (Я|)|"€/ — минимальная система образующих в М, (ш) для х 6 М имеет место следование ах = 0,х^0=>тг|а, (it;) если тгМ = 0,6/^тгх,, где тгх,- ф О, то (х,),е/ является множеством линейно независимых элементов векторного Л/тгЛ-про- странства М/тгМ. b. Предположим, что тгМ является прямой суммой однопорожденных модулей. Доказать, что М является прямой суммой однопоро- жденных модулей. (Указание: если тгМ = 0,6/Атгх,, где тгх, ф О, то
Упражнения 385 доказать, что можно дополнить (х^),-6/ до базиса векторного А/пА- пространства М/тгМ с помощью {uj)jej, удовлетворяющих равенствам nuj = 0.) с. Закончить, используя индукцию по к. 32. Абелевы группы данного порядка п Обозначим через в(п) число конечных абелевых групп порядка п. a. Предполагается, что п — степень простого числа р: п = рт. Написать алгоритм, перечисляющий в(п) абелевых групп порядка п, и доказать, что 9(п) зависит только от г: в(рг) = р(г). Перечислить абелевы группы порядка 64. Составить таблицу р(г) для 1 ^ г ^ 20. b. Пусть даны абелева группа П и q 6 N*. Будем полагать, что Ц(я) = {х 6 П | qx = 0}. Если П — абелева группа порядка пт) где п и т взаимно просты, то доказать, что И ЧТО имеет порядок п. c. Если пит взаимно просты, доказать, что 9(пгп) = 9(п)в(гп). Выразить в в зависимости от р. Сколько абелевых групп порядка 21 600? 33. Вычисление инвариантных множителей a. Найти базис подмодуля Е = {(xi,..., хп) \ х\ + - • • + хп = 0} и дополнение Е в Z. Каков ранг Е? Тот же вопрос и для подмодуля F = {(хь...,хп) | xi = ••• = хп}. b. Проверить, что ЕП F = {0}, и доказать, что Zn/E<$ F ~ Z/nZ. 34. Другое вычисление инвариантных множителей Рассмотрим фактормодуль М = ЪА/Е, где # — подмодуль Z4, порожденный тремя векторами (7,-2,5,-5), (10,-2,8,-2), (24,-6,18, — 12), и обозначим через {/1,/2,/з»/4} семейство образующих в М, образ канонического базиса {ei, ег, ез, в4}. a. Показать, что М изоморфен Z/6Z х Z x Z. b. Выразить через /i, /г, /з и Д, три элемента <72> <7з, <74> Удовлетворяющих условию М = Z<72 Ф ^^з Ф ^<74, элемент #2 имеет порядок 6, а <7з и 5Г4 бесконечного порядка. 25-1017
386 III Модули над кольцами главных идеалов 35. Инвариантные множители и НОД миноров Доказать истинность предложения 64, касающегося инвариантных множителей и НОД миноров для матрицы, приведенной далее, инвариантные множители которой вычислены в тексте. /6 8 4 20\ X = 12 12 18 30 \18 4 4 10/ 36. Условие наличия одинаковых инвариантных множителей относительно Ап Пусть Е и F — два подмодуля Ап, где А — кольцо главных идеалов. Доказать, что Е и F имеют одинаковые инвариантные множители относительно Ап тогда и только тогда, когда фактормодули Ап/Е и АпIF изоморфны. 37. Определяющие соотношения Пусть П — нетривиальная абелева группа, порожденная тремя образующими <7i, <72,0з, УДовлетвоРяюЩими соотношениям: 3(7i + Q2 + <7з = 0, 25(7i + 8</2 + Ю<7з = 0, 46</i + 20</2 + Ug3 = 0. Доказать, что П является циклической группой с 19 элементами. (Указание: абсолютное значение некоторого определителя равно 19.) Найти такую систему образующих в Z/19Z. 38. Образующие и определяющие соотношения (продолжение) Пусть П — нетривиальная абелева группа, порожденная тремя векторами <7i,<72,<73, удовлетворяющими условиям 2(7i + 4(72 - 6(73 = 0, 8(7i + 20</2 - 16<7з = 0, 129l + 72<72 - 324(7з = 0. Доказать, что порядок П является делителем 288. Полагая к тому же, что П — группа с 96 элементами, доказать, что П изоморфна группе Z2XZ4X Zi2. 39. Упражнение Чарльза Лутвиджа Доджсона "Не is in distress," the Governor explained as they left the court. "Her Radiancy has commanded him to place twenty-four pigs in thoses four sties, so
Упражнения 387 that, as she goes round the court, she may always find the number in each sty nearer to ten than the number in the last." "Does she call ten nearer to ten than nine is?" said Norman. "Surely," said the Governor. "Her Radiancy would admit that ten is nearer to ten than nine is—and also nearer than eleven is." "Then I think it can be done," said Norman1... 1— Он в глубоком отчаянии, — пояснил губернатор, когда наши путешественники покинули плац. — Ее Блистательство повелела ему разместить в четырех угловых свинарниках 24 поросенка так, чтобы при обходе плаца число поросят в очередном свинарнике неизменно оказывалось ближе к 10, чем число поросят в предыдущем. — Считает ли Ее Блистательство, что 10 ближе к 10, чем 9? — спросил Норман. — О да! — подтвердил губернатор. — Ее Блистательство не только считает, что 10 ближе к 10, чем 9, но и выражает уверенность в том, что 10 ближе к 10, чем 11. — Тогда, я полагаю, поросят можно разместить требуемым образом, — сказал Норман. (Перевод Ю. А. Данилова, Л. Кэррол «История с узелками», М., Мир, 1973.) 25*
Решения упражнений 1. Евклидовы возрастающие алгоритмы а и с. Смотрите упражнения 12 и 13 главы И. Ь. Пусть а = bq + г евклидово деление а на 6. Так как Ь делит а, Ь также делит г; и если предположить, что г не нуль, то (p(b) ^ (р(г) (в силу возрастания <р) и <р(г) < <р(Ь) (так как а = bq + г — евклидово деление). Получили противоречие. Следовательно, г нуль. 2. Явное выражение подмодуля a. Модуль Ап нётеров, и следовательно, любой подмодуль порожден конечным числом векторов. Если Е С Ап представимо в виде КегХ, где X — матрица с элементами в Л, то Ах G ^, где А ф 0, влечет принадлежность х 6 Е. Естественно, существует подмодуль, не удовлетворяющий этому свойству. Теория модулей над кольцами главных идеалов состоит, в частности, в представлении в общем виде подмодулей из Ап. b. Существует сюръекция из Ат на модуль в вопросе... c. Пусть X, У, Z, ... — матрицы подходящих размеров. Следующие выражения являются явным представлением модулей: ImX, КегХ, ImXnimY, Z(ImX), Z'l{lmY) и др. 3. Система образующих для SL2(Z) a. Имеют место соотношения: А = — J, А = /, BqBqi = Bq+qi, B~l=B.q) Cq = ABq, С = AB~\ С* = I. Кроме того, Bq = Bq и В конечного порядка. b. Евклидово деление а на 6 может быть записано в следующем виде: Ь' = a -f 6g, где |6'| < |6|, a q — искомое.
Решения упражнений 389 с. Пусть а, 6, с, d элементы матрицы из SL,2(Z). В силу пункта b рассмотрим подходящую матрицу М. Так как матрицы имеют определители 1, то можно записать: что доказывает тот факт, что SL»2(Z) порожден Л и В (и конечно, Л и С). 4. Метод приведения к ступенчатому виду для вектора Метод дает скаляр d и обратимую m x m-матрицу Д, удовлетворяющие условию: (rf, 0,0,..., 0) = (xi, х2, х3,..., хт) х Я, и следовательно, Ad = Ах\ + Ах^ + ... + Ахт\ d является наибольшим общим делителем х*, а первый столбец R дает коэффициенты Безу. 5. Необходимое и достаточное условие того, что Ах является прямым слагаемым в Ап a. Если /i, /2,..., fn — базис Ап, где /1 = х, то линейная форма #, проекция на /i, т.е. определенная равенством <7(]СГ=1 ^»/«) = ^1» Удовлетворяет условию <7(х) = 1. Применив отношение Безу 5^"=1 х,^(е,) = 1, доказываем, что координаты х, вектора х попарно взаимно просты. Обратно, если координаты взаимно просты, применим равенство Безу: ]C?=i м*х* = 1> которое позволяет определить линейную форму д (через равенство д(у) = ]СГ=1 и»У»)> Удовлетворяющую условию д(х) = 1. Рассмотрим разложение Ап = Ах 0 Кет д (пишут у = Ах + (у — Ах) и выражают А, чтобы д(у — Ах) = 0). Достаточно рассмотреть базис {/2,/з,...,/п} Kertf. b. Можно определить коэффициенты /—1 2 1 1\ Безу, и как следствие, линейную форму д, р=\ * ~^ ~ * ~М а значит, можно выразить базис Кег^. На- I 0 0 1 0 1 пример, для х = (30,42,70,105) можно \ 0 0 0 1/ взять следующую линейную форму: д(у) = -3yi - 2у2 + Уз + Ул- Она будет удовлетворять условию д(х) = 1. Алгоритм приведения к ступенчатому виду, примененный к матрице д = (—3,-2,1,1), дает обратимую матрицу Д, три последних столбца которой образуют базис Кег £. Эти три столбца и вектор х образуют базис Z4.
390 III Модули над кольцами главных идеалов 6. Определители и линейная независимость над коммутативным кольцом a. Достаточно разложить по первой строке определитель порядка т, образованный из столбцов векторов pjVi, ограниченный сверху строкой (pjVi,.. .,PjVm). Как только эта строка появится в нижней части этого определителя, то результат будет равен нулю или ± det(piv\,..., p/vm), знак берется в зависимости от места первой строки в последнем определителе. b. Пусть Yl*iLi ^iyi = 0 — соотношение линейной зависимости, где А,0 ф 0. Тогда YlTLi ^iPivi = 0 Для любого /, и следовательно, если |/| = т, разложение будет иметь вид: т det(p/vi,...,p/i;f-0_i, ^XiPiVi, p/v,-0+i,.. .,pivm) = 0. Откуда следует A,-0 det(p/vi,... ,pivm) = 0. Докажем соответствие по индукции по m. Это очевидно для т = 1. Пусть J С {1,2,.. .,п}, где \J\ = т- 1, тогда: т а^2(-1)х det(pjvu.. .,pjv,--i,pjt;,-+i,... ,pjvTO) ■ v% = 0. (6) В силу пункта а суммы т ]Г(-1)' det(pjvi,.. .,pjv.--i,pjv.-+i, • . .,pjvm) -Pj(vt) t=i нулевые, если j 6 «/, и если j £ J, то сумма является определителем, а по предположению теоремы она является делителем 0 (через а). Тогда возможны два случая: 1) один из коэффициентов V{ в формуле (6) не нулевой, тогда эта формула дает нетривиальное соотношение между Vi. 2) все коэффициенты нулевые, в частности, adet(pjvi,... ,pjvm_i) = 0. Это доказывает, в силу предположения индукции, что век- тораы v\, t>2,..., vm-i линейно зависимы, а векторы v\, t>2, • •., vm тем более линейно зависимы. c. Пусть vi, ^2,... ,vn+i — векторы из Лп. Применим результат пункта а с m = n + 1 и J = [1, п], тогда получим: п + 1 ^det(t;i,...,t;i_i,t;f-+i,...,t;n+i)vt = 0, (7)
Решения упражнений 391 так как все индексы проекции j находятся в J. Если det(vi,..., vn) ф О, то формула (7) дает нетривиальное соотношение зависимости между V{) иначе v\, V2,.. .,vn будут линейно зависимы, так как их определитель будет нулевым в силу пункта Ь. Для модуля Е, порожденного п векторами, использовать то, что Е является фактором Ап. 7. Орбита вектора под действием GL„(Z) Если (а, 6) находятся в зависимости с (а', &'), то, в частности, имеем aZ+ ЬЪ = a'Z+ 6'Z, и тогда НОД(а,&) = НОД(а',&'). Если (а, 6) эквивалентно вектору (d, 0), то d обязательно будет наибольшим общим делителем а и 6 (лемма исключения 6). Заключаем, что две пары эквивалентны тогда и только тогда, когда они имеют один и тот же наибольший общий делитель. Это легко обобщается на случай произвольной размерности. Действительно, любой вектор Ъп эквивалентен вектору вида (rf, 0,0,.. .0) (см., например, упражнение 4). 8. Определитель матрицы М и порядок Zn/lmM a. Пусть М треугольная матрица, М = I п , 1, где а и d не нули. Легко доказать, что интервал [0, \а\ [х[0, |rf| [ является системой, представляющей Z2 по модулю ImM. С другой стороны, если а или d нулевые, то частное Ъ2/\тМ бесконечно. b. Это влечет в точности лемму исключения и то, что частные Ъ2/\тМ и l?/\m.UM канонически изоморфны (через U). c. Пункт а обобщается на любую верхнетреугольную матрицу. В то же время повторное применение леммы исключения доказывает, что для любой квадратной матрицы М порядка п существует U G GLn(Z) такая, что UM является верхнетреугольной матрицей. 9. Нормы и число элементов частного Рассмотрим целые числа p=99hs = 9 + 9. Уравнение от 9 будет иметь вид 92 — s9 + р = 0. Если z = х + у9, где х,у £Z, то матрица т2 в базисе {1,6} имеет вид: х -ур\ у x + ys ) ' Итак, N(z) = (x -f у9)(х + у9) = х2 + ру2 + xys = det(mz). Кольцо А изоморфно Z2, и результаты упражнения 8 позволяют нам закончить доказательство.
392 III Модули над кольцами главных идеалов 10. Вычисление ядра а. Метод приведения к ступенчатому виду дает матрицу X' и правую матрицу перехода R: 1 О О О (Г X' = | 2 -1 0 0 0 1 1-10 0, R /1 0 0 о \0 4 -1 -2 0 0 -3 1 1 0 1 -2 1 1 1 0 "2\ -1 2 0 -3/ которые удовлетворяют равенству X' = XR. Два последних столбца матрицы R образуют базис КегХ, а три первых столбца — базис дополнения. Ь. Столбцы R"1 дают искомые линейные формы: Ai(x) = xi, А2(х) =-2xi-5x2-6x3-2x5, А3(х) = 3xi + 2х2 + 3х3 + х5, А4(х) = xi + Зх2 + Зх3 + а?4 + ^5, А5(х) = 2xi + Зх2 + 4х3 + х5. 11. Поиск образа и ядра Приведем этапы метода приведения к ступенчатому виду X которые позволяют легко вычислить матрицу перехода R: X' /1 5 9 1 0 0 \0 /1 5 9 1 0 0 \о 2 3 6 7 10 11 0 0 1 0 0 1 0 0 0 0 -4 -8 - -8 -16 - -2 -3 1 0 0 1 0 0 4\ 8 12 0 0 0 (1 5 9 1 0 0 1/ \0 0\ /1 -12 -24 -4 0 0 1/ 5 9 1 0 0 \о 0 -4 -8 -2 1 0 0 0 -4 -8 -2 1 0 0 3 7 11 0 0 1 0 0 0- 0- 1 -2 1 0 4\ 8 12 0 0 0 /1 5 9 1 0 0 1/ \0 0\ /1 -12 -24 -4 0 0 и 5 9 1 0 0 \о 0 -4 -8- -2 1 0 0 0 -4 -8 -2 1 0 0 0 -8 -16 -3 0 1 0 0 0 0 1 -2 1 0 4\ 8 12 0 0 0 1/ о\ 0 0 2 -3 0 W Ступенчатый вид матрицы X доказывает, что векторы Х[ = (1,5,9) и Х'2 = (0,-4,-8) образуют базис ImX' = ImX. Знание матрицы
Решения упражнений 393 R 6 GL»4(Z), удовлетворяющей равенству X' = XR) позволяет получить искомые отношения. Приведем здесь матрицу перехода R и обратную к ней: 1 -2 1 2\ /12 3 4> . О 1—2—3 1 х_ [О 1 2 3 Л~ ■ О 0 1 О I ' Л " I 0 0 1 О ,0 0 0 1/ \0 0 0 1, Тогда XR • е3 = X' • е3 = 0 и XR • е4 = X' • в4 = 0. Следовательно, столбцы матрицы R дают отношения: Xi - 2Х2 + Х3 = 0, 2Xi - ЗХ2 + *4 = 0, Х[ = Хи Х'2 = -2ХХ + Х2. Что касается обратной матрицы к Д, она является выражением Х{ в базисе Х+: Х\ = Xij Х2 = 2Х\ + ^2) -^з = 3A"i + 2Х2, Х4 = 4A"i + ЗХ2. с. Два первых столбца матрицы X являются базисом дополнения Кег Х) а два последних столбца матрицы R образуют базис Кег X. Приведем (используя столбцы матрицы R~l) разложение векторов канонического базиса в прямую сумму: ei=Ri® 0, е2 = (2/Ji + Д2) Ф 0, е3 = (ЗДх + 2Д2) 0 Дз, е4 = (4Дх + ЗД2) 0 Д4. 12. Несколько предупреждении a. Матрица X, образованная векторами Х\, Хч) X3l была рассмотрена в качестве примера в разделе 3.2. Алгоритм приведения к ступенчатому виду дает следующие матрицы: Д Е SL»3(Z) и X' £ М4,з(^)' 1 0 0> у, _ | 82 30 0 Л ~~ ' -162 -60 0 83 30 0> Эти матрицы удовлетворяют условию X' = XR. Это доказывает, что {Х[, Х'2} является базисом F, а последний столбец матрицы Д отвечает условию: 5Х\ + 2Х? — &Хз = 0. b. Компоненты Х\ и Хч делятся на 3, для Хз это неверно: Хз не принадлежит подпространству, порожденному Х\ и Хч- В то же время 6Лз = 5Xi + 2X2. Тогда можно заключить, для любого х Е F, что 6х является линейной комбинацией Xi и Хч- Семейство {Xi,^}, следовательно, не может быть дополнено до базиса F.
394 III Модули над кольцами главных идеалов 13. Решить, является ли вектор линейной комбинацией других векторов Метод приведения к ступенчатому виду, примененный к 4 х 4- матрице, столбцами которой являются Х\, Х?, Хз и В, доказывает, что Х\) Хъ и Хз линейно независимы и что 2В = Х\ + 2Х^ + Хз. Следовательно, В не является линейной комбинацией Х\) Хъ и Хз. 14. Матричное уравнение В = АХ а. Ь. Приведем к ступенчатому виду матрицу (А \ В)) образованную добавлением к матрице А справа матрицы В, и которая соответствует линейному отображению (х, у) i-» Ах+By. Этот процесс дает ступенчатую матрицу W и матрицу перехода R. Приведем по порядку матрицы {А | В), W и Я: /2 1 2 '3 2 0 111 \1 2 0 5 5 3 3 /0 ' 1 0 0 0 \о 3 1 1 -1 -1 2 0 0 0 0 10\ /10 0 7| 2 10 6 ' 113 5/ \2 3 8 -4 6 1 0 0 0 0 0 0\ 0 0 0 0 0 0 0 0 0/ -1 -1 -1\ -1 1 -2 -1 -1 -3 1 0 0 0 1 0 0 0 1^ Это доказывает, что матрица А инъективна. Матрица перехода R позволяет выразить следующие отношения: Вел=- Ве3 = - В е2 = -А С = Эти соотношения доказывают, что ImB С 1тЛ, и представляют в явном виде матрицу С, удовлетворяющую условию В = А х С. Легко убедиться в том, что отображение А : Z3 —¥ Im A/ Im В имеет своим ядром ImC, а так как detC = —4, фактормодуль Im-A/ImB является абелевой группой порядка 4 (вопрос: группой Z4 или Ъъ х Ъ-?.).
Решения упражнений 395 15. Проекторы Для х G Ар, у G Aq, z G Ап имеют место равенства Д(х, у) = R'(x)+ +R"{y) и 5(z) = Sf{z) + S"(z); следовательно: Я' : Лр -» Лп, R" : Л9 -» Лп, S' : Ап -+ Ар, 5" : Лп -> Л9. Тогда Д5 = R'S' + R"S" (произведение блочных матриц); отсюда R'S' + R"S" = Idn. Отношение SR = Id„, представленное в виде произведения блочных матриц, доказывает, что S'R' = Idp, S'R" = О, S"R' = О, S"R" = Idg. Теперь легко убедиться в том, что ii'S' и R"S" являются проекторами. 16. Над кольцом главных идеалов любой подмодуль свободного модуля свободен a. Обозначим через р,- проекцию индекса г, а через дг: gt : L,- Г) М -> -> p,(LtDM) ограничение р, на L,DM. Следовательно, морфизм д, является сюръекцией из L,- П М на модуль Pi(L{ П М) (этот модуль свободен по предположению). Значит, существует такой подмодуль М,- С L,DM, что Ь{Г\ М = Кег д, 0 М,- иМ< — искомый. b. Сумма J2 М% является прямой. Действительно, рассмотрим соотношение xi + £2 Н V хп = О, где xi 6 Mtl, х2 G Mt-2, ..., xn G Mtn и ii < i2 < ... < in- n— 1 элементов xi, x2, ..., xn-i принадлежат L,n DM, а из последовательности xn G (Ltn П М) П Mtn = {0} следует, что х„ — нулевой, а по индукции все х, нулевые. Докажем теперь, что М = 5^М,-. Предположим противное, что ^ £ ]С^«- Тогда множество J = {j G / | 3 х G Ь; П М, х ^ ^М^} не пустое, и если jo — наименьший элемент из J, то существует х G Lj0 П М, х $. J^Mj. В этом случае можно записать: х = у + z, где у G Lj0 П М, z G Mj0, а так как у G Lj0 П М, то существует j < j0, для которого у G Ьj Г) М. Отсюда у £ Lj Г\М для j < jo п у £ J2iei ^»- Это противоречит тому, что j0 наименьший элемент в J. c. Свободный модуль над А изоморфен сумме модулей, изоморфных Л, и если А — кольцо главных идеалов, любой подмодуль А свободен. 17. Китайские формулы для 3 модулей Если ai, 02, аз удовлетворяют этим сравнениям, то отображение Z х Z х Z Э (xi, x2, х3) н> aixi + a2x2 + «з^з € Z
396 III Модули над кольцами главных идеалов дает, при переходе к частному, изоморфизм между желаемыми группами. ПОЛОЖИМ, ЧТО 7711 =4, 7712 = 9, 771з =25, ТОГДа МОЖНО НаЙТИ M{j для г\ ф j, удовлетворяющие условию Mij -\-Mji = 1, где MtJ — кратное 771,-; а, определяются через а\ = М21М31, a<i = М12М32, аз = М13М23 и удовлетворяют этим сравнениям. Например, Mi2 = -8, M2i = 9, М13 = -24, М31 = 25, М23 = -99, М32 = 100, ai = 225, a2 = -800, a3 = 2376. Это можно привести по модулю 4 х 9 х 25 = 900: а\ = 225, аъ = 100, аз = 576. Но имеется большое число более простых примеров (см. главу IV). 18. Нормализация произведения циклических групп a. Имеет место эквивалентность (а, 6) ~ (аЛб, aV6) и, следовательно, если аЛЬ = о!Л 6' и аЬ = а'Ь1', то (а,6) ~ (aA6,aV6) ~ (а',6')- Остальная часть вопроса рассматривалась ранее. b. Имеют место следующие отношения: (3600, 960,40) = (24 х З2 х 52, 26хЗх 5, 23 х 5) ~ (23 X З2 X 52, 24 хЗх 5, 26 X 5) (перестановка степеней 2), ~(23 х52, 24 X 3 X 5, 26 X З2 X 5) (перестановка степеней 3), ~ (23 X 5, 24 X 3 X 5, 26 X З2 X 52) (перестановка степеней 5), ~ (40, 240,14 400). c. Для этого метода необходимо вычисление разложения на простые множители, поскольку для метода, указанного в главе, необходимо только вычисление наибольшего общего делителя. d. Левая часть инвариантна относительно операции {di,aj) <— (а,- Л aj,di V a,), i ф j, что легко доказывается (или непосредственно из делимости, или из выражения НОД как линейной комбинации аргументов). Переходя от последовательности (ai,a2,.. .,а„) к последовательности (&i, 62,..., 6„) с помощью этих операций, имеем: НОД{6{1 .. МЛ 1 ^ •! < • • • < ik^ n) = = НОД{а|1 .. .aik | 1 ^ i! < • • • < ik ^ п}, и в случае отношений делимости 6i | бг» &2 | &з • • • > первый член равен 6162...Ьк.
Решения упражнений 397 20. Вычисление обратной матрицы к квадратной матрице Можно, комбинируя строки, найти матрицу L\ с определителем 1 такую, что матрица L\X имела бы нулевой первый столбец, за исключением элемента с индексом (1,1). Если этот элемент не обратим в кольце, то X не обратима и алгоритм останавливается. Иначе, комбинируя строки, можно найти матрицу Li с определителем 1 такую, что матрица Ь2Ь\Х имела бы нулевой второй столбец за исключением элементов с индексами (1,2) и (2,2). Необратимость последнего элемента приводит к необратимости матрицы X и к остановке алгоритма. В противном случае, если элемент с индексом (2,2) обратим, то можно прибавить (в LiL\X) к строке 1 строку, кратную строке 2, так, чтобы обнулить элемент с индексом (1,2), т.е. найти матрицу L'2 с определителем 1 такую, что {L'2L2L\X)\j = 0. Если можно продолжить этот процесс до конца, то найдется матрица L с определителем 1 (L = L,nLn...L,2L2L[ L\, где полагают L\ — Idn для однородности) такая, что LX будет диагональной обратимой матрицей; обратная к X тогда легко вычисляется. Это приводит к следующему алгоритму, в котором X' и L обозначают переменные матричного типа размеров пхп, X' начинается с Л", L — с Id„. В алгоритме 7 используется отношение L х X = X', приводящее к X' = Ып. Этот способ хорошо известен в числовом анализе (метод Гаусса- Жордана). На практике по мере вычисления производят деление на обратимый ведущий элемент. Приведем вычисление обратной к первой матрице поэтапно: 6 -7 1 -95 111 -16 15 -18 4 -1 1 0 0 -1 1 0-3 4 -16 -1 0\ /1 -1 0 -95 -6 0, 0-11 -240 -15 1/ V0 0 1 -16 -1 0> -95 -6 0 0 0 \) 16 1 0\ -95 -6 0 45 3 1/ 1 0 0 1 0 .0 0 1 0 0 1 0 -1 -1 1 0 0 1 ] ] 111 7 0\ /10 0 95 6 0 , 0 1-1 45 3 1/ \0 0 1 156 10 1> 140 9 1 45 3 1> Х~1 = 156 10 W 95 6 0 45 3 1; 156 10 Г 140 9 1 45 3 1 Приведем второй пример, иллюстрирующий особенность матрицы X размеров 4 х4 и в котором фигурирует только преобразование матрицы X' (и нет матрицы L):
398 III Модули над кольцами главных идеалов /3 6 7 4> 13 2 1 2 6 9 1 \4 3 2 О, 1 3 2 1\ /1 3 2 1\ /1 3 2 V О 3-1-1] [О 3-1-1] [оЕВ-1-1 0 0 5 -1 I ' I 0 0 5-1 I ' I О О 5-1 ,4 3 2 0/ \0-9-6-4/ \0 0-9-7> function Inverse (X € Мп(А)) return X х is X1 <— X; L <— Idn begin for t in 1 .. n loop ^&ЖмЖ', Комбинировать пары строк матрицы X' с индексами (t, ii + 1) ... (t, n) так, чтобы обнулить Х,-^+1,..., Х»,п и произвести те же действия над теми же строками матрицы L; if X[i не обратим then raise Inversion-Error, end if; A<—X[ti\ эяоддо^^ -X-i,i .. n 4 * X^t n] Litl .. n i A Li,! .. nj for j in i.. i -1 loop dugmtti*^^ X>,i .. n ^ ^\j,i .. n — ^^M,i .. ni LjA •• n < bj,i .. n — ALi,i .. n; end loop; end loop; £ x-'x:** #?s* $' ж щг<щрщтш^^-т xrx return L; end Inverse; Алгоритм 7. Обращение матрицы в кольце главных идеалов Представление необратимого коэффициента 3 доказывает, что данная матрица не обратима. 21. Вычисление полного прообраза Легко убедиться в том, что u_1(Imt;) = pi(Kei(u \ v)). Итак, достаточно вычислить базис Ker(u | v), что дает систему образующих в Pi(Ker(u | v)), затем базис р\(Кет(и \ v)). Пусть U и V — матрицы и и v в каноническом базисе. Матрица (U | V) элемента (и \ v) имеет размеры nx(m+p) и получена присоединением матрицы V слева к матрице U. Метод ступенчатости дает
Решения упражнений 399 обратимую матрицу R размеров (т + р) такую, что W = (U \ V) • R будет ступенчатой матрицей. Эта матрица R описывается в виде (Д', Д"), где столбцы R" соответствуют нулевым столбцам ступенчатой матрицы W. Столбцы R" образуют базис Ker(u | v)) а столбцы R' (которые соответствуют ненулевым столбцам матрицы W) образуют базис дополнения в Ат+Р Кет(и | v). Если обозначить R" = р\ о Д", то столбцы R" образуют систему образующих в u_1(Imt;). Кроме того, если v инъективно (что всегда можно предположить), то все эти столбцы образуют базис в u_1(Imt;), так как р\/Кет(и \ v) инъективно. Это можно проиллюстрировать следующей схемой: W = (U\V)R = (W'\0), Я=(д'||0, где W — множество ненулевых столбцов ступенчатой матрицы W. В примере процесс приведения к ступенчатому виду (U \ V) дает ступенчатую матрицу W и матрицу перехода R: W = R = 1 2 3 \* /1 f0 0 0 0 0 .0 \0 0 1 -2 -4 0 1 -2 0 0 0 (Г 0 0 0 0 0 1 0 2 1 0 - -1 - 2 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 -4 7 1 0 0 5 0 7 3 1 7 1 0 0 0 0 ON 0 0 0 0 о о) -1 0 0 0 0 1 0 0 ' -2 -1 -1 2 0 0 0 0 2\ 4 -7 -1 0 0 -5 1/ и так как V инъективно, то следующие 4 вектора из Z5: Л = (7,3,1,-7,1), /2 = (-1,0,0,0,0), /з = (-2, -1,-1,2,0), /4 = (2,4, -7, -1,0), образуют базис в f/_1(Im V). Можно убедиться в том, что коэффициенты матрицы Щ дают отношения принадлежности £/(/*) к Im V. Тогда U(fi)=0, U(h) = V(-e1), ff(/3)=0, U(f4) = V{5e2-ea).
400 III Модули над кольцами главных идеалов 22. Вычисление пересечения двух подмодулей Если Z : Ат х Ар -¥ Ап обозначает отображение (х,у) >-+ Х(х) + У (у), тогда: EnF = X{X-1{lmY))=XoPl(KeTZ) = Yop2(KeTZ). Можно вычислить систему образующих в Кег Z, к которой можно применить X opi, чтобы получить систему образующих в ЕГ\ F. Процесс приведения к ступенчатому виду Z дает матрицы Z' и R : Z' = 10 0 0 -110 0 2-3-1 0 1 -2 -5 -19 0\ 0 0 о/ и Я = /1-3 0 3 0 0-1 -5 0 0 0-1 ,0 0 2 10 \0 1 0 0 "2\ -1 -1 1 2/ и доказывает, что вектор X • (2,1,1) = У • (1,2) = (7, —3,6,0) является базисом в ЕП F. 23. Система сравнений a. Пусть А — 3 х 4-матрица системы. Решить систему сравнений, значит вычислить базис пространства A~l{q\'L x q^L x q$L) С Z4, что было уже сделано в упражнении 21. b. Приведем результаты процесса приведения к ступенчатому виду для первой системы: -1 0 0 (Г А' = [ 1-900| и R = -1-8 0 0. 1 1 0 0 3 -4 0 0 1 -2 1 0 2 -3 0 1 и как следствие, (1, —2,1,0) и (2, —3,0,1) образуют базис решений первой системы. Для второй системы введем матрицу (А \ D), являющуюся присоединением к матрице А диагональной матрицы D порядка 3 справа, диагональные матрицы которой равны 8, 2 и 6. Приведем результат процесса приведения для W = (А | D)R: /-1 0 0 W= 110 V-1 16 -2 0 0 0 0\ 0 0 0 0 и 0 0 0 0/
Решения упражнений 401 -8 8 0 0 1 -4 1 2 3 0 1 0 0 0 1 -2 1 0 0 0 0 -22 24 0 0 2 -17 0 24\ -241 0 о -3 12 -4/ Отсюда следует, что векторы: /i = (2,-3,0,1), /3 = (1,-2,1,0), /з = (-22,24,0,0), U = (24, -24,0,0), образуют базис системы сравнений. Отметим, что соотношения, вытекающие из матрицы R: i4(/i) = 0, Л(/2) = 0, A(f3) = D(-2e1 + ne2) и Л(/4) = £>(3ei - 12е2 + 4е3), где ei = (8,0,0), е2 = (0,2,0) и ез = (0,0,6), доказывают, что /,- являются решениями. 24. Подмодули максимального ранга a. Пусть {/ь/2,.. ,/п} — базис L, {ei,e2,.. . ,еп} — базис Ап (не обязательно канонический), а X — матрица базиса {/ь/г, • ,/п} в {ei,e2,.. .,еп}. Равенство XX = dldn, где d = det(X) и X обозначает матрицу, присоединенную к X, т.е. транспонированную матрицу алгебраических дополнений, доказывает, что de,- E ImX = L и, следовательно, что dAn С L. Приведем другое доказательство в случае, когда А — кольцо главных идеалов. Можно предположить, что X — ступенчатая матрица и, следовательно, верхнетреугольная, т.е. /,- = а,,е,- + ••• + ат-еп. Если di = ац, то dnen в Л/п, dndn_ien_i G Afn + Afn-i, и вообще, dndn-\.. .с?,е,- G Afn + A/n-i + h Aft- Итак, из равенства det(X) = d = did2 ...dn следует, что de,- G Af\ + Л/2 Н h Afn = L. b. Недоказанная импликация показывает, что dAn С L С Ап} где rang(d^n) = rang(^n) = n, что обосновывает равенство rang(L) = п. 25. Дополнение и замыкание a. Если М 0 М' = L, то М 0 (М' П ЛГ) = N. b. М = М тогда и только тогда, когда М является прямым слагаемым в L. 26-1017
402 III Модули над кольцами главных идеалов d. Так как модули М и М имеют один и тот же ранг, то М С N => М С N и М является прямым слагаемым в L. 26. Ортогональность и дополнения a. Предположим, что /,- = Р{е%)- Если через гР обозначить транспонированную матрицу к Р, то (/i,/j) = (РгР)%э, и следовательно, матрица (fi}fj)ij обратима тогда и только тогда, когда {/ь/г, • • ,/п} является базисом Zn. b. Очевидно, что ML = М . Следовательно, можно предположить, что М является прямым слагаемым в Zn (М и М имеют один и тот же ранг). Пусть {/ь/2,.. .,/п} —базис Zn такой, что {/i,/2,.. .,/m} будет базисом М. Тогда линейное отображение zn3x^((xj1),...1(xjm))ezm является сюръективным с ядром М1, что завершает доказательство. c. Очевидно, что М С М11, и следовательно, М С М11, эти два модуля являются прямыми слагаемыми одного и того же ранга; следовательно, они равны. 27. Идеалы кольца целых квадратичных Кольцо А является Z-модулем ранга 2. Если / — идеал, содержащий ненулевой элемент г, то включения Az С / С А и равенство rang (Az) = rang (A) = 2 доказывают, что / имеет ранг 2. Кроме того, //(/ П Z) инъектируется в Z-модуль Л/Z ранга 1. Тогда Z-подмодуль I C\Z модуля / ненулевой и имеет дополнение в / обязательно ранга 1. /= (lnZ)®Zz=Zn®Zzn, тем более, I = An + Az. 28. Формула Пика а. Пусть й и v векторы, образованные двумя сторонами треугольника. Рассмотрим параллелограмм, натянутый на эти векторы, и всевозможные параллелограммы, которые являются образами при сдвиге на вектор с целыми компонентами исходного параллелограмма. Так как эти параллелограммы не имеют ни одной внутренней точки в Z2, то объединение их вершин является в точности квадратной сеткой Z2, и, следовательно, {г?, v) образуют систему образующих Z2. Отсюда следует, что {{?, v) является базисом Z2 и
Решения упражнений 403 |det(tz,v)\ = 1 является числом, представляющим площадь параллелограмма (площадь треугольника равна половине площади параллелограмма) , что совпадает с формулой Пика. Ь. Рассмотрим два приведения V —У V и V —У V". Первое состоит в присоединении внутренней точки V к двум вершинам. Второе — в присоединении двух вершин V так, чтобы треугольник Т, ограниченный таким образом, отвечал условиям пункта а (см. рис. 1). В первом случае получают многоугольник V с характеристикой (п',/'), а во втором случае — многоугольник V" с характеристикой (п">/")> связанные отношениями: i' = i-l, /' = /+1, «" = *, /" = /-1, площадь(Т) = -, площадь('Р) = площадь('Р') + площадь(Т) = = площадь(Р") + площадь(Т). Рис. 1. Приведения многоугольника Эти соотношения доказывают, что если формула Пика истинна для V (соответственно для V"), она истинна и для V. Здесь был использован тот факт, что можно всегда применить одно из двух приведений, что позволяет доказать формулу Пика по индукции. 29. Теорема о ядре а. Пусть 6,- = CL\CL2 • • .a,-_ia,-+i .. . a^. Тогда 6,- взаимно просты, следовательно, существуют такие iti,...,к*, что 1 = tzi&i +и2Ь2Л btifc&fc. Для xGM имеет место равенство: х = tzi&ix + u2b2x + Ь щЬкХ, и х е Кегд/ a => b{X G Кегд/ <*•, (8) откуда следует равенство Кегд/ о, = Кегд/ а\ + Кегд/ а2 + Ь Кегд/ (*к- С другой стороны, если я,- Е Кегд/ а,-, то UjbjXi = 0 для j ^ г. В силу свойства (8): я,- = и,'6,*х,-. Следовательно, соотношение Yli=ox* = 0 влечет хj = 0 и то, что сумма прямая. 26*
404 III Модули над кольцами главных идеалов с. Имеют место равенства: (X-\).c"f = c"£, (X-\)».e"f = e"£l, и следовательно, Кег(Х - Л)п = {R{t)ext | R{t) е СЭД, deg(i?) < п}. 31. Примарные модули над кольцом главных идеалов (задача) a. Из равенства М = N + тгМ следует: М = N + тгЛГ + тг2М = N + тг2М = • • • = N + тг3М = • • • = N + жкМ = ЛГ, что доказывает пункт (г). (И) М = 5^t-€/ Ах{ + тгМ, тогда в силу предыдущего результата М = ^iziAxiy минимальность доказывается легко. (iii) Если тг не делит а, то тг* и а взаимно просты, тогда 1 является линейной комбинацией а и тг*, а так как х обнуляется сразу значениями тг* и а, то х = 0. Получили противоречие. (it;) Заметим, что Y^i^ixi = 0 =» тг | j*,-. Действительно, используя то, что сумма 5^t-€/ Лтгх,- прямая, имеем: вышеприведенное равенство, умноженное на тг, дает ^,-тгх,- = 0. Так как тгх,- ф 0, то, в силу предыдущего результата, тг | щ. В М/тгМ равенство вида J2i£i №i = 0, влечет равенства Е|€/Л»х» = *12ieiPixi и Eig/(A»J~ *Pi)xi = 0. В силу предыдущего результата тг | А,- — тг/?,- =>> тг | А,- =>> А,- = 0, что и надо было доказать. b. Запишем тгМ в виде прямой суммы ненулевых однопорожденных подмодулей: тгМ = ф Лтгх,-, где тгх,- ф 0. (9) «G/ Тогда из пункта (it;) вопроса а известно, что множество (x,-),-g/ является линейно независимым множеством векторного Л/тгЛ-пространства М/тгМ. Дополним это множество до базиса М/тгМ. Пусть (x,)l€/ U ('Zj)jej — это базис. Равенство (9) доказывает, что ttzj Е ф,-€/ -А7гя?», т.е. ttzj = ^2i£iaijnxi- Положим Uj = Zj — 5^t-€/ <*ijXi\ множество fii)iei U {uj)j£j будет всегда базисом М/тгМ, и в этом случае Uj обнуляется тг: Trtij = 0. Докажем, что М является прямой суммой следующих однопоро- жденных модулей: М = 0Лх,-ф0Л^. »€/ j£J
Решения упражнений 405 Прежде всего, это множество является системой образующих, как это было доказано во втором пункте (гг) предыдущей задачи. Рассмотрим соотношение J2i£i а»х» + J2j£j ^зиз = 0- Приводя по модулю тгМ, получим тг | а,- и тг | bj. Из соотношения ituj = 0 следует, что б^-гу = 0. Если записать а,- в виде а,- = тгс,-, получим 5^t-€/C,-7rx,- = 0, а так как сумма в (9) прямая, то с,-тгх,- = а,-я,- = 0, что и требовалось доказать. с. Достаточно рассмотреть последовательность 0 = тгкМ С тг^М С • • • С тгМ С М и заметить, что теорема истинна для подмодуля 7ГЛ_1М, который является векторным Л/тгЛ-пространством. Простая индукция по к доказывает теорему. 32. Абелевы группы данного порядка п а. Пусть дана абелева группа П порядка рг. Существует возрастающая последовательность (п, гг,..., г,) целых строго положительных чисел, удовлетворяющих условию г\ + г 2 + • • • + rs = г, и такая, что Q будет изоморфна Ъргх х Zpr3 х • • • х Zpr., и эта последовательность определяется единственным образом по структуре Q. Итак, достаточно пронумеровать все такие последовательности (которые не зависят о/г р). Для этого зафиксируем длину s, 1 ^ s ^ г, и рассмотрим лексикографический порядок на возрастающих последовательностях целых положительных чисел длины s суммы г. Наименьшая последовательность будет (1,1,...,1,г— (s — 1)). «Хорошей» последовательностью в лексикографическом порядке (г1,гг,..., rs) будет последовательность (г1> г2> • • • > г«)> постоянная на местах [г, s — 1] для определенного г: (Г1,Г2, • • •, Г,_1, 1 + Г.", . . . , 1 + Г.', Г^), где п + .-- + г,-_1 + (в-|)(1+г,-) + г; = г. (10) Из соотношения (10) следует: rs = г ~ (ri + г2 + * * * + П-i) - (в - i)(l 4- г,) = = (г,- + г,-+1 + • • • + г,) - {s - 0(1 + п). Чтобы сохранить возрастание, достаточно наложить условие 1+r,- ^ г'8У т.е.: (в-,-+1)(1 + г,-)^(г,- + --- + г.) (11) Итак, «хорошей» будет последовательность (10), а индекс i будет наибольшим, удовлетворяющим условию (11). Это дает алгоритм 8.
406 III Модули над кольцами главных идеалов \ и <— 0; for t in reverse 1 .. з loop ui—u + ri\ tts*r*4"" + rv if (^ - *"-|-1)(1 -hr.) ^ у then ra <— ti - (a - «)(1 -I- r<); n..3. end if; end loop; -i <— l + r< ; exit; Алгоритм 8. Коррекция последовательности (ri,..., rs) Например, для г = 6 получаем следующие р(6) = 11 последовательностей: (6), (1,5), (2,4), (3,3), (1,1,4), (1,2,3), (2,2,2), (1,1,1,3), (1,1,2,2), (1,1,1,1,2), (1,1,1,1,1,1), которые образуют для р = 2 одиннадцать абелевых групп порядка 64: Z64, Z2xZ32, Z4xZi6, Z8xZ8, Z2xZ2xZi6, Z2xZ4xZ8, Z4xZ4x Z4, Z2 x Z2 x Z2 x Z8, Z2 x Z2 x Z4 x Z4, Z2 x Z2 x Z2 x Z2 x Z4, Z2 x Z2 x Z2 x Z2 x Z2 x Z2. Приведем таблицу чисел p(r)1: 1 г />г 1 г 1 Рг /V = число абелевых групп порядка рг, р — произвольное простое число 12 3 4 5 6 7 8 12 3 5 7 11 15 22 11 12 13 14 15 16 17 18 56 77 101 135 176 231 297 385 9 30 19 490 10 42 20 627 1 Ь. Отношение Безу 1 = ип + vm для хбО влечет х = vmx + ипх и Q = Q(n) $ Q(m). Остается определить порядок 0^п\ Так как Q(n) — конечная абелева группа, обнуляющаяся п, то она является частным от степени Zn и, следовательно, если простое р делит порядок группы Q(n\ то р делит п. Разложение на простые множители порядка группы Q^ (соответственно группы Q(m)) состоит из простых делителей п (соответственно т). А так как cardQ(n) x cardQ(m) = пт, то cardQ(n) = п и card Q(m) = m. Заметим, что число р(г) равно р(г), числу разбиений г на меньшие слагаемые, так что для определения значения р(г) при больших г можно воспользоваться знаменитой формулой Рамануджана, дающей решение задачи partitio numerorum. — Прим. перев.
Решения упражнений 407 с. Если Q' и Q" — две абелевы группы порядков, соответственно, п и т, то й' х Q" — абелева группа порядка пт. Обратно, группа Q порядка пт, где пит взаимно просты, представляется единственным образом в виде произведения группы порядка п и группы порядка т. Действительно, Q = Q(n) ф Q(m) и, кроме того, если Q = Q' ф Q", где |П'| = п и |П"| = т, то П' = Q(n) и Q" = Q<m). Таким образом, получили, что любые абелевы группы порядка пт представляются в виде произведения абелевои группы порядка п и абелевои группы порядка гп (и к тому же единственным способом), откуда следует мультипликативность в. Если р\1рГ2 - - -Р]? — разложение на простые множители числа п, то в[п) = р(г\)р(г2).. -р{гк)> и имеются 42 абелевы группы порядка 21 600. 33. Вычисление инвариантных множителей a. Если положить f\ = е\ + Ь е„, /2 = ei — ег, /з = ei — ез, ..., /п = е\ — еп, то {/i, в2, ез,..., еп} будет базисом Zn, а его первый вектор будет базисом F, в то время, как множество {е1,/г,/з,..., fn} будет базисом Zn, а его последние п— 1 векторов будут образовывать базис £. b. {/ь/г, • • -,/п} — базис Е ® F, его матрицей в каноническом базисе будет первая из приведенных ниже матриц. Если в этой матрице прибавить к столбцу 1 столбец 2, столбец 3, ..., затем столбец п, то получим матрицу, вторую по порядку. Теперь достаточно прибавить к строке 1 строку 2, строку 3,..., затем строку п, и мы получим матрицу, изображенную последней. /ill i\ 1-1 0 0 | 10-1 0 \1 0 0 -1/ /п 0 I 0 -1 о о \о о о о 0 ... -1/ /п о о 1 1 -1 0 0 -1 1\ о о \о о о -1/
408 III Модули над кольцами главных идеалов 34. Другое вычисление инвариантных множителей Метод приведения дает следующие матрицы: L = при этом X' = LXR, L и R имеют определители 1. Матрица L индуцирует изоморфизм из Z4/hiiX в Z4/IniX', который выражается равенствами: L{fi) = ё1+2ё2-ёз-ё4, L(f2) = ё2-ё3-6ё4, Щз) = ё3, ДА) = ё4, и дает, обращая формулы, приведенные выше, следующие искомые образующие М: </i = /i - 2/2 - /3 - ИД = 0, </2 = /г + /з 4- 6/4, </з = /з, и д4 = /4. 35. Инвариантные множители и НОД миноров Пусть 6,- — наибольший общий делитель миноров X порядка г для г = 1,2,3. Число 2 делит все коэффициенты X, и существует пара коэффициентов, имеющая 2 своим наибольшим общим делителем (например, 6 и 10); следовательно, &i = 2. С другой стороны, 4 делит все миноры порядка 2 (если 2 делит а, 6, с, d, то 4 делит ad — 6с), и существуют два минора порядка 2, имеющие 4 своим наибольшим общим делителем, например: 8 4 4 4 = 16 = 23 18 30 4 10 _ ЯП — О2 = 60 = 2J х 3 х 5, что влечет 62 = 4. Приведем миноры порядка 3: 8 12 4 6 12 18 4 18 4 8 12 4 20 30 10 20 30 10 = 0, = 0, 6 12 18 6 12 18 4 18 4 8 12 4 20 30 10 4 18 4 = -3480, = 1392.
Решения упражнений 409 Это дает &з = НОД(1392,3 480) = 696. Следовательно, инвариантные множители ai,d2,a3 задаются равенствами: а\ = Ь\ = 2, а\а2 = &2 = 4, (ца2аз = Ьз = 696, откуда а\ = 2, а2 — 2 и аз = 174, что совпадает с результатами в данной главе! 36. Условие наличия одинаковых инвариантных множителей относительно Ап Если Е и F имеют одни и те же инвариантные множители, ясно, что Ап/Е и Ап/F изоморфны. Обратно, предположим, что Ап/Е и Ап/F изоморфны, и пусть Е' С Ап (соответственно F' С Ап) — нормальный подмодуль, эквивалентный Е (соответственно F): Е' = а\А х а2А х • • • х а„Л, F' = 61Л х &2Л х • • х 6ПЛ, где а, | а,-+1 и &,- | &,+i. Модули частные Ап /Е' и Ап /F' тогда изоморфны (так как первый изоморфен Ап/Е, а второй изоморфен An/F). Пусть р и q индексы, удовлетворяющие условию: i€[l,ri<*a,-€tf(j4) и j € [1,д] <* 6j € tf(;4). Тогда п — р = п — q, и для р < i ^ п сцА = &,Л. Следовательно, а, Л = Ь|Л для всех i Е [1, п], что влечет равенство Е' = F'. Итак, подмодули Е и F эквивалентны в Ап\ Е и F имеют одни и те же инвариантные множители. 37. Определяющие соотношения Пусть (ei, в2, ез) — канонический базис Z3, а у? — сюръективный морфизм из Z3 на Q, который преобразует е,- в #,•. Если X — транспонированная матрица системы, то \тХ С Кег у? и имеет место сюръекция из Ъг/\тХ на Z3/Ker<p ~ Q. Следовательно, Q изоморфна факторгруппе Z3/ ImX. Но Z3/ ImX является группой с | det(X)| = 19 элементами. .. Можно вычислить две матрицы L и R с определителем 1 и такие, что матрица X1 '= LXi? будет приведенной, например: 0 0\ L = Д = Х' = -8 -25 -132' 1 3 14 0 0 1
410 III Модули над кольцами главных идеалов Тогда в Z3/ImX' - Z/19Z 9l = L(ei), g2 = L(e2), 93 = L(e3) будет образовывать такую систему. В данном примере #1 = — 2, #2 = 5 И 03 = 1. 38. Образующие и определяющие соотношения (продолжение) Пусть (ei, в2, ез) — канонический базис Z3, а у? — сюръективный морфизм из Ъъ на Q, который переводит е,- в #. Если X — транспонированная матрица системы, то ImX С Кег <р и имеет место сюръекция из Z3/ImX на Z3/Kery? ~ П. Следовательно, Q изоморфна факторгруппе Z3/ImX. Но Z3/ImX является группой с |detX| = 288 элементами. Действительно, приведение инвариантных множителей показывает, что X эквивалентна приведенной матрице X': / 2 8 72\ /2 0 0\ X = 4 20 72 , X' = 0 4 0 , \-6 -16 -324/ \0 0 36/ и,следовательно: Z3/ImX - Z3/ImX' -Z2xZ4x Z36 = «'• Если ^ обозначает сюръекцию из Q' на Q, то подгруппа 96Q' из Q' содержится в Кег^ (Q будет группой порядка 96, тогда 96Q. = {0}). Эта подгруппа имеет индекс 96 (или порядок 3), и, следовательно, Тр индуцирует сюръекцию из Q'/96Q' на Q, которая будет изоморфизмом (эти две группы имеют идентичные порядки). Остальное следует из ТОГО, ЧТО ^Зб/96^3б — ^12- 39. Упражнение Чарльза Лутвиджа Доджсона ... Place 8 pigs in the first sty, 10 in the second, nothing in the third, and 6 in the fourth: 10 is nearer ten than 8; nothing is nearer ten than 10; 6 is nearer ten than nothing; and 8 is nearer ten than 6 1. Lewis Carroll, A tangled tale (1885 [44]) 1B первом свинарнике должно находиться 8 поросят, во втором — 10 и в четвертом 6. Ничего не должно находиться в третьем свинарнике: он должен быть пуст... Десять ближе к 10, чем 8. Что может быть ближе к 10, чем 10? Ничто! Но именно «ничто» и находится в третьем свинарнике. Шесть ближе к 10, чем О (арифметический псевдоним «ничего»), 8 ближе к 10, чем 6... (Перевод Ю. А. Данилова, Л. Кэррол «История с узелками», М., Мир, 1973.)
Глава IV Некоторые методы алгебраической алгоритмики Although unique factorization for integers is sometimes called the "fundamental theorem of arithmetic," it is only occasionally that a student learns anything about the constructive aspects of this theorem beyond the most elementary facts. Yet there are interesting unsolved mathematical and computational problems involved in factorization of integers and tests of primality and many of the ideas involved are accessible to undergraduate students1. John D. Dixon, Factorization and primality tests (1984 [67]) К этому моменту нами получены почти все предварительные результаты за исключением быстрого преобразования Фурье, которое будет детально изучено в главе V, и мы можем начать исследование в области алгоритмической алгебры или, по крайней мере, в той ее части, где добились наибольшего успеха, — в области чисел. Как следует из дальнейшего изложения, многие используемые алгоритмы опираются на четыре основных метода: алгоритм экспоненциальной дихотомии, алгоритм Евклида, китайскую теорему об остатках (которую мы изучим в этой главе) и быстрое преобразование Фурье, которое позволяет, используя алгоритм Полларда, эффективно перемножать большие чи- *Хотя единственность разложения целых чисел на простые множители иногда называют «основной теоремой арифметики», студенты редко изучают конструктивные аспекты этой теоремы, кроме, быть может, самых элементарных фактов. Все еще существуют интересные нерешенные математические и комбинаторные проблемы, связанные с разложением целых чисел на множители с проверкой простоты, и многие из используемых там идей доступны студентам.
412 IV Некоторые методы алгебраической алгоритмики ела. Конечно, этот подход, основанный на редукции, не слишком богат абстрактными теоретическими результатами. Как и Диксон, мы убеждены, что некоторые формальные результаты доступны даже новичку, хотя бы потому, что часто можно привести конкретную и простую иллюстрацию этих результатов. Китайская теорема об остатках, например, записанная формально, действительно может показаться абстрактной (какой-то непонятный идеал в каком- то кольце...); и можно верить в ее так называемую эффективную форму до того момента, когда действительно придется использовать ее для вычислений. Тогда переходят к менее «возвышенному» этапу, заключающемуся в изучении всех необходимых вычислений, для того, чтобы уловить все нюансы и учесть их при реализации... В конце концов приходят, таким образом, к лучшему пониманию богатства чисел. Изучение группы обратимых по модулю п элементов кажется иногда чисто алгебраическим упражнением; несколько конкретных примеров показывают, что эта группа так или иначе определяет структуру числа п: если имеются только два квадратных корня из 1 по модулю п, то п — степень простого числа... Можно указать конкретный вид этой группы, найти ее образующие, установить, что, насколько структура Ъ/nL регулярна и понятна, настолько структура группы обратимых элементов, спроектированная, как это обычно делается, на интервал [1, п — 1], хаотична и сбивает с толку. В противоположность некоторым понятиям, которые новичку кажутся сложными, — например, квадратичные вычеты, кажущаяся сложность которых обязана большей частью тому названию, которое наши предки дали квадрату (однако, слово собака не кусается) — существуют очень простые понятия, доступные любому студенту, например, делители нуля в некотором кольце. Но сколько же пользы извлекли из этих особых элементов, которых старались избегать! Например, делитель нуля по модулю п немедленно приводит к разложимости п (благодаря, скажем, алгоритму Евклида); это является основой классических методов проверки чисел на простоту (Rabin-Miller) или вычисления квадратных корней по модулю п... В этой главе мы надеемся показать, что все эти понятия имеют простую интерпретацию, возможно, основанную на редукции, но позволяющую, по крайней мере, уменьшить страхи, которые мы испытываем при приближении к загадочному миру чисел. Итак, чтобы понять теорию, недостаточно констатировать, что выбранная дорога свободна от препятствий, нужно отдавать себе отчет что заставило выбрать ее. Сможем ли мы когда
IV-1 Кольцо Z/nZ 413 нибудь сказать, что понимаем теорию, если хотим придать ей сразу окончательную форму, которую навязывает ей безукоризненная логика, чтобы не осталось никакого следа от действий наугад, которые к ней привели? Нет, в действительности мы не сможем ее понять, не сможем даже запомнить и не запомним, даже выучив наизусть. А. Пуанкаре, Сочинения (1899 [161]) 1 Кольцо Z/nZ В начале этой главы мы напомним несколько основных свойств кольца Z/nZ, затем установим связь с элементарной реализацией необходимых операций для вычислений в этом кольце. Как принято в такого рода исследованиях, в тех случаях, когда исключена неопределенность, мы будем одинаково обозначать элемент кольца Z и его класс по модулю п. Если необходимо, то класс х по модулю п будем обозначать через х или х mod п. (1) Предложение. Пусть b — целое, an — положительное целое число. Следующие утверждения эквивалентны: a. 6 обратимо по модулю п, b. 6 — образующий аддитивной группы Z/nZ, c. п и Ь взаимно простые. Доказательство. I а =>> Ь. Пусть р — порядок 6, тогда рЬ = 0 (mod n), откуда, в силу обратимости 6, р = 0 (mod n). Значит, порядок 6 делится на п и, следовательно, равен п. Ъ => с. Так как 6 — образующий, то существует х такой, что Ьх = 1 (mod n), откуда 6х+кп =1 — равенство, являющееся соотношением Безу для 6 и п. с => а. Запишем соотношение Безу между b и п: ub + vn = 1 и рассмотрим его по модулю п. Коэффициент Безу и и есть обратный Lk6. Можно упростить алгоритм вычисления коэффициентов Безу и применить его для определения обратных к элементам из Z/nZ. Действительно, для этих вычислений не нужно выражать в явном виде коэффициент Безу при п и, следовательно, из алгоритма, данного во вто-
414 IV-1 Кольцо Z/nZ рой главе, можно исключить несколько ненужных переменных (см. алгоритм 1). 1С) <-0И:-Ь0> while r' ф 0 loop end loop; if г = 1 then else end if; Алгоритм 1. Обращение 6 в Z/nZ Отметим, что, так как 6 положительно или равно нулю (ибо интервал [0,п[ представляет Z/nZ), то найденный НОД неотрицателен (и условие проверки г = 1, выведенное в конце алгоритма, следовательно, корректно). (2) Следствие. Для п ^ 1 Z/nZ поле <$=>> п простое <$=>> Z/nZ область целостности. Последняя элементарная операция в кольце Z/nZ — деление двух элементов — не всегда осуществима, и проблема обратимости элементов в Z/появляется частным случаем делимости. (3) Предложение. Пусть а и Ь — целые числа. Будем говорить, что а делится на Ь в Z/nZ, если существует х такой, что Ьх = a (mod n); a делится на Ь тогда и только тогда, когда а делится на НОД(6, п). Причем, b • UftoMbn) = a (mod n), где u — коэффициент Безу для b. Это предложение является следствием более общего результата, касающегося решения уравнения Ьх = a (mod n). Вспомним результат, доказанный в упражнении 34 главы I. (4) Предложение. Пусть а и b — два элемента из Z. №
IV-1 Кольцо Z/nZ 415 (г) Множество {х Е Z/nZ | Ьх = 0} — циклическая подгруппа в Z/nZ порядка |НОД(6, п)|, образующим этой группы является класс числа НоЖмУ- (гг) Уравнение bx = a (mod n) имеет решение тогда и только тогда, когда а кратно НОД(6, п). (ш) В этом случае частным решением будет хо = и • нод% п) > гДе и — коэффициент Беэу числа b при вычислении НОД(6, п). (it;) Более того, числа хо mod § +& • НОд/ь п\ при 0 ^ к < d образуют систему всех решений уравнения в интервале [0, п[. Алгоритм для делимости в Z/nZ полностью аналогичен алгоритму обратимости, если заменить конец последнего на: I if a mod r = 0 then &*♦- s0 .(mod n) else 3 не делится m&%& Ъ/пЖ I end if; Перейдем теперь к элементарной реализации операций в Z/nZ. Она строится на основе целых чисел языка Ада и, следовательно, в этом случае весьма ограничена размером используемых целых чисел. Пакет, который мы собираемся частично рассмотреть, содержит, в принципе, все арифметические или иные операции, которые нужны при модулярных вычислениях. Чтобы избежать бесполезную работу и сразу получить разумное время компиляции, мы выбрали настраиваемую реализацию, параметризованную при помощи типа целых языка Ада, в которой будут осуществляться промежуточные вычисления, а также целое число, по модулю которого мы хотим производить вычисления. Нужно отметить, что это не единственное решение для реализации используемого пакета модулярных операций. В случае, когда приходится часто изменять характеристику кольца (например, при использовании китайской теоремы), может быть полезно динамически изменять эту характеристику перед каждой операцией. В этом случае используем пакет изменяемых модулярных операций. . Спецификация операции в Z/nZ 1 : with Dichotomic-Exponentiation; 2 : generic 3 : type Used-Integer is range <>;
416 IV-1 Кольцо Z/nZ Спецификация операций в Z/nZ (Продолжение) 4 5 6 7 8 9 10 11 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 n : in Used-Integer; package Static-Integers-Modulo-n is package Used-Integer-Operators is function Plus (a, b : Used-Integer) return Used-Integer renames "+"; function Minus (a, b : Used-Integer) return Used-Integer renames "-"; function Minus (a : Used-Integer) return Used-Integer renames "-"; function Multiply (a, b : Used-Integer) return Used-Integer renames "*"; 12 : function Divide (a, b : Used-Integer) return Used-Integer renames "/"; 13 : function Residue (a, b : Used-Integer) return Used-Integer renames "MOD"; end Used-Integer-Operators; subtype Modular-Integer is Used-Integer range 0..n — 1; function "+" (a, b : Modular-Integer) return Modular-Integer; function "-" (a, b : Modular-Integer) return Modular-Integer; function "-" (a : Modular-Integer) return Modular-Integer; function "*" (a, b : Modular-Integer) return Modular-Integer; function "**" is new Dichotomic-Exponentiation (Modular-Integer, "*", 1, Used-Integer); function IsJnversible (a : Modular-Integer) return Boolean; function Inverse-Of (a : Modular-Integer) return Modular-Integer; function "/" (af b : Modular-Integer) return Modular-Integer; Division-Error : exception; function Image (Item : Modular-Integer; Centered : Boolean := False) return String; function Value (Item : String) return Modular-Integer; function Coerce (Item : Used-Integer) return Modular-Integer; function Lift (Item : Modular-Integer; Centered : Boolean := False) return Used-Integer; Conversion-Error : exception; end Static-Integers-Moduh-n; Ясно, что данный пакет создает новый тип (подтип типа UsedJnte- ger), позволяющий представлять целые числа по модулю п, а именно, Modular-Integer, определенный в строке 16. Кроме различных арифметических операций, описанных в начале программы, имя которых говорит само за себя, находим в строках 31-36 примитивы внешнего представления элементов кольца. Функция Image выдает характеристическую последовательность, представляющую целое число, класс
IV-1 Кольцо Z/nZ 417 которого по модулю п становится параметром, причем это целое число находится в интервале [0, п[, если второй параметр, Centered, ложный, и в интервале [— [n/2j, п — [n/2j[, если Centered — истинный. Это позволяет, например, выдать значение —1 вместо 31415 925 при вычислениях по модулю 31415 926. Функция Value осуществляет обратное преобразование, если считать, что ее аргумент представляет целое число из интервала [0, п[, если же характеристическая последовательность не соответствует этому условию, то возбуждается исключение Conversion-Error. Наконец, видим функции Coerce и Lift, которые позволяют переходить от типа UsedJnteger к подтипу Modular .Integer и обратно. Эти функции соответствуют, выражаясь математическим языком, канонической проекции Ъ в Z/nZn нахождению по элементу из Z/nZero прообраза в Z, находящегося в одном из двух обычно рассматриваемых интервалов, в зависимости от значения параметра Centered. Видим также в строках 7-14 (так как это единственное место, где это возможно) переименование стандартных арифметических операций в тип UsedJnteger. Для этого есть причина: чтобы реализовать модулярные операции, необходимо произвести часть вычислений в типе UsedJnteger (т.е. в Z), а потом перевести результат в тип Modular Jnteger (т.е. отобразить в Z/nZ). Например, алгоритм вычисления НОД применим в Z, но, конечно, не применим в Z/nZ. Следовательно, необходимо знание стандартных операций. Правила видимости языка Ада таковы, что переопределенные для подтипа Modular Jnteger операторы скрывают операторы типа UsedJnteger. По этой причине переименование производится в самом начале спецификации раньше любого описания. Эти стандартные операторы не являются непосредственно видимыми для пользователя пакета; если необходимо, он сможет их сделать видимыми благодаря оператору use. Мы не будем детально описывать реализацию тела этого пакета, это было бы довольно скучно и не интересно. Тем не менее, мы покажем тела некоторых функций для того, чтобы проиллюстрировать проблемы, возникающие при использовании типов целых чисел на языке Ада. Приведем сначала тело унарной функции м—м: function "-" (а : Modular Jnteger) return Modular Jnteger is pragma Suppress (Range-Check); pragma Suppress (Overflow-Check); use ЪrsedJnteger„Operators; begin if a = 0 then return a; else return Minus (n, a); end if; end ••-••; Единственной особенностью функции является использование праг- 27-1017
418 IV-1 Кольцо Z/nZ мы, (чрезвычайно опасное), позволяющее отменить верификации, произведенные в соответствии с условиями выполнения программы, связанные с ограничениями на подтип Modular Jnteger. Это возможно лишь потому, что строго доказать, что все выражения, вызываемые этой функцией, не выходят из интервала действия типа Used Jnteger для промежуточных вычислений или Modular Jnteger для результата. В этой функции также виден спецификатор use для пакета UsedJnteger-Operators, который позволяет просто назвать функции этого пакета. Прагма Suppress используется почти во всех функциях пакета, при таком же строгом контроле во время записи кода (в языке Ада). Рассмотрим, например, тело бинарной функции м—м, снабженной утверждениями, из которых следует, чтоотмена верификаций безопасна: I if а > 6 then return Minus(a,b)\ ^^ф^^фМ: else return Plus(a, Minus(n,b))\ Щ^^0Щ^:^^ I end if; Аналогично можно представить тело функции м+м, которая немного сложнее вычитания. Действительно, разность двух положительных чисел есть число, меньше вычитаемого по абсолютному значению, что, очевидно, не верно для сложения. I х<—Мтиз(п,Ъ)\ ЩШЙ^^ if a ^ х then return Minus(a,x)\ else return Plus(a, 6); end if; n = S< n= 16< n = 32 < X x-1 X I x_1 f X x-1 X {*-l 1 1 1 1 1 1 17 17 3 3 3 11 3 11 19 27 5 5 5 13 5 13 21 29 7 7 7 7 7 23 23 7 9 9 9 25 25 9 11 3 11 3 27 19 13 5 13 5 29 21 15 15 15 15 31 31 Таблица 1. Обратимые по модулю п = 8, 16, 32 Что касается умножения, то проблема еще больше усложняется, так как при вычислении выражения а х b mod n промежуточное выражение ах b может переполнить разрядную сетку, в том числе, и для типа
IV-1 Кольцо Z/nZ 419 UsedJnteger. Точнее, на 32-х разрядной нам гарантировано, что для значений п, не превышающих 46 340, это выражение вычислимо, возможно, даже для типа, превосходящего UsedJnteger. Но 46 340 — весьма небольшое число, и, следовательно, нужно предусмотреть какие-то обходные пути. Одна из возможностей состоит в использовании египетского умножения, изученного в главе I, но это требует выполнения большого числа модулярных сложений, которыми нельзя пренебречь (порядка 32), что очень отягощает выполнение последовательности умножений. По этой причине лучшее решение, как нам кажется, — это использование программы, написанной на языке ассемблер и, следовательно, сильно зависящей от конкретной машины (мы не будем углубляться в детали этой программы). Применение Этот пакет может быть использован, например, для написания программы вычисления обратимых по модулю п. В таблице 1 представлена группа обратимых по модулю 8, 16 и 32.. Заметим, что порядок группы обратимых элементов кольца Z/2nZ равен половине его порядка. Все элементы этого кольца делятся на два класса: элементы нечетные, которые обратимы, и четные, которые необратимы. Можно также заметить, что в каждой из этих групп обратимых есть точно четыре элемента, которые равны своему обратному. По крайней мере два из них отличны от 1 и —1, откуда сразу следует, что группа обратимых не циклична (это было бы не так, если заменить 2 на простое нечетное число). Рассмотрим подробнее элемент 5. Он сравним с 1 по модулю 4. Нетрудно показать, что если х = у (mod n) и 2 делит п, то х2 = у2 (mod 2n). Следовательно, 52 сравнимо с 1 по модулю 8 и в [/(Z/8Z), элемент 5 имеет порядок 2. Кроме того, 5 = 1 + 4 (mod 8), сравнение, которое понадобится нам позже. Переходя к U(Z/16Z) и используя предыдущие рассуждения получим, что 54 сравнимо с 1 по модулю 16, а значит, 4 делится на порядок 5. Но второе сравнение по модулю 8, возведенное в квадрат, дает 52 = 8 + 1 (mod 16), откуда 5 имеет порядок 4. Для [/(Z/32Z) также можно возвести в квадрат оба сравнения, полученные в U(Z/16Z). Получаем 58 = 1 (mod 32) и 54 = 16 + 1 (mod 32), откуда 5 имеет порядок 8 в [/(Z/32Z). Можно показать, что в f/(Z/2nZ) элемент 5 порождает подгруппу порядка 2П~2. Следовательно, эта подгруппа содержит половину обратимых элементов (это те же элементы, которые сравнимы с 1 по модулю 4) и нетрудно проверить, что вторая половина (элементы, сравнимые с 3 по модулю 4) состо-
420 IV-2 Китайская теорема об остатках ит из элементов, противоположных к элементам этой подгруппы., Это рассуждение полностью описывает структуру группы C/(Z/2nZ) — она является прямым произведением группы порядка 2, порожденной — 1, и группы порядка 2П~2, порожденной 5. 2 Китайская теорема об остатках Мы уже бегло ознакомились с китайской теоремой об остатках в главе III, где применяли ее для получения нормализованной формы произведения двух циклических групп. На самом деле это основной инструмент, используемый в модулярном исчислении. Существует много методов для проведения вычислений с большими целыми числами, однако, два наиболее пригодных — это позиционная нумерация и модулярное исчисление. Позиционная нумерация заключается в разложении чисел, с которыми оперируют по основанию 6, и если действия над цифрами основания легко выполнить, то достаточно просто произвести и действия, которые были необходимы. Модулярное исчисление состоит в осуществлении нескольких малых вычислений по модулям взаимно простых чисел (чаще просто простых чисел) и получении необходимого результата при помощи теоремы об остатках. Например, если мы хотим перемножить два положительных числа i и у, то выбираем п различных простых чисел р,- так, чтобы Y\P< > ХУ> и берем числа х и у по каждому из модулей р,, что дает числа я,- и у,-. Далее вычисляем произведение х, и у{ в Ъ/piL и получаем числа Z{. Китайская теорема об остатках позволяет восстановить z — ху при помощи вычисленных Z{. Перейдем к изучению китайской теоремы об остатках и ее применений. 2.1 Различные формы китайской теоремы об остатках Напомним сначала формулировки этой теоремы, данные в главе III. (5) Китайская теорема об остатках (для двух элементов). Пусть пит — два взаимно простых целых числа. (г) Пусть у и z — два произвольных целых числа. Тогда система ( х = у (mod n), \х = z (mod m) имеет по крайней мере одно решение. Кроме того, если х' — другое решение этой системы, то х = х' (mod nm).
IV-2.1 Различные формы китайской теоремы об остатках 421 (И) Отображение <р множества Z в Ъ/nL х Z/mZ, которое каждому х ставит в соответствие его классы по модулю п и т: <р(х) = (х mod п, х mod m), сюрьективно и его ядро nmL. Следовательно, оно индуцирует изоморфизм Ъ/птпЪ и Z/nZ x Z/mZ. (Hi) Пусть unv — соответствующие коэффициенты Везу для пит. Тогда морфизмы fz—>z2, Г z2—>z, \х»—>(х,х) \(y,z)\—> zun + yvm индуцируют взаимно обратные кольцевые изоморфизмы Ъ/птпЪ и Z/nZ х Z/mZ. Впрочем, это единственные кольцевые изоморфизмы между этими двумя структурами. (iv) Пусть А — коммутативное кольцо с единицей, а I и J — такие идеалы А, что I + J = А. Пусть i и j — такие элементы из I и J у что i + j = 1. Тогда произведение IJ равно I П J и отображения <р:А.-+ А/1 х A/J и ф.Ах А —¥ А, определенные по правилам (р(х) = (х mod /, х mod J) и ф(у, z) = jy + iz для ху у и z из А индуцируют взаимно обратные изоморфизмы колец A/IJ и А/1 х A/J. Доказательство. I Мы докажем только наиболее общую форму теоремы (it;). Все остальные получаются из нее при помощи нескольких простых действий. Очевидно, IJ С /П J. Пусть х принадлежит I и J. Тогда jx + ix = х принадлежит /J, ибо каждое слагаемое принадлежит IJ. Можно заметить, что ядро у? есть IC\J = IJ. Так как <р сюрьективно (прообраз пары (у, J) есть yj + zi), то <р является изоморфизмом соответствующих факторколец. Ядро ф равно I х J. Действительно, jy + iz = у (mod /), jy + iz = z (mod J) и, следовательно, если jy+iz G IJ (в частности, jy+iz = 0), то у G / и : G J. Поэтому ф переводит факторкольца, указанные в условии, одно в другое и при этом является сюръективным и инъ- ективным. Итак, ф также изоморфизм. Осталось доказать, что эти изоморфизмы взаимно обратные; это делается довольно просто: <р(ф(у,г)) = (yj,zi) = (у, г), поскольку г = 1 (J) и j = 1 (/). Из этого доказательства легко получить обоснования остальных |_утверждений теоремы.
422 IV-2 Китайская теорема об остатках Пример Рассмотрим два числа: п = 19 687 и т = 17. Оба эти числа простые и соответствующие им коэффициенты Безу и = I и v = —1158. Произведение пит равно 334679. Для данных у и z система х = у (mod 19 687), х = z (mod 17) имеет решение -1158 х 17 х у + 19 687 х z. Если, например, у = 18000 и z = 13, то применяя данную формулу, находим решение —354092069. Можно взять это число по модулю 334 679 и получим х = 332 992; другие решения системы могут быть получены добавлением к х чисел, кратных 334 679. Следует отметить, что, несмотря на то, что искомое число мало (лежит в интервале [0,334 679[), вычисления вызвали появление чисел в тысячи раз больших, чем размер рабочего интервала. ■ Это достаточно общее явление и показывает просто, что описанный изоморфизм, хотя и точно определен, не позволяет эффективно решать системы сравнений. Необходимо найти такие формулы, которые позволяют решать сравнения, не выходя за пределы интервала [0,nm[. (6) Вычислительные формулы. Пусть пит — два взаимно простых числа и и — элемент из {1,...,т— 1}, представляющий обратный к п по модулю т. Если у и z — целые числа, принадлежащие соответственно интервалам [0, п[ и [0, т[, то вычисление х = n(u(z — у) mod m) + у дает единственное целое число из интервала [0, nm[y удовлетворяющее сравнениям х = у (mod n) и х = z (mod m). Кроме того, все необходимые вычисления в этом выражении по абсолютному значению меньше nm. Доказательство. I Достаточно взять формулу китайской теоремы об остатках и заменить vm на 1 — un. Тогда получим х = nu(z — у) + у. Так как все решения получаются из х прибавлением кратных nm, то находим анонсированную формулу и все ее промежуточные вычисления приемлемы. Действительно, х = n(u(z — у) mod m) + у ^ n(m — 1) + п — 1 = nm — 1.
IV-2.1 Различные формы китайской теоремы об остатках 423 Пример (продолжение) Снова рассмотрим предыдущий пример, в котором промежуточные вычисления вызывали появление больших чисел. Исходные данные: п = 19 687, т = 17, и = 1, у = 18 000 и z = 13. Сначала подсчитаем u(z — у) mod m = (13 — 18 000) mod 17 = 16, умножаем это на п и прибавляем у. Получаем х = 19 687 х 16 +18 000 = 332 992, что и является искомым решением. (7) Китайская теорема об остатках (для г элементов или г идеалов). (г) Пусть А — кольцо главных идеалов и П\у П2, ..., пг — попарно взаимно простые элементы А. Тогда 1[А/(гц)~А/([[п,). 1=1 1=1 Это означает, говоря иначе, что всякая система сравнений по модулям п,- имеет единственное решение по модулю f] n,-. (гг) Пусть А — коммутативное кольцо с единицей и I\, Ii,..., 1Г — такие идеалы Ау что для любых г ф j /,- + Ij = А. Тогда: »• П*=1 7* = Ш=1 7»"» Ь. Отображение <р из А в А/1\ х • • • х А/1Г, которое каждому элементу А ставит в соответствие его смежный класс по идеалу /,, является сюръективным гомоморфизмом колец с ядром \\ Д я индуцирует изоморфизм колец А/ Х\1% и\\ A/U. Доказательство. I Докажем сначала (г). Пусть тт — канонический гомоморфизм А на ^/(П п»)> а ж* — канонический гомоморфизм А на Л/(п,). Тогда для канонического гомоморфизма у?,- >1/(Пп») на ^/(п«) выполняется тг,- = (fi о тг, так как Кегтг С Кегтг,-. Следовательно, существует гомоморфизм у? А/([\ П{) на f] Л/(п,). Положим П* = riiafj nj = Цг2"* Числа П,- взаимно просты в совокупности (ибо щ попарно взаимно просты), и следовательно, существуют числа qi такие, что ^^П,- = 1. Применяя несколько раз китайскую теорему об остатках для двух элементов, получим, что гомоморфизм <р инъективен. В самом деле, I если для каждого i a = 6 (mod n,), то a = 6 (mod П n»)-
424 IV-2 Китайская теорема об остатках I Кроме того, если (ai,..., аг) Е П^/(п»)> то а = ][]П,-д,-а,- — решение системы сравнений. (И) Для пункта а заметим, что если / + J = А и / + К = Л, то / + J К = Л (рассмотреть произведение). Осталось применить результат, доказанный для двух идеалов в предложении 5. Доказательство пункта b полностью аналогично доказательству пунк- [_та (г). (8) Следствие. Пусть п\} п2} ..., пг — попарно взаимно простые элементы 7L и п = П\П2 ...пГ. Тогда U{Z/nZ) ~ U(Z/niZ) x • • • х U{Z/nrZ), где U(А) обозначает группу обратимых элементов кольца А. Формулы, позволяющие эффективно решать системы г сравнений, есть лишь обобщение соответствующих формул для двух модулей. Применяем эти формулы для двух чисел п\ и п2, затем для п\п2 и п3 и т.д. В действительности привыкнуть к новым обозначениям даже труднее, чем понять формулы сами по себе. (9) Вычислительные формулы. Пусть hi, п2, ..., пг — попарно взаимно простые целые числа. Тогда решение системы сравнений х = я,- (mod щ) находится из последовательности вычислений: ( yi = x\ mod ni, 2/2 = N2{C2{x2 - 2/1) mod n2) + 2/ь J 2/3 = АГ3(Сз(х3 - y2) mod n3) + t/2, (1) [yr = Nr{Cr(xr -2/r-i) modnr)-f 2/r-i, в которой Ni = Ylj<inj> коэффициенты С, удовлетворяют условиям CiNi = 1 (mod rii) и получены при помощи алгоритма Евклида для Ni и щ. При этих условиях число уГу являющееся последним членом последовательности, будет единственным решением системы сравнений на интервале [О, П\ ... пг[. Нужно отметить, что первые к строк в (1) определяют решение системы сравнений х = я,- (mod щ) для i ^ к. Теперь можно построить алгоритм решения системы сравнений, реализующий приведенные выше вычисления (алгоритм 2).
IV-2.2 Модулярная арифметика и смешанная система счисления 425 ni, П2, ..., пг попарно взаимно простые целые числа xi у Х2, • • •, хг целые числа Числа С{ таковы, что C{N{ = 1 (mod щ) begin у<—xi\pi—1; for k in 2 .. r loop pi— px nk-i\ у i— p x [Ck x (xk - y) mod ru] -|- t/; end loop; end; Алгоритм 2. Китайская теорема об остатках для Ъ 2.2 Модулярная арифметика и смешанная система счисления Согласно китайской теореме об остатках для попарно взаимно простых чисел п\у П2, ..., пг имеются формулы, позволяющие кодировать любое число из интервала [0, п[ г-й чисел из [0, п\[х • • • х [0, пг[. Если каждое из чисел п, можно ввести в машину и обычные операции кольца Z/n,Z также могут быть реализованы на этой машине, то мы располагаем арифметикой на интервале [0, п[, определенной следующим образом: 0~(0,...,0), 1~(1,...,1), x^(xmodni, ..., х mod nr), (х + у) mod n~ ((х + у) mod п\, ..., (х + у) mod nr), (х — у) mod п~ ((х — у) mod ni, ..., (х — у) mod nr), ху mod n^ (xy mod ni, ..., X2/modnr), ху-1 ^ (ху-1 mod ni, ..., ху-1 mod nr). В последнем выражении у'1 обозначает обратное к у по модулю п, ni, ... ,пг. Понятно, что у предполагается обратимым. Разумеется, речь идет об арифметике по модулю п. Однако, если оперировать с целыми числами из этого интервала и удается доказать, что полученный результат также лежит в этом интервале, то этот результат точен. Деление имеет, между прочим, особый статус. Если у делит х в N, то xy~l mod n и х/у сравнимы по модулю п, и, следовательно, равны, так как они оба лежат в интервале [0, п[. Итак, видим, что все арифметические действия на интервале [0, п[ соответствуют, благодаря китайкой теореме об остатках, аналогич-
426 IV-2 Китайская теорема об остатках ным действиям на интервалах [0,п,-[. Зато другие операции — например, сравнение элементов — менее очевидны. Эта проблема осложняется еще тем, что в общем, когда используем модулярную арифметику, стоит избегать вычислений с «обычными» числами, ибо переход от одной системы к другой не является пренебрегаемым. Проблема определения конкретных цифр в числе, полученном при модулярных вычислениях, используя лишь его модулярные составляющие (т.е. не восстанавливая настоящее число), также весьма не тривиальна. Займемся теперь различными проблемами такого типа. Оригинальная идея, принадлежащая Гарнеру (1958) и представленная у Кнута [99], состоит в том, чтобы связать с модулярным представлением еще одно представление, называемое смешанной системой счисления. (10) Определение. Основанием смешанной системы счисления называется множество из г ^ 2 целых чисел п\, пъ, ..., пг, не обязательно взаимно простых. Если положим Ni = Ib<i пз и n ~ nin2 • • nr, то имеется биекция г [О, ni[x • • • х [0, пг[—у [О, n[, (zi,..., zr) ь—> х = Y^z*Ni- •=1 Обратное отображение определяется при помощи евклидовых делений: х = qini + z\, qi = 02^2 + z2, •••> Qr-i = qrnr + zr. В случае, когда все числа п, равны, получаем обычную позиционную систему счисления (смешанная система счисления, следовательно, это система, в которой основание варьируется). Прежде чем изучать переход от модулярного представления к представлению в смешанной системе счисления, продемонстрируем два основных метода изменения основания позиционной системы. Предположим, что мы работаем с целыми числами и с основанием 6, а хотим представить их в системе с основанием В. Подобные замены основания часто возникают, например, при операциях ввода-вывода целых чисел на компьютере: для человека более удобной является система счисления с основанием 10, в то время как сама машина работает с основанием 2. В обоих представленных методах мы рассматриваем целое число и, записанное в двух формах Ylui^ или Yl^iB1 в зависимости от соответствующего основания 6 или В.
IV-2.2 Модулярная арифметика и смешанная система счисления 427 Изменение основания при помощи умножения Предположим, что мы располагаем позиционной арифметикой с основанием 6, к которому и хотим перейти. Это, например, все тот же случай, когда работают вручную и 6 = 10п. Перевод числа (С/г,..., С/о)б тогда осуществляется как поиск значения многочлена £^ С/,Х' в точке В. В процессе перевода вычисляем схему Горнера для данного многочлена. Вычисления будут значительно проще, если В < 6, так как в этом случае значения операндов во всех осуществляемых действиях меньше чем 6. Например, приведем число х = (31415)э к основанию 10: х = (((3 х9+1)х9 + 4)х9+1)х9 + 5 = 20750. Предположим, что у нас на машине реализована арифметика с основанием 216 (умножение чисел, меньших 216, имеется на всех современных машинах). Тогда в программе, которая читает большие числа, переход от представления пользователя (в десятичной системе) к внутреннему представлению (в двоичной) может быть осуществлен при помощи этого метода с В = 104 и 6 = 216. Изменение основания при помощи деления Этот дуальный к предыдущему методу способ реализуется посредством последовательного деления. Чтобы перевести число х из представления с основанием В в представление с основанием 6, разделим х на 6. Остаток от этого деления дает цифру наименьшего веса для х в основании 6, затем повторяем то же самое для частного. Процесс останавливается, когда очередное частное равно нулю. Метод предполагает умение делить числа, представленные в основании Б, поэтому предпочтительнее его использовать при b < В. Например, переведем число х = (31415)ю в число по основанию 7. Для этого разделим х на 7 и получим остаток 6 и частное 4487, потом получим остаток 0 и частное 641, затем остаток 4 и частное 91 и т.д. В итоге, читая полученные остатки в обратном порядке, находим (160406)7. Если теперь у нас имеется арифметика с основанием 216, а мы хотим получить результаты вычислений в системе с основанием 10, то удобно использовать этот метод, положив В = 216 и 6 = 104. Заметим, что можно было использовать первый метод сБ = 28и6=103, если предположить, что сложение и умножение с основанием 103 запрограммировано (что не так сложно). щ
428 IV-2 Китайская теорема об остатках Вернемся теперь к системам со смешанным основанием. Научимся сначала находить цифры в системе со смешанным основанием, исходя из модулярных компонент. (11) Формулы определения цифр (из модулярных компонент). Пусть п\у п2у ..., пг — попарно взаимно простые числа. Пусть N{ = Ylj<i nj и С» — обратные к ЛГ,- по модулю щ. Рассмотрим целое число х} модулярные компоненты которого х\} х2} ..., хГ} тогда цифры х в системе со смешанным основанием щ обозначим через г,-; они находятся по формулам: Z\ = x\ mod ni, z2 = С2(х2 — z\) mod n2i *з = Сз{хз - {N2z2 + z\j) mod n3, zr =Cr{xr - (Nr-iZr-i + h N2z2 + z\) modnr. Доказательство. I Рассмотрим формулы (1), полученные в китайской теореме об остатках: yi = x\ mod ni, 2/2 = N2{C2{x2 - Vi) mod n2) + j/i, j/r = Nr{Cr{xr - yr_i) mod nr) -f 2/r-i, и положим zi = yi, *2 = ^2(^2 — 2/1) modn2, ..., zr = Сг(хг - yr-i) modnr. Тогда 0 ^ z,- < n,- и я = Х^ЛГ,-. Теперь исключим числа у,, используемые в этих формулах, и найдем соотношения |_для определения г,-. Все это реализовано в алгоритме 3 (слева). Чтобы осуществить обратный переход от системы со смешанным основанием к модулярному представлению, достаточно провести следующие вычисления: Xi = Z\y х2 = Z\ + z2n\ mod n2} хз = Z\ + z2n\ + Z3U\n2 mod П3, xr = z\ + z2n\ + h zTn\... nr_i.
IV-2.2 Модулярная арифметика и смешанная система счисления 429 Алгоритм 3 проводит эти вычисления по аналогии с предыдущим, используя схему Горнера. ni, П2, ..., пг, попарно взаимно просты, Ni = Ylj<i П3 И CiNi = l (mod П«) х = Ylr{=i z*Ni и х = Х{ (mod n,), где 0 ^ г,, х, < щ. (gb...,gr) —>(*!,..., гГ) *i «— # i; for t in 2 .. г loop S i Zi-l\ for j in reverse 1 .. t — 2 loop 5 «— (5 x rij + zj) mod n;; end loop; z; «— C; x (#; — s) mod n^; end loop; (zb...,zr) —у (жь...,а?г) Xl < Z\\ for • in 2 .. r loop S i Zi\ for j in reverse 1 .. • — 1 loop 5 <— (5 x nj + Zj) mod n<; end loop; аг< <— s; end loop; Алгоритм 3. Переход от модулярного представления к смешанной системе счисления Рассмотрим теперь применение системы со смешанным основанием к некоторым проблемам, сформулированным в начале раздела. Сравнение двух целых чисел Предположим, что у нас имеются два целых числа х и х', заданные своими модулярными компонентами, и мы хотим узнать, которое из этих чисел (можем считать, что они оба лежат в интервале [0, т[) больше, по возможности не вычисляя явный вид этих чисел. Вычислим сначала цифры (г,) и (г,-), соответствующие хих'в смешанной системе счисления, определяемой модулями. В этом случае х < х' тогда и только тогда, когда наибольший вес г, на котором различаются эти числа, таков, что Z{ < z\. Определение цифр в позиционной системе счисления Пусть целое число х задано своими модулярными компонентами и мы хотим вычислить его цифры в системе с основанием 6, взаимно простым со всеми модулями. Вычислим сначала цифры числа х в системе со смешанным основанием и обозначим их, как обычно, Z\, ..., zr. В этих обозначениях число х запишется как 5^2,-N,-, что позволяет вычислить х mod 6, используя схему Горнера. х mod 6 = (... ((zr mod 6) * nr_i + zr_i mod 6)...) * n\ + Z\ mod 6.
430 IV-2 Китайская теорема об остатках Таким образом, мы получили первую цифру х в системе счисления с основанием 6. Чтобы повторить эту процедуру, нужно вычислить модулярные компоненты числа (х — (х mod b))/b при помощи модулярного вычитания (которое совпадает с обычным вычитанием, ибо х mod 6 меньше или равно х) и модулярного деления (которое возможно, так как 6 обратимо по всем модулям п,-). Рассмотрим, например, три простых числа п\ = 1009, п2 = 2039, пз = 907. Пусть х — число из интервала [0, 1 866 017 357[ и его остатки по модулям ni, П2 и пз равны х\ = 23, х2 = 41 и х3 = 35. Вычислим сначала цифры х в системе со смешанным основанием: 23, 1746, 144. Чтобы вычислить последнюю цифру х в системе с основанием 10, проведем соответствующие вычисления по модулю 10 и получим: х0 = (23 х 1009 + 1746) х 2039 + 144 = (3 х 9 + 6) х 9 + 4 = 1 (mod 10). Зная обратные к 10 по модулям п,, а это 101, 204 и 635, вычисляем модулярные компоненты числа х' = (х — хо)/10: х' = ((23 - 1) х 101 mod 1009, (41 - 1) х 204 mod 2039, (35 - 1) х 635 mod 907) = (204, 7, 729), которым соответствуют цифры смешанного представления х'\ 204, 990,14... В итоге мы восстановим все цифры числа х = 298 020 281, не вычисляя само х (самые большие числа, использованные нами, не превосходят 2039). 2,3 Умножение целых чисел методом Полларда В настоящее время этот метод является самым быстрым и позволяет перемножать два числа длины п за 0(n\ogn) элементарных умножений, а не за 0(п2), как обычный метод. Важно отметить, что это не асимптотический метод, т.е. пригодный для умножения чисел любой длины, напротив, он ограничивает размер чисел. Правда, на практике эта граница ни на что не влияет, так как метод Полларда позволяет умножать числа, имеющие около 1 миллиарда десятичных цифр! Существуют и другие, асимптотически быстрые методы умножения; такие, как метод Шёнхаге — Штрассена [162], который имеет сложность 0(п log n log log n), или упрощенная версия Карпа [29] со сложностью C?(nlog2 n). Однако, в диапазоне применения метода Полларда они хуже последнего, а первый метод настолько сложен, что, возможно, никогда не будет реализован.
IV-2.3 Умножение целых чисел методом Лолларда 431 Метод Полларда основан на применении алгоритма вычисления быстрого преобразования Фурье, которое будет изучено в главе V. Основной результат этой главы, с которым мы сейчас будем работать, выглядит следующим образом: (12) Теорема (быстрое преобразование Фурье). Существует метод интерполяции на п специально выбранных точках, который работает с многочленами, степени строго меньшей п, я требует 0(n\ogn) умножений коэффициентов (вместо п2, обычно необходимых). Эти методы позволяют быстро умножать по модулю Хп — 1 многочлены степенИу строго меньшей п, за 0(n log n) элементарных умножений. Метод Полларда заключается в следующем: пусть и и v два перемножаемых числа, записанных в системе с основанием Ь: и = J2i<n щЬ\ v = ^2i<n Vibx (и и v длины ^ п). Эти два числа могут быть рассмотрены как значения в точке 6 многочленов U = ^2 щХх и V = J2 viXx. • Начнем с умножения многочленов U и V. Эта операция, используя быстрое преобразование Фурье, требует 0(n log n) умножений цифр. • Обсудим теперь переносы: коэффициенты произведения многочленов, полученного на предыдущем этапе, в действительности могут быть больше основания выбранной системы и проблема не в том, чтобы вычислить значение произведения в точке 6, а в том, чтобы управлять недоступными вычислениями. Как мы видим, метод Полларда разбивается на два различных этапа: вычисление произведения многочленов и переносы цифр в уме. Мы изучим оба эти этапа по отдельности. Начнем с простой операции переноса цифр. (13) Предложение (перенос цифр в уме). Пусть и = Yli<n и№ И v = Yli<n Vi^% — Два перемножаемых числау a U и V — многочлены с целыми положительными коэффициентами, соответствующими этим числам. Пусть W = ^2i<2n-ia*X* — произведение U и V. (г) Тогда w = uv = W(6) я цифры Wi числа w могут быть получены по следующим рекуррентным формулам: W{ = ^ mod 6, где /?,+i = a,+i + -^—г—- я /?0 = а0. (2)
432 IV-2 Китайская теорема об остатках (И) Если константа М не меньше всех а,-, то все числа /?,-, появляющиеся в предыдущем вычислении, не превосходят Mb/(6 — 1). Доказательство. I (г) Покажем, что ао + сцбН hогг-6* = wo + wib-\ biUi_i&,_1+/?,&' для всех г (положим а, = 0, если г ^ 2п — 1). Если мы к тому же докажем, что /?,- = 0 для г ^ 2п, то это и будет означать, что W{ — цифры w. Из (2) получаем /?t+i&,+1 + г^б* = at+i&,+1 4- /?«Ь*, откуда и следует предыдущая формула (при г = 0 она проверяется непосредственно). Коэффициенты а,- равны нулю при г > 2п - 2 и, следовательно, /?, ^ Pi-i/Ь для всякого г > 2п — 2, это доказывает, что, начиная с некоторого г'о, коэффициенты /?, нулевые. Равенство W(b) = ]Г)ги,&' доказывает, что это выполнено при г'о, меньшем или равном 2п. (гг) Найдем константу М', которая мажорирует все /?,. По формуле (2) /?,+1 ^ М 4- Мх/6 и, следовательно, если существует М', удовлетворяющая неравенству М 4- М'/Ь ^ М;, то она удовлетворяет и нашим требованиям. Нетрудно проверить, что МЪ/(Ъ — 1) удовлетворяет последнему неравенству. Кроме того, оно больше /?о |_(так как /?0 это цифра в системе с основанием 6). На этом этапе обсуждения можно было бы подумать, что все закончено и все, что можно было сказать о методе Полларда, сказано. Ничего подобного! Какова в действительности граница величины перемножаемых целых чисел? Чтобы ответить на этот вопрос, нужно перейти к изучению главы V и подробнее рассмотреть условия применения алгоритма Fft. Для применения Fft к многочленам степени < п необходимо, чтобы п было достаточно составным (например, степенью 2), а также перейти в поле Zp, в котором существует примитивный корень n-й степени из 1. Последнее условие выполняется, например, при р = 1 (mod n). Но (какой ужас!), если работать по модулю р, то коэффициенты произведения многочленов, вычисленные с помощью Fft, более не являются точными, а лишь сравнимы с настоящими коэффициентами. Если мы хотим получить точный результат, то р должно мажорировать коэффициенты произведения. (14) Предложение (Поллард). Пусть п — достаточно сильно составное число (например, степень 2 или 3) и р — простое число, удовлетворяющее условию р = 1 (mod n).
IV-2.3 Умножение целых чисел методом Лолларда 433 Пусть и и v — два целых числа такие, что к-1 1-1 и = ^щЬ\ w = 5%,-6\ 2sup(A:,/) <£n, (6-l)2inf(A:,/) < p. i=0 t=0 Тогда можно перемножить и и v при помощи алгоритма Поллардау используя быстрое преобразование Фурье в поле Ъ?. Сложность вычислений — 0(n log п) умножений в Ъ?. Очевидно, что сложность именно такая: именно столько операций требует алгоритм умножения многочленов при помощи Fft, а переносы в уме имеют линейную сложность относительно величины результата действия алгоритма. Что касается неравенства, которому удовлетворяет р, то оно просто означает, что коэффициенты произведения многочленов меньше р. 40961=5х213 + 1 | 12289=Зх212 + 1 18433=9х211 + 1 13313=13х210+1 37889=37х210+1 | 64513=63х210+1 7681=15х29+1 23041=45х29+1 45569=89 х29+1 257=1 х28 + 1 9473=37х28+1 22273=87х28+1 31489=123х28+1 41729=163х28+1 | 49921=195х28-Ц 61441=15х212 + 1 59393=29х2п + 1 15361=15х210+1 39937=39х210+1 10753=21х29+1 26113=51х29 + 1 51713=101х29+1 769=Зх28 + 1 14081=55х28 + 1 23297=91 х28 + 1 36097=141 х28+1 43777=171 х28+1 57089=223х28+1 19457=19х210+1 50177=49х21О+1 11777=23х29 + 1 32257=63х29 + 1 3329=13х28 + 1 14593=57х28 + 1 26881=105х28+1 37633=147х28+1 46337=181х28+1 57601=225х28+1 25601=25х21О+1 58369=57х210+1 17921=35х29 + 1 36353=71 х29 + 1 7937=31 х28 + 1 16129=63х28 + 1 30977=121х28+1 40193=157х28+1 49409=193х28+1 60161=235х28-Ц | Таблица 2. Простые числа < 216 и представимые в виде р — 1 = q2k Рассмотрим более подробно, насколько большие целые числа можно умножать при помощи этого алгоритма. Для этого необходимо уточнить характеристики целых чисел, используемых в алгоритме, и подробнее остановиться на его конкретной реализации. Как уже упоминалось, умножение многочленов, использующее быстрое преобразование Фурье, наиболее просто реализуется в Ъ? и при условии, что р — ^2/с+1 + 1 с нечетным q. При этом можно точно перемножать (в этом 28-1017
434 IV-2 Китайская теорема об остатках поле) многочлены длины к. Выше сказанное как раз и составляет формальную характеристику алгоритма Полларда. Перейдем теперь к практическим соображениям. Вычисления должны производиться по модулю р; следовательно, машина, на которой реализуется этот метод, должна позволять легко осуществлять такие модулярные вычисления. В частности, простое число р должно быть таким, чтобы его можно было закодировать в виде машинного слова; по аналогичным соображениям таковым должно быть и ^снование используемой системы счисления. Теперь почти все ограничения сформулированы. Остается только найти простые числа р, которые можно реализовать на машине, и при этом степень 2 в р — 1 была бы достаточно велика. В таблице 2 приведены простые числа, меньшие 216 и такие, что степень двойки в разложении р — 1 на простые множители не меньше 8. Эта таблица позволяет выбирать простые числа при работе на 16-битной машине. Мы ограничимся этим частным случаем для изучения производительности метода Полларда. .В данной таблице наибольший интерес представляет число 40961 = 5 х 213 4- 1, так как оно содержит наибольшую степень 2, а его нечетный делитель наименьший. Вернемся к условиям предложения 14 (внимание, п теперь обозначает длину чисел в системе с основанием 6): используется система счисления с основанием 6 и длина п чисел в этой системе удовлетворяет неравенствам (6 — 1)2п < 40961 и п = 2т ^ 212. Учитывая специфику используемых машин, наиболее разумным представляется выбор основания системы счисления в виде степени 2, 6 = 2*, и тогда предыдущие условия перепишутся как 22/+m ^ 215 < 40961 и т ^ 12. Посмотрим как отразятся эти неравенства на величине перемножаемых чисел. Ниже приведена таблица возможных значений /, т и величины перемножаемых чисел с этими характеристиками (эти величины порядка 6П = 2/2Ш). 1 1 | т 1 ",f^ 7 1 214 6 3 248 5 5 2160 4 7 2512 3 9 21536 2 11 24096 Г 1 12 24096 Как видим, величина перемножаемых чисел растет при уменьшении основания системы, тем не менее не достигая экстраординарных значений: например, 24096 — число, которое имеет порядка 1230 десятичных цифр. Если довериться грубым результатам этой таблицы, то можно подумать, что наиболее приемлемое для работы основание системы счисления есть 4, ибо это наибольшее основание, при котором достигается верхняя граница размера перемножаемых чисел. Здесь на-
IV-2.3 Умножение целых чисел методом Лолларда 435 до действовать быстро! Если использовать это основание, то можно было бы перемножать 1000-значные числа, но эти вычисления потребовали бы промежуточных действий (по модулю р), приводящих к числам почти достигающим 216. Следовательно, каждая цифра кодируется 16- битным словом. При использовании системы счисления с основанием 4 на каждые 16 бит, необходимых для промежуточных вычислений, эффективно используются лишь 2, которые управляют цифрами, а значит, с пользой работает лишь 1/8 часть памяти. Например, кодирование близкого к максимально допустимому числа требует 2048 машинных слов, тогда как это же кодирование требует 256 слов в системе с основанием 216. Кроме того, арифметические операции в системе с основанием 4 недостаточно эффективны в современных машинах, в то время как основание 256 лучше всего использует и память, и потенциал машины. Таким образом, читатель может убедиться, что для того, чтобы максимально оптимизировать использование имеющихся ресурсов, нужно быть как можно ближе к максимуму возможностей машины. То же самое касается основания системы и используемых чисел. И ясно, что это невозможно в тех условиях, которые мы только что описали. Конечно, если вместо 16-разрядной машины работают на 32-разрядной, то величина перемножаемых при помощи алгоритма чисел увеличивается (в таблице 3 приведены простые числа р, меньшие 231 и такие, что степень 2 в разложении р — 1 не меньше 21). Но, используя китайскую теорему об остатках, можно улучшить приведенные выше рассуждения, откуда мы и получим настоящий алгоритм Полларда. Выберем три простых числа pi, рч и рз> которые можно закодировать на машине (мы предполагаем теперь, что наша машина 32-разрядная) и удовлетворяющие неравенству (6 — 1)2п < 2р\р2Рз- Интуитивно можно считать, что два из этих чисел мажорируют основание системы счисления, а третье — длину умножаемых чисел, и, таким образом, мы приблизимся к тем границам, о которых только что говорили. Метод Полларда умножения двух чисел и и v, при обозначениях начала раздела, выглядит следующим образом: (г) приведем цифры it и г; по модулям р,- и получим шесть многочленов C/i, С/2, U3 и Vi, V2, V3. Эта операция имеет линейную сложность по сравнению с величиной чисел (и может быть проведена немедленно, если простые числа мажорируют основание системы), (гг) используем FFT для умножения по модулям р\, рг, Рз трех пар полученных многочленов и приходим к многочленам W\, W2, W3. Эта 28*
436 IV-2 Китайская теорема об остатках операция имеет сложность порядка 6nlogn, где п — длина исходных чисел, (ш) с помощью результатов предыдущего раздела восстанавливаем многочлен W = UV. Сложность этого преобразования линейная по отношению к величине произведения многочленов, (it;) наконец, производим переносы в уме, чтобы получить цифры произведения w = uv. Сложность этой операции пропорциональна величине результата (т.е. при плохом стечении обстоятельств вдвое больше величины операндов). Из таблицы 3 видно, что имеются простые числа р = q2k + 1, меньшие 231, для которых q достаточно мало. Для применения метода надо все-таки выбрать их таким образом, чтобы вычисления по модулям р, были как можно проще. На используемой нами машине мы не располагаем операциями с 32 битами, дающими 64 битовые результаты, но можем без труда организовать вычисления по модулю числа, меньшего 230. Выберем числа 469 762 049 = 7 х 226 + 1, 167 772 161 = 5 х 225 + 1, 754 974 721 = 45 х224-fl, что немедленно дает нам границу на величину чисел, к которым можно применять алгоритм: они могут иметь более 223 цифр в выбранной системе счисления (но так, чтобы их произведение имело не более 224 цифр). Основание системы счисления, которое мы должны выбрать, должно оптимально использовать память, а следовательно, использовать как можно лучше 32 бита, в которых у нас записаны простые числа. Кроме того, если мы хотим оптимизировать фазу (г) алгоритма Полларда, то лучше выбрать основание меньше используемых простых чисел. | 2013265921=15х227+1 | | 469762049=7х226 + 1 167772161=5х225 + 1 | 2113929217=63х225+1 | 754974721=45 х224+1 377487361=45 х223+1 880803841=105х223+1 | 1300234241=155 х223+1 1811939329=27х226+1 1107296257=ЗЗх225+1 1224736769= 73х224+1 595591169=71х223+1 897581057=107х223+1 1484783617=177х223+1 1711276033=51 х225+1 2130706433=127х224+1 | 645922817=77х223+1 998244353=119х223+1 2088763393=249х223+1 | Таблица 3. Простые числа < 231 и пред ставимые в виде р — 1 = q2k
IV-2.3 Умножение целых чисел методом Полларда 437 104857601=25х222 + 1 155189249=37х222 + 1 415236097=99х222 + 1 918552577=219х222+1 985661441=235х222+1 1321205761=315х222+1 | 1790967809=427х222-Ц 2306867а=11х221 + 1 111149057=53х221 + 1 1698693ia=81x221 + l 21181235a=101x224l 270532609=129х221 + 1 387973121=185х221 + 1 576716801=275x221 + l 639631361=305х221 + 1 715128832=341 х221 + 1 799014913=381х221 + 1 924844032=441 х221 + 1 975175681=465х221 + 1 109261619а=521х221 + 1 1205862401=575х221 + 1 128135987а=611х221 + 1 136524595а=651х221 + 1 1558183937= 743х221 + 1 1709178881=815х221 + 1 1893728257=903х221 + 1 | 2095054849=999х221 + 1 113246209=27х222 + 1 163577857=39х222 + 1 666894337=159х222+1 935329792=223х222+1 1161822209=277х222+1 143864627а=343х222+1 1866465281=445 X 222+1 69206017=ЗЗх221 + 1 132120577=63х221 + 1 186646529=89х221 + 1 249561089=119x224l 274726913=131х221 + 1 459276289=219х221 + 1 597688321=285х221 + 1 648019969=309х221 + 1 740294657=353х221 + 1 824180737=393х221 + 1 950009857=453х221 + 1 1004535809=479х221 + 1 1138753537=543х221 + 1 1214251009=579х221 + 1 1306525697=623х221 + 1 1415577601=675х221 + 1 157076684 9= 749х221 + 1 1835008001=875х221 + 1 193147699а=921х221 + 1 2099249153=1001 х221 + 1 138412033=ЗЗх222+1 230686721=55х222+1 683671553=163х222+1 943718401=225х222+1 1212153857=289х222+1 1572864001=375 х222+1 2025848833=483х222-Ц | 81788929=39х221 + 1 136314881=65х221 + 1 199229441=95х221 + 1 257949697=123х221 + 1 383778817=183х221 + 1 463470593=221 х221 + 1 635437057=303х221 + 1 710934529=339 х221 + 1 786432001=375х221 + 1 899678209=429х221 + 1 962592769=459х221 + 1 1012924417=483х221 + 1 1151336449=549х221 + 1 1218445313=581х221 + 1 1327497217=633х221 + 1 1541406721=735х221 + 1 1654652929= 789х221 + 1 1868562433=891 х221 + 1 1998585857=953х221 + 1 Окончание таблицы 3. Наконец, чтобы ускорить вычисления на машине, это основание должно быть степенью 2 и даже степенью 28, поэтому мы выберем 6 = 224. Тогда верхняя грань умножаемых чисел равна б2" = 224х8388608 = 2201326604- это означает, что при выбранных простых числах можно перемножать числа, имеющие примерно 70 миллионов цифр в десятичной записи (заметим, что современные машины имеют порядка 223 байт памяти, что
438 IV-3 Группа обратимых элементов в Ъ/пЪ позволяет кодировать 221 цифр в системе с основанием 232). Конечно, если выбрать простые числа еще большими, например, 3 221 225473 = 3 х 230 + 1, 3489 660 929= 13 х 228 + 1, 2 013 265 921= 15х227+1, и уметь достаточно экономично считать в системе с основанием 232, то получится еще более впечатляющая граница: j226 _ 232x67108864 _ 22 147483648 что составляет примерно 700 миллионов десятичных цифр (кодирование одного такого числа требует порядка 250 миллионов байт). 3 Группа обратимых элементов в Z/nZ Если А — коммутативное кольцо с единицей, то группа обратимых элементов А есть U(A) = {х е А\3у е А:ху= ух = 1}. Если А и В — два унитарных коммутативных кольца, то ясно, что U(А х В) = U(А) х U(В). Вспомним следствие 8, сформулированное в разделе 2, и уточним одно из его следствий. (15) Предложение. Пусть п\, П2, ..., nq — попарно взаимно простые целые числа и n = nin2 .. .пд. Тогда U(Z/nZ) ~ U(Z/n{Z) x • • • х U(Z/nqZ). В частности, если разложение п на простые множители есть Pi*p%2 .. .р?г, то U{Z/nZ) ~ U{Z/p^Z) x U{Z/p^Z) x ... х U(Z/p?rZ). Следовательно, изучение группы обратимых элементов Z/nZ сводится к изучению аналогичной группы для Z/paZ с простым р. 3.1 Порождающие Z/nZ и функция Эйлера (16) Определение. Порядок группы U(Z/nZ) для n E N назовем функцией Эйлера я обозначим ее через <р(п). Значение функции Эйлера в точке п равно числу элементов интервала [0, п[, взаимно простых с п, или числу порождающих циклической группы порядка п.
IV-3.1 Порождающие Z/nZ и функция Эйлера 439 (17) Предложение. (г) Если р — простое число и а > О, то <р(ра) = ра~1{р — 1). В частности, у?(р) = р — 1. (гг) Если п — положительное целое число, то ^2d\n <p(d) = n. (Hi) Если пит — взаимно просты, то <p(nm) = <p(n)<p(m) (это прямое следствие китайской теоремы об остатках). (iv) Следовательно, если п = р*1 .. .р*г — разложение п на простые множители, то <P(n)=f[p?'-1(Pi-l) = nf[(l-h •=1 1=1 Рг Доказательство. I (г) U(Z/paZ) — это множество элементов из Z/paZ, взаимно простых с р. Так как р простое, то это также множество элементов из Z/paZ, которые не кратны р. Следовательно, U{Z/pQZ) = Z/pQZ - pZ/pQZ и <p{pa) =pQ - pa~\ что и требовалось доказать. (гг) Пусть Zn%d — {х Е Z/nZ \ x порядка с/}. Тогда Zn^ содержится в подгруппе {х Е Z/nZ \ dx = 0}, которая является циклической группой порядка d, если d делит п (предложение 4). Множество Zn^ есть множество порождающих элементов этой циклической группы, а значит, состоит из <p(d) элементов. Чтобы закончить доказательство, достаточно заметить, что семейство {Zntd)d\n — это разбиение множества Z/nZ. [_Пункт (it;) немедленно следует из (г) и (ггг). (18) Следствие. (г) Теорема Лагранжа: пусть х Е U(Z/nZ), тогда х^п^ = 1, что можно перефразировать следующим образом: для всякого целого х, взаимно простого с п, xV(n) = 1 (mod n). (И) Малая теорема Ферма: яусть р — простое, ах — целое число их^О (mod р), тогда хр~1 = 1 (mod p). Освобождаясь от ограничений на х, получаем эквивалентную формулировку теоремы: хр = х (mod p).
440 IV-3 Группа обратимых элементов в Z/nZ Примеры 1. Пусть п = 26. Группа обратимых элементов в Ъ^ь равна {1,3,5,7,9,11,15,17,19,21,23,25} и, следовательно, <р(26) = <р(2)<р(13) = 12. Можно проверить, что для этого кольца 12 — наименьший показатель т такой, что хт = 1. Наименьший как в смысле обычного упорядочения целых чисел, так и в смысле делимости. Это так называемый индикатор Кармайкла числа 26 или экспонента группы С/(^2б)- 2. Пусть п = 15. Обратимые по модулю 15: 1, 2, 4, 7, 8, 11, 13 и 14. Функция Эйлера от 15, следовательно, равна 8, но на этот раз это не самый маленький показатель с хт = 1 для всех х Е Z/15Z. Действительно, у?(3) = 2 и у?(5) = 4; откуда, если у Е C/(Z3) и z E C/(Z5), то у2 = 1 и г4 = 1, следовательно, х4 = 1 для всех х Е C/(Zi5). Экспонента группы и{Ъ\$) равна 4, а не 8. 3. Рассмотрим п = 561 = 3-11-17. у?(561) = 320 и не трудно проверить, что индикатор Кармайкла 561 равен 80. К тому же 561 — исключительное число в том смысле, что 80 делит 561 — 1. Следовательно для х взаимно простого с 561, выполняется: х560 = 1 (mod 561), иначе говоря, 561 удовлетворяет малой теореме Ферма, не являясь при этом простым числом. Такие числа называются числами Кармайкла. Мы столкнемся с этими числами при изучении теста на простоту Ра- бина — Миллера. 3.2 Системы криптографии с открытым ключом В качестве применения элементарных свойств группы U(Z/nZ) мы дадим несколько примеров систем шифрования с открытым ключом. Ставится следующая задача: некий Томас хочет быть уверен в конфиденциальности посланий, которые он получает. Для этого он определяет две функции, одну мы обозначим через С и назовем ключом зашифрования, а вторую D назовем ключом расшифрования. В классических криптографических схемах обе функции держатся в секрете. Принцип системы с открытым ключом был впервые предложен Диффи и Хелл- маном [64] со следующими требованиями на функции С и D: (г) Если М какое-то послание, то D(C(M)) = М. (гг) Очень трудно, или невозможно, найти D, зная С (ггг) Наконец, ключ С невозможно взломать, даже если известны любые выбранные пары (незашифрованное сообщение, зашифрованное сообщение). С — так называемая функция-ловушка.
IV-3.2 Системы криптографии с открытым ключом 441 Это последнее ограничение является тем козырем, который позволяет Томасу предоставить ключ С для общественного пользования. При этом, если кто-то хочет послать конфиденциальное сообщение Томасу, он его кодирует при помощи ключа шифрования С. Согласно гипотезам, лишь Томас сможет декодировать это сообщение при помощи известного только ему ключа расшифрования. Прежде чем рассмотреть несколько систем шифрования с открытым ключом, рассмотрим пример использования этих систем: удостоверение посланий, называемое еще электронной подписью. Во время обмена информацией между двумя лицами очень важно для обоих убедиться в «достоверности» своего партнера и в том, что никто другой не может узнать содержание посланий. Точнее, принимающий может проверить личность посылающего, так что посылающий не сможет впоследствии отказаться от своего сообщения. Рассмотрим двух корреспондентов, Романа и Клару, с соответствующими ключами зашифрования и расшифрования Сг, Д., Сс и Д., которые будем считать биективными. Роман может подписать свое сообщение следующим образом. Сначала он кодирует свою подпись 5, используя свой ключ расшифрования Д., а затем полученный результат кодирует ключом зашифрования Клары Сс, который известен. Клара получает сообщение Cc{Dr(S)) и последовательно применяет к нему ключ расшифрования Д., который известен только ей, и ключ зашифрования Сг, который известен всем. Поскольку функции зашифрования и расшифрования взаимно обратны, то она получает подпись Романа, достоверность которой подтверждается тем фактом, что только один Роман мог воспользоваться ключом Д.. Фактически, для такого механизма подписи было бы достаточно, чтобы Роман закодировал свою подпись своим ключом расшифрования, кодируя же ее ключом зашифрования Клары, он уверен, что ее сможет декодировать только Клара. Еще одно интересное применение описано Гарелом [81] (книга, которую надо обязательно прочитать!), и заключается оно в игре в покер по телефону. Пусть два игрока, один на западном, а другой на восточном побережье США, хотят сыграть партию в покер по телефону. Проблемы, возникающие при этом: раздать каждому по 5 карт, сыграть партию и в конце партии иметь возможность проверить, что никто из участников не плутовал. Для этого используют систему двух ключей, зашифрования и расшифрования, и предполагают, что ключи обоих игроков коммутируют. Кроме того, до конца партии оба игрока хранят свои ключи расшифрования в секрете и открывают их лишь в конце, чтобы позволить сопернику проверить не было ли плутовства.
442 IV-3 Группа обратимых элементов в Z/nZ Чтобы раздать карты, один игрок, Томас, берет 52 карты и кодирует их, используя свой ключ зашифрования, затем он перемешивает полученные коды и посылает их второму игроку, Роману. Тот вынимает из полученного пакета 10 карт, из которых выбирает 5 карт для Томаса, а 5 для себя и кодирует свои карты ключом зашифрования. Затем он посылает их все Томасу, который декодирует все 10 карт: 5 карт появятся незашифрованными (так как ключи игроков коммутируют) — это его карты. Оставшиеся 5 карт он снова посылает Роману, который также сможет их декодировать. Теперь можно начать партию и ее развитие будет идти по тому же протоколу, что и раздача, когда речь пойдет об обмене картами. 3.2.1 Система RSA Эта система была предложена в 1977 году Ривестом, Шамиром и Адлеманом [156]. Принцип ее действия чрезвычайно прост: выбирается группа G порядка д, который держится в секрете (в G возможны вычисления), а также целое число с (ключ расшифрования), обратимое по модулю д. Передаваемое сообщение представляет собой последовательность элементов из G, каждый из которых является зашифрованным членом последовательности, соответствующей исходному сообщению. Элемент х Е G шифруется как хс. Получатель, который знает #, может вычислить обратное к с по модулю д число, скажем d. Биекции х ■—> хс и х i—> xd взаимно обратные: (xc)d = х, так как порядок G равен д. Сообщение, таким образом, может быть декодировано посредством возведения в степень d каждого члена полученной последовательности. Чтобы применить этот метод, остается найти такие группы, порядок которых трудно вычислим, в то время как вычисления в них достаточно просты. В качестве таких групп можно взять группы обратимых элементов в Z/nZ, если не известно разложение п на простые множители. Итак, выбираются два больших простых числа, р и q. Легко вычислить <р(п) = (р — l)(q — 1) — число, которое держится в секрете (действительно, зная <р(п), можно найти сумму чисел р и q, произведение которых п известно). Зная же п и с, невозможно обратить с по модулю у?(п), так как <р(п) можно вычислить, используя факторизацию п. Если cud взаимно обратны по модулю у?(п), то биекции х ■—У хс и х i—У xd также взаимно обратны в U{b/nL). Фактически же эти биекции взаимно обратны и в Ъ/пЪ. (19) Лемма. Пусть р и q — два различных простых числа и f = 1 (mod (p — l)(q — 1)). Тогда х* = х для всех х Е Ъ/nL.
IV-3.2.1 Система RSA 443 Доказательство. I / — 1 кратно q — 1, а значит, р^-1 = 1 (mod q) и pf = p (mod g), откуда p* = p (mod pg), так как ри</ различны. Меняя местами р И(/, получим аналогичное сравнение. Таким образом, необходимое нам равенство верно для х Е U(%pq) U {p, q}. Оно сохраняется при умножениях, а следовательно, оно верно для любого х Е Zpg, ибо |__любой необратимый элемент кратен р или q. Следовательно, можно закодировать исходное сообщение, ставя в соответствие каждому его члену элемент из Ъп. Расшифровка гарантирована. Пример Рассмотрим следующие два простых числа р и q и их произведение п: р = 37 866 809 061660 057 264 219 253 397, q = 260 - 173 = 1152 921 504 606 846 803, п = pq = 43 657 458 478 029 293 976 669 622 635 814 729 303 016 339 791. Отметим, что факторизация п обычным методом потребовала бы порядка 1017 операций, что соответствует примерно 1000 лет работы машины, выполняющей миллион операций в секунду. Немного усовершенствованный, типа метода Полларда (раздел 6.3), метод факторизации требует порядка 109 операций, а значит, с выбранными числами предложения система шифрования может быть взломана. Однако на практике выбирают простые числа, имеющие порядка 100 цифр в десятичной записи, и там даже метод Полларда бессилен. Итак, в качестве открытого ключа требуется обнародовать п и число, обратимое по модулю (p-l)(q-l) = 43 657 458 478 029 293 938 802 813 573 001750 534 190 239 592, например, с = 3. Если исходное послание представляется в виде числа т = 123 456 654 092127 765 342 896 201397, то посылающий возводит его в куб по модулю п, что дает m3 mod n = 36 807 684 002 873 914 344 429 802 591 773 115 971466 280 467. Получатель легко может обратить 3 по модулю <р(п)\ действительно, так как р и q сравнимы с 2 по модулю 3, то <р(п) = (р — l)(q — 1) сравнимо с 1 по модулю 3, а значит, число d=p(n)-Mn)-l)/3 = = 29104 972 318 686 195 959 201875 715 334 500 356 126 826 395
444 IV-3 Группа обратимых элементов в Z/nZ обратно к 3 по модулю (р — l)(q — 1). Возводя полученное сообщение в степень d по модулю п, получатель найдет число т. Чтобы завершить обсуждение RSA, отметим, что до настоящего времени все сколько-нибудь серьезные атаки на RSA были либо некорректными, либо сводились к алгоритму факторизации целых чисел. Эквивалентность между этими двумя проблемами, кстати, в общем случае не доказана (см. Рабин [151]). Хотя систему RSA очень трудно атаковать, но зато можно получить некоторую частичную информацию. В частности, некоторые свойства шифруемых элементов могут быть снова найдены в криптограммах. Например, свойство числа из Ъ/nL быть квадратичным вычетом сохраняется при зашифровке. 3.2.2 Алгоритм рюкзака Этот метод опирается на алгоритмическую сложность хорошо известной проблемы и принадлежит Мерклю и Хеллману [127]. Свое название метод получил благодаря во многом аналогичной проблеме, которая возникает у путешественника, имеющего рюкзак и желающего унести как можно больше вещей из п имеющихся, которые, к сожалению, все в рюкзак не умещаются. Следовательно, он должен выбрать предметы, чтобы наиболее оптимально наполнить рюкзак. Более формально, общая проблема состоит в следующем: дана n-ка положительных целых чисел (<zi,a2,.. .,ап) и положительное число S такое, что S = 5^ а,-я,-, с х, G {0,1}. Если вычисление 5, при известных я,-, очень простая процедура, требующая всего п сложений, то поиск я,-, для заданных 5 и а,-, требует порядка экспоненты от п операций, если числа а,- не выбраны особым образом (поставленная задача является ЛГР-полной, как и классическая проблема коммивояжера). Следовательно, в общем случае эту проблему решить невозможно, а значит, можно адаптировать алгоритм рюкзака для получения функции ловушки. Для этого, конечно, нужно выделить класс n-ок, для которых, имея некоторую дополнительную информацию (секретную), можно решить проблему рюкзака. Во всяком случае, следует отметить, что решение этой проблемы существует не всегда, а если решение существует, то оно не обязательно единственно. (20) Определение. п-ка положительных чисел (Ь\, 62,..., Ьп) называется сверхрастущей, если каждая компонента 6,- больше суммы всех предыдущих. Проблема рюкзака легко решается для сверхрастущей n-ки чисел. Действительно, пусть S = 5^Я|А* с ж,- = 0 или 1. Начнем с поиска
IV-3.2.2 Алгоритм рюкзака 445 в п-ке 6 наибольшего элемента, меньшего 5, скажем 6*. Так как п- ка 6 сверхрастущая, то число S — bk строго меньше, чем 6^ и к нему снова можно применить только что описанный процесс. Таким образом, за линейное время можно найти единственное решение проблемы или доказать, что его нет. Конечно, в этом частном виде, алгоритм рюкзака не представляет никакого интереса для криптографии. Но идея Меркля и Хеллмана состоит в том, чтобы немного изменить компоненты сверхрастущей п-ки и получить n-ку, по виду не отличающуюся от других, но несущую в себе скрытое сверхвозрастание исходной n-ки. Для этого выбирается произвольное число т, большее 52 6,-, и число w, взаимно простое с т, обратное к которому по модулю т есть и. Далее вычисляем новую п-ку а = (ai,..., ап) по правилу а,- = wb{ (mod m) и в качестве открытого ключа публикуем а, а числа 6,-, т, и и w держим в секрете. Понятно, что n-ка а больше не сверхрастущая (в противном случае т и w выбраны неудачно). Процесс расшифровки очень прост: лицо, желающее отправить сообщение, кодирует его при помощи 0 и 1, затем разбивает полученную последовательность на группы из п битов, я,-, и посылает криптограмму S = 52х,-а,-. Дешифровка не менее проста: полученное сообщение S умножаем на и по модулю т, что, очевидно, дает S' = 52 х»^»> и дальнейшее декодирование тривиально, так как 6 сверхрастущая. Пример Чтобы немного разъяснить механизм действия этой системы, проиллюстрируем его на конкретном примере. Возьмем сверхрастущую последовательность 6 (состоящую из чисел Фибоначчи): 5, 13, 21, 89, 233, 377, 987, 2 584, 6 765, 17711. Сумма этих чисел равна 28 785 и в качестве модуля т, большего этой суммы, выберем наименьшее простое число, большее числа Фибоначчи 46 368, это m = 46 381. Так как т простое, то любой множитель подходит для изменения 6, а потому возьмем w = 522. Обратное к нему по модулю т есть и = 40961. Тогда открытый ключ а, полученный из 6 при помощи умножения на 522, выглядит так: 2 610, 6 786, 10 962, 77, 28 864, 11270, 5023, 3 799, 6 374, 15 323. Теперь рассмотрим три обмена сообщениями между Кларой, которая знает только набор а, и Романом, который имеет всю информацию.
446 IV-3 Группа обратимых элементов в Z/nZ Сообщение 1. Допустим Клара хочет послать Роману секретное сообщение (1,0,1,1,0,1,0,0,0,1). Она составляет сумму соответствующих элементов из a: S = 40 242 и посылает ее Роману. Роман умножает полученный криптотекст на 40961 по модулю 46 381, что дает Sf = 18 203. Далее он ищет в 6 наибольший элемент, меньший S', — это &ю — 17711, вычитает это число из S' и отмечает, что последний бит сообщения равен 1. Затем Роман ищет наибольшее &,, меньшее Sf = 492, — это &б = 377. Таким образом, новые биты сообщения есть 0, 0, 0 и 1...; продолжая в том же духе, Роман вскоре закончит дешифровку и найдет сообщение, посланное Кларой. Сообщение 2. Роман получает криптограмму S = 91088, умножает ее на 40 961 по модулю 46381 и получает S' = 28785. Ага! Это сумма всех элементов из 6, а значит, было послано сообщение (1,1,1,1,1,1,1,1,1,1). Сообщение 3. Криптограмма — это S = 40 831. Умножение S на и дает 26112. Тогда, произведя декодирование, получим М = (1,1,1,0,1,1,1,0,1,1). но это еще не все! Охваченный сомнением, подозрительный по природе Роман, решает зашифровать М, как бы желая послать его самому себе. И к собственному удивлению находит не 5, а 87 212. Следовательно, полученная криптограмма не была зашифрована ключом Романа и его пытались обмануть. Конечно, чудес не бывает, и оба сообщения, полученное и найденное Романом, сравнимы по модулю т, чем и объясняется возможность дешифровки. Неразбериха происходит из-за того, что Клара производит вычисления в Z, а Роман в Ът. Зато, несомненно при использовании этой схемы всевозможные сообщения инъективно отображаются в множество целых чисел. щ Когда в 1978 году Меркль и Хеллман представили свой метод криптографии с открытым ключом, это выглядело многообещающе. Увы! В 1982 году Шамир [163] опубликовал алгоритм, атакующий проблему сверхрастущего рюкзака. Хотя общая проблема неразрешима и открытый ключ (n-ка), полученный по методу Меркля — Хеллмана, ничем не отличается от обычных, но атака все-таки возможна. Параллельно своему алгоритму Шамир представил процедуру, позволяющую усложнить исходную систему. Идея состоит в том, чтобы изменять сверхрастущую n-ку, несколько раз используя метод Меркля — Хеллмана для различных целых чисел. Приведем основные принципы методов, используемых в настоящее время: (г) случайным образом выбирается сверхрастущая n-ка (&i, 62,..., &п) положительных целых чисел и некоторое, строго определенное, число к
IV-3.2.3 Как разделить секрет? 447 (см. Шамир [163] для выбора &), (И) выбирается любая перестановка а = (ai, аг,..., ап) п-ки 6, (iii) наконец, выполняется следующий алгоритм: I for j in 1 .. k loop выбирается целое число mJ? большее суммы всех а<; выбирается целое число iuj, взаимно простое с mj\ вычисляется uj, обратное к wj по модулю mj\ (oil °2, • • •, ап) 4— (tuj<3i mod mj, WjQ2 mod mj, ..., Wjan mod nij); j end loop; (iv) публикуется полученная п-ка (ai, a2,..., an). Текст кодируется при помощи последовательностей из п битов и криптограмма (т.е. зашифрованное сообщение) есть S = 5^ я,-а,-. Алгоритм расшифровки очень прост и начинается с применения к криптограмме S к раз (в порядке, обратном предыдущему алгоритму) операции S <— S * Uj mod rrij. Затем, для полученного результата 5', избавляясь от перестановки, которая была применена к п-ке 6, используем метод сверхрастущего рюкзака. После того как все эти действия проведены, необходимо проверить, что сообщение, полученное таким образом, соответствует криптограмме. Хотя, возможно, что криптограмма, признанная недействительной, после всех операций, которые над ней совершаются, может дать сообщение, связанное с исходным (как мы видели это в примере). Дополнительная дешифровка позволяет избавиться от таких случаев. В 1985 году Бриккел нашел способ разбивать секретные коды, базирующие на предыдущем принципе (многократных домножений). Различные работы привели к ослаблению криптосистем, основанных на алгоритме рюкзака и его частных случаях [47]. 3.2.3 Как разделить секрет? Этот заголовок является названием двух статей по вопросу, соответствующему проблеме, впервые изученной Шамиром [164]. Рассмотрим группу из п лиц, которые должны разделить секрет S таким образом, чтобы никакие к — 1 лиц, объединяя свои знания, не смогли раскрыть этот секрет, в то время как это могли бы сделать любые к лиц. Эта проблема известна как (к, п)-пороговая схема. Решение этой проблемы является простым применением китайской теоремы об остатках и состоит в следующем: секрет S представляется в виде элемента унитарного коммутативного кольца А и приводится
448 IV-3 Группа обратимых элементов в Z/nZ по модулям п взаимно простых идеалов кольца А так, что знания любых к — 1 остатков недостаточно для определения 5, а знание любых к остатков для этого вполне хватает. Первый конкретный пример был найден Шамиром, который рассмотрел кольцо А = F[X], где F — конечное поле Z/pZ с р > п. Возьмем п идеалов Ij = {Q E F[X] \ Q(aj) = 0} для 1 ^ j ^ n и различных точек aj. Секрет — это многочлен Р степени, строго меньшей к, и частичная информация, распределенная между п лицами, есть значения Xj многочлена Р в точках aj. В этом случае применению китайской теоремы об остатках соответствует интерполяционный многочлен Ла- гранжа, который будет рассмотрен в главе V. Следует отметить, что в этом случае к — 1 лиц могут свести проблему к выбору одного из |F| многочленов степени < А:, полученных при помощи интерполяции, если варьировать значение искомого многочлена в к-й точке. Каждая интерполяция требует порядка А:3 операций, а потому поиск секрета не совсем безнадежная попытка. Следующий пример был предложен Mignotte [128] и использует кольцо целых чисел. Выбираются п попарно взаимно простых чисел mi, Го2, ..., ™>п и два числа а и 6 такие, что а < Ь и произведение любых к — 1 чисел из ш,- меньше а, а произведение любых к чисел больше 6. Теперь если секрет S — это целое число, заключенное между а и 6, то мы можем применить принцип Шамира. Знание к — 1 вычетов, например, по модулям mi, 7712, ..., m^_i дает порядка (b — a)/(mirri2 .. .m^_i) вариантов, среди которых и нужно выбрать секрет. Если числа а и 6 довольно большие, то количество вариантов также велико и делает поиск секрета бесполезным. Если, например, все т,- порядка 107 и Аг = 20, то а га 10133, а 6 га 10140. Таким образом, размер интервала b — а порядка 10140 и, имея 19 вычетов, получим около 107 вариантов решения. 3.3 Мультипликативные группы конечных полей (21) Предложение. Если р — простое, то группа обратимых элементов из Fp = Z/pZ — циклическая порядка р — 1. Доказательство. I Пусть р*1 ..-Ргг — разложение на простые множители числа п = р — 1. Докажем, что существует элемент порядка р?* для любого г G [1, г]. Так как мы работаем в поле, то многочлен Xnlpi — 1 имеет не более n/pi корней. Следовательно, существует элемент z,-,
1V-3.3 Мультипликативные группы конечных полей 449 обратимый в Wp и такой, что г*'Рг ф 1. Тогда элемент yi = 2r" i °» О j — 1 удовлетворяет соотношениям у?* = 1 и у?* ^ 1> а значит, имеет порядок р?*. Нетрудно проверить, что произведение у\У2 - - Уг I имеет порядок р — 1 в IFJ. Замечание. Предыдущее доказательство можно применить к любой коммутативной группе G, для порядка которой п выполняется условие: Vd | п уравнение xd = 1 имеет не более cf корней в G (в частности, это верно для любой подгруппы в К*). Предложение 21, фактически, прямое следствие более общего результата, установленного для произвольных полей1. Пример Данное выше доказательство не указывает в явном виде образующие группы и{Ъ/рЖ), но оно дает метод, при помощи которого можно попытаться найти элемент порядка d для числа d, которое делит порядок группы и является степенью простого числа. Действительно, запишем: п = р — 1 — порядок C/(Z/pZ) и qa делит п и q — простое. Возьмем произвольный х Е и(Ъ/рЩ и вычислим у = xnlq°. Разумеется, уя = 1 и если уя ф 1, то порядок у равен qa. Так как уЯа = xn/g, то выбор х неудачный, если он принадлежит подгруппе Я = {х | хп/9 = 1}. Эта подгруппа порядка n/g, а потому вероятность неудачи равна -. Два замечания: эта вероятность не зависит от Я показателя а (она одинакова как для кубического корня, так и для корня степени 27, лишь бы разложение числа п = р— 1 было подходящим); кроме того, существует ровно q корней степени q из 1 среди рассматриваемых п элементов, поэтому вероятность найти примитивный корень степени q из I равна 1 — £. Например, если р = 1 (mod 3), то среди р — 1 элементов имеется только три кубических корня из единицы, но при каждой попытке вероятность найти примитивный кубический корень равна 2/3. Рассмотрим б простых чисел, больших 100 и сравнимых с 1 по модулю 3: 103, 109, 127, 139, 151 и 157. Применяя этот метод, найдем кубические корни из 1 (отличные от 1) по модулям этих простых чисел. Значение х = 2 подходит лишь для 103, 139, 151, а значение х = 3 *На самом деле указанная группа обязана быть циклической (докажите!). — Прим. ред. 29 1017
450 IV-3 Группа обратимых элементов в Z/nZ подходит для 109, 127 и 157. Приведем соответствующие кубические корни: (103-1) (109-1) 2^-г~1 = 46 (mod 103), З^-1 = 63 (mod 109), 3йц=Я _ 10? ^mod 12?^ 2ii2»pii _ 9б ^mod 139^ 2^^^ = 32 (mod 151), (157-1) 3^-^ = 12 (mod 157). Не стоит думать, что 2 или 3 всегда подходят для проверки; ниже даны три примера, в которых числа, меньшие х, приводят к неудаче: р = 6091, х = 7, х2^1 = 5346 (mod р), р = 6271, х = 11, х2^ = 2020 (mod р), р=7921, ж = 7, х^г -7921 (mod р). (22) Теорема. Пусть К — поле. Тогда, всякая конечная подгруппа мультипликативной группы К* циклическая. Доказательство. I Здесь приведено абстрактное доказательство этой теоремы, которое также является еще одним доказательством предложения 21. Пусть G — конечная подгруппа в К* и ее порядок равен п. Для \ d | п через Gd обозначим множество элементов G порядка d. Если Gd не пусто, то возьмем элемент xQ E Gd- Тогда мультипликативная группа, порожденная хо, совпадает с множеством корней многочлена Xd — 1, так как последний имеет не более d корней в поле. Следовательно, Gd состоит из элементов порядка d, лежащих в группе, порожденной элементом х0. Множество Gd содержит все образующие (и только их) циклической группы из d элементов, количество которых <p(d). Значит, \Gd\ ^ <p(d) для любого d \ п. Понятно, что п = \G\ = J2d\n \°dl а кроме того п = J*,d\n ?(<*)> откуда \Gd\ = <p{d) для любого d \ п. В частности, \Gn\ = <р(п) ф О |_и существует элемент порядка п. Замечание. То, что в теореме 23 фигурирует поле, а не произвольное тело, важно, как показывает следующий пример. Пусть MI — множество 2 х 2-матриц с комплексными коэффициентами,
IV-3.3.1 Аннулятор конечной абелевой группы 451 имеющих вид I — ) • Можно проверить, что MI является унитарным подкольцом кольца Мг(С). Используя равенство (х -V\(* У\_ (\*2\ + \у2\ О N легко доказать, что Ш — некоммутативное подтело в Мг(С). Оно называется телом кватернионов. Мультипликативная группа Н* содержит нециклическую подгруппу порядка 8, состоящую из матриц Это группа кватернионов. Всякий ее элемент является корнем многочлена X4 — 1, который, следовательно, имеет по крайней мере 8 корней в ML 3.3.1 Аннулятор конечной абелевой группы (23) Предложение. Пусть G — конечная абелева группа, записанная аддитивно. (г) Множество AnnG = {m G 2 | Vx E G, mx = 0} — ненулевой идеал Ъ (по крайней мере порядок группы G принадлежит Ann G), порожденный положительным целым числом A(G). Этот элемент A(G) наименьший как в смысле обычного упорядочения целых чисел, так и по делимости, среди положительных чисел m таких, что тх = 0 для любого х из G. Следовательно, это НОК порядков элементов группы G. (И) В G существует элемент порядка A(G). Назовем его примитивным. Доказательство. Приведем сначала самое короткое доказательство. Согласно теореме 67 главы III, в которой определена структура конечно порожденных модулей (всякая абелева группа является Z-модулем), группа G изоморфна прямому произведению Z/n{L х • • • х Z/nrZ, где щ > 1 и п\ \ п^ \ ... \ пг. Тогда nrG = 0 и элемент из G, образ которого при изоморфизме есть (0, ...,0,1), имеет порядок пг. Таким образом, в G имеется [^элемент порядка A(G) = пг. 29*
452 IV-3 Группа обратимых элементов в Ъ)пЪ Ниже приведено более длинное доказательство, которое зато не требует знания модулей над кольцами главных идеалов. Для этого необходима следующая дополнительная лемма. (24) Лемма. Пусть х и у — два элемента конечного порядка в абелевой группе G. Тогда существует элемент z в группе, порожденной х и у, порядок которого равен НОК порядков х и у. Доказательство. I Пусть пит — порядки х и у соответственно. Запишем разложение этих двух чисел на простые множители, делящие хота бы одно из этих чисел: и предположим, что эти разложения таковы, что <*% ^ /?t, Vi ^ q и oti < /?,-, Vi > q. Тогда числа n' = р*1 .. .pq4 и m' — pqq+i • • .pfr делят пит соответственно, взаимно просты и их произведение равно НОК(т, п). Элементы (п/п')х и (m/m')y имеют порядки п' и т' соответствен- [_но, а значит, их сумма имеет порядок n'm'. Другое доказательство предложения 23 Для простого числа р назовем абелеву группу G р-примарной, если для любого х G G существует m G N такое, что ртх = 0. Пусть m — наименьшее число, удовлетворяющее этому свойству для всех элементов из G (т существует, так как G конечна). Тогда существует элемент в G порядка рт = X(G) (в противном случае pm~1G = 0, что противоречит минимальности т). Всякая абелева группа порядка п разлагается в прямую сумму при- марных подгрупп (это простое следствие соотношения Безу): G = G\ ф • • • ф Gr, где п = р"1 .. .р"г и G,- — р^-примарная. В каждой группе G,- имеется элемент Z{ порядка A(G,). Тогда элемент z — z\ + V zT имеет порядок A(Gi)...A(Gr) = HOK(A(Gi), ..., A(Gr)) = A(G). ■
IV-3.3.2 Индикатор Кармайкла 453 Дадим несложный критерий, позволяющий проверить, является ли элемент х группы G порядка п ее образующим. (25) Предложение. Пусть G — циклическая группа порядка п, записанная мультипликативно. Пусть р*1 ...р?г — разложение п на простые множители. Элемент х Е G является образующим G тогда и только тогда, когда XTI/Pi ф J дДЯ всех j £ [1? Г]. К сожалению, этот критерий трудно использовать в приложениях, так как он требует знания разложения порядка группы на простые множители. 3.3.2 Индикатор Кармайкла В данном разделе рассматриваются группы, записанные мультипликативно. (26) Определение. (г) Число A(G), введенное в предложении 23, называется экспонентом группы G. (И) Экспонента группы обратимых по модулю п элементов называется индикатором Кармайкла числа п. Аналогия. Пусть К — поле, Е — конечномерное векторное пространство над Кии — эндоморфизм Е. Отображение, которое каждому Р £ К[X] ставит в соответствие Р(и), является гомоморфизмом /f-алгебр и, так как К[Х] бесконечномерно, то его ядро не пусто. Ядро этого отображения является идеалом в К[Х] (вспомним, что К[Х] кольцо главных идеалов), порожденным многочленом М, который мы назовем минимальным многочленом и. Кроме того, можно наделить Е структурой К[X]-модуля, положив для Р £ /f[X]: P'X = Р(и)(х). Этот К[Х]-модуль, который обычно обозначается через Еи, конечно порожден (так как К[Х] содержит константы, а потому любой базис Е будет системой образующих для Еи) и с кручением (если бы это было не так, то Еи содержал бы подмодуль, изоморфный /f [X], что невозможно, так как К[Х] бесконечномерный). Тогда к Еи можно применить теорему о структуре конечно порожденных модулей и найти г унитарных многочленов Pi, Рг, ..., Рг с Ей а ВД/(Р.) © • • • в К[Х]/(РГ), где Рх \ Р2 \ ... \ Рг.
454 IV-3 Группа обратимых элементов в Ъ/пЪ Инвариантные множители Р, называются инвариантами подобия эндоморфизма и. Многочлен Рг — минимальный многочлен и, аналогом которого в группе является экспонента. Характеристический полином квадратной матрицы U степени п определяется как определитель det(XIdn — U) матрицы с элементами в /f [X]. Это унитарный многочлен степени п, инвариантный относительно перехода от базиса к базису. Поэтому имеет смысл говорить о характеристическом полиноме эндоморфизма и. Можно доказать, что характеристический полином эндоморфизма и есть произведение инвариантов подобия и и мы приходим к теореме Гамильтона — К эли, которая говорит, что характеристический полином эндоморфизма и аннулирует этот эндоморфизм. Теперь ясна аналогия между тем, что мы изучали ранее, и тем, о чем только что говорили: минимальный многочлен играет роль индикатора Кармайкла, характеристический полином — функции Эйлера, а теорема Гамильтона — Кэли, соответствует теореме Лагранжа для целых чисел. (27) Свойства. (г) Порядок группы и ее экспонента имеют одни и те же простые множители. (гг) Абелева группа является циклической тогда и только тогда, ко- г да. \G\ = X(G). (Hi) Порядок — функция мультипликативная, что неверно для экспоненты: |Gi х G2| = |Gi| х |G2| я A(Gi х G2) = HOK(A(Gi), A(G2)). Доказательство. (г) Из теоремы о структуре конечных абелевых групп (являющихся Z-модулями) следует, что экспонента группы — это наибольший инвариантный множитель, в то время как порядок — произведение всех инвариантных множителей. Но все инвариантные множители делят A(G). Поэтому A(G) делит \G\ и любой простой делитель \G\ делит A(G). Отсюда, между прочим, следует, что в абелевой группе G существует элемент порядка d для всякого свободного от квадратов делителя d порядка |G|. (гг) Достаточно заметить, что и то и другое утверждение эквивалентности влечет существование элемента порядка |G|.
IV-3.3.2 Индикатор Кармайкла 455 Замечания. Продолжим аналогии с эндоморфизмами векторных пространств. Пункт (t) предыдущего предложения означает, что минимальный и характеристический многочлены имеют одни и те же неприводимые множители. Пункт (it) означает следующее: если минимальный и характеристический многочлены и равны, то К[Х]-модуль Еи порождается одним элементом х. В этом случае х является образующим модуля, но не его базисом. Зато последовательное применение и к элементу х: х, и(х), и2(х), ..., продолжаемое до тех пор пока эти векторы линейно независимы, дает базис Е. * Наконец, декартову произведению двух абелевых групп соответствует квазидиагональная матрица, состоящая из двух блоков. Последний пункт означает, что характеристический многочлен этой квазидиагональной матрицы равен произведению характеристических многочленов блоков, в то время как минимальный многочлен есть НОК соответствующих минимальных многочленов. (28) Свойства (для случая целых чисел). (г) \(п) = \(U(Z/nZ)) и <р(п) = ip(U(Z/nZ)) = card U(Z/nZ). (гг) Если р — нечетное простое число, то А(рГ) = <р(рг) (так как группа обратимых элементов по модулю рг циклическая, что будет доказано позже). Для р— 2 имеем: А(4) = 2 и А(2Г) = 2Г~2. (ш) Если разложение п на простые множители есть р*1 .. .р"г, то <р(п) = <?№)..■<?№) и А(п) = НОК(А(р?»),..., А(р?0). Приложение В примере 3 конца раздела 3.1 мы назвали число 561 числом Кармайкла. Теперь мы в состоянии дать более строгое определение чисел Кармайкла: это числа п, для которых А(п) делит п — 1 и, следовательно, которые удовлетворяют формулировке теоремы Лагранжа, не будучи при этом простыми. Никакая степень простого числа не является числом Кармайкла, что следует из пункта (гг) предыдущего утверждения и того, что НОД рт — 1 и А(рг) = <р(рг) равен р— 1 (для степеней 2 это просто проверить).
456 IV-3 Группа обратимых элементов в Z/nZ 3,4 Группа обратимых элементов Z/prZ Ранее мы видели, что изучение группы C/(Z/nZ), благодаря китайской теореме об остатках, свелось к изучению групп C/(Z/prZ) для всех при- марных множителей рг, участвующих в разложении п. Пришло время изучить структуру этих особенных групп. В действительности, как будет показано дальше, это изучение сводится к двум различным случаям, в зависимости от того, равно простое число двум или отлично от двух. В первом случае почти всегда соответствующая группа не циклическая, а во втором — всегда циклическая, 3.4.1 Несколько полезных сравнений Сравнения, которые мы собираемся получить, полезны при изучении C/(Z/prZ), а также будут использоваться при нахождении образующих. Для р ^ 1 определим многочлены с целыми коэффициентами: YP — YP sP(x>Y) = у I = XP~l + x"~2y + •■■ + yp_1- Л — Y YP — 1 Sp(X) = SP(X, 1) = —— = X"-1 + Xp~2 + ■■■ + !. Для коммутативного кольца с единицей и целого числа т через (т) обозначим идеал этого кольца, порожденный элементом ml. (29) Свойство. Пусть П\у П2, ..., пг — целые числа,, делящие целое число п. Если х и у — элементы коммутативного кольца с 1, то х = у (mod п) => 5П1...Пг(х,у) =0 (mod щ .. .пг). Доказательство. I Если х = у (mod п), то имеем: 5п(х, у) = пхп~1 = 0 (mod n). Заметим также, что 5П1П2(Х,У) = 5П1(ХП2,УП2)5П2(^,^), откуда х = у (modni) =^ хП2 = 2/П2 (mod щ) => 5П1(хП2,2/П2) = 0 [_(mod ni). Дальнейшее доказательство происходит по индукции. (30) Следствие. Пусть А — коммутативное кольцо с 1, ар^ 1, г^ 0 — целые числа. (г) х = у (mod p) => Spr (x,y) =0 (mod pr). В частности, если х = 1 (mod р)> то Spr(x) = 0 (mod pr). Это немедленно следует из предыдущего свойства при п, = р.
IV-3.4.1 Несколько полезных сравнений 457 (И) Для к ^ 1 х = у (mod pfc) =>> хрГ = t/pP (mod pr*k). В частности, если х = 1 (mod рк), то хрГ = 1 (mod рг+;е). Действительно, хрГ — г/рГ = (х-2/)5рг(х,2/). О тс тупление Прежде чем переходить к изучению обещанных сравнений, что является немного скучным занятием, мы наметим применение предыдущего следствия к рассмотрению рекуррентных последовательностей xn+i = axn + Ь (mod m), которые часто используются для получения псевдослучайных последовательностей. Первое требование для таких последовательностей — это получение как можно большего количества различных чисел. Это приводит нас к следующему вопросу: при каких условиях аффинное преобразование / кольца Zm, определенное как / : х ь->> ах + 6, является циклом длины т? Ясно, что / биективно тогда и только тогда, когда а обратимо по модулю т. Кроме того, fq — это отображение х ь->. aqx + bSq(a). Следовательно, равенство fq = Id эквивалентно тому, что aq = 1 (mod m) и bSq(a) = 0 (mod m). Для простоты предположим, что 6=1. Тогда условие bSq(a) = 0 дает Sq(a) = 0, откуда aq = 1. Начинает появляться некоторая связь между порядком элемента а, порядком преобразования / и сравнением Sq(a) = 0 (mod m). Еще больше упростим ситуацию и положим m = рг, где р простое. Если а ^ 1 (modp), то уравнение х = ах 4- 1 имеет одно решение, a значит, / имеет неподвижную точку. Следовательно, для того, чтобы / было циклом наибольшей длины, необходимо, чтобы а = 1 (mod p). Применим теперь сравнение (г) предложения 30: Spr(a) = 0 (modpr), откуда /рГ = Id. Конечно, мы не доказали, что / — это цикл максимальной длины (это иногда не так при р = 2), но ниже приведен пример, для которого это так: х ь+ Иж+ 1 (mod 25) I 11 t 4- 7 <- 21 <- 20 <- 4 <- 23 <- 2 <- 16 <- 15 <- 24 <- 18 <- 22 ... теперь должно быть более понятно, что обратимые по модулю рт формы а = 1 4- кр, суммы 5рг (а) и порядок / тесно связаны между собой. Однако, несмотря на все найденные соотношения, преобразование
458 IV-3 Группа обратимых элементов в Ъ/пЪ х *-¥ Зх + 1 (mod 16) не является циклическим: г 4-)- 13-»- 8-)-9 -¥ 12 -¥ Т 5-Ю I Л 6->3->10->15->14->11->2->7 (31) Предложение. Пусть р нечетное целое число, к ^ 1 и г ^ 0. (г) х = 1 (mod р*) => Spr(x) = рГ (mod р*+г). (и) Если х = 1 4- ар* (mod p*+1), то хрГ = 1 + ар*+г (mod pfc+r+1). В частности, х = 1 + ар (modp2) => хрГ = 1 + арг+1 (modpr+2). Доказательство. (г) Рассмотрим сначала случай г = 1. Тогда х = 1 + i/р* для v E А и 5р(а?) = 1 + (1 + i/p*) + (1 + iV5)2 + • • • + (1 + iVy-1 = 1 + (1 + upk) + (1 + 2i/pfc) + • • • + (1 + (р - l)i/pfc) (mod pfc+1) =р + „р*(1 + 2 + ...+р-1)=р^^-^ (modPfc+1)- Откуда Sp(x) = p (modpfc+1), так как р нечетно. Для произвольного г доказательство ведется по индукции, ибо Spr+i{X) = Spr{X*>)Sp{X). (И) Имеем: хрг _ 1 = (х _ l)Spr(x) = (ар* + apfc+1)(pr + /3pr+k) = apr+k + a/3pr+2k + ap*+r+1(l + /?p*) = apk+r (modp*+r+1), таккакг + 2*^ t + r+1. Замечание. Результаты, полученные в этом предложении, более тонкие, чем в предыдущем, но опираются на то, что р нечетно. Следующие примеры показывают, что эти результаты неверны для четного р: 3 = 1 (mod 2), но 52(3)^2 (mod 4), р = 2, х = 3, к = 1, г = 1; (1 + 2)2 ^ 1 + 22 (mod 23), р = 2, a = 1, * = 1, г = 1.
IV-3.4.1 Несколько полезных сравнений 459 Применение Применим некоторые простые следствия предыдущего предложения к изучению структуры U (!*&). Итак, р = 3иа=—1. Тогда (-2)ЗГ"2 = (1 + apf2 = 1 - З'"1 (mod Зг) и (-2)зг_1 = 1 - Зг (mod 3r+1) = 1 (mod 3r). Следовательно, —2 является элементом порядка Зг_1 по модулю Зг. Порядок U(Zsr) равен у?(Зг) = 2 х Зг_1, а значит, —2 не может быть элементом максимального порядка. Посмотрим, что дают предыдущие равенства для 2 (хотя и без вычислений ясно, что —1 не является степенью —2): 2ЗГ_1 ее -1 (mod Зг) и 223Г"2 = (1 + 3)зг"2 ЕЕ 1 + З'"1 $ 1 (mod Зг), откуда, благодаря предложению 25, следует, что 2 — образующий группы обратимых по модулю Зг элементов. (32) Предложение. Пусть гик — два целых числа., причем к больше или равно 2. (г) Если х = 1 (mod 2*), то S2r(x) = 2Г (mod 2*+г"1). В частности, если х = 1 (mod 4), то S2r{x) = 2Г (mod 2r+1). (п) Если х = 1 + а2* (mod 2*+1), то хг = 1 + а2*+г (mod 2*+г+1). В частности, если х = 1 -f 4а (mod 8), то х2Г = 1 + а2г+2 (mod 2Г+3). Доказательство. I (г) Для г = 1 запишем х = 1 + v2k, откуда 5г(х) = 1 + (1 + v2k), что доказывает результат. Дальнейшее доказательство проводится индукцией по г. Так как S2r+i(x) = S^O^JS^OO, то S2r+i(x) = (2Г + а2*+г"1)(2 + /32к) = 2r+1 (mod 2*+г), ибо г -f 2A: - 1 ^ А: + г. («) Имеем: х2" _ ! = (х _ i)52r(x) = (а2* + а2*+1)(2г + /?2fc+r"1) = = а2г+* -f арУ*2*'1 + а2*+г+1(1 + /J2*"1) = = а2*+г (mod2*+r+1), ибо г + 2*-1£* + г+1 (для А: ^ 2).
460 IV-3 Группа обратимых элементов в Ъ/пЪ Пример Пусть имеется рекуррентная последовательность хп+1 = 13хп + 1 mod 2Г. Применяя предыдущее предложение с х = 13 = 1 (mod 4), находим, что 52r-i(13) = 2r_1 (mod 2Г), в то время как 52г(13) = 0 (mod 2Г). Это означает, что аффинное отображение х у-¥ 13 х + 1 mod 2Г в точности порядка 2Г. Это хорошо видно на следующем примере: 0-+1-+ 14 -+ 7 -+ 12 -+13 -+10 -+3-+8-+9-+6-+ 15 -+ 4 -+ 5 -+ 2 -+ 11 Вопрос в том, всегда ли верно, что отображение порядка 2Г на 2Г элементах является циклом длины 2Г? Отображение (1) (23) (456) переставляет 6 элементов, имеет порядок 6, но не является циклом! 3.4.2 Группа обратимых элементов Z/2rZ (33) Теорема. (г) Группа U(%2r) имеет порядок 2Г_1. Группа Ufai) тривиальна, группа и(%4) — циклическая порядка 2 и порождена элементом 3 = — 1. (И) Предположим, что г ^ 2. Пусть тг — отображение U(Z2r) в [/(Z4), определенное по правилу тг(х) = х mod 4. Тогда ограничение тг на { — 1,1} — изоморфизм на и(Ъ±) и имеется разложение U(%2r) = Кег тг х {—1, 1}, которое задается следующим образом: х = х х 1, если х = 1 (mod 4), х = (—х) х (—1), если х = 3 (mod 4). Кроме того, Кег тг — циклическая группа порядка 2Г~2. (iii) ПредположимуЧТо г > 2. Пусть х = 1 (mod 4). Тогда х mod 2Г является порождающим Кег тг тогда я только тогда, когда х ^ 1 (mod 8). Например^ 5 — образующий Кегтг яо модулю 2Г для всякого г > 2 (как мы это вяделя в разделе 1). Итак у при г > 2 груяяа [/(^2^) порядка 2Г_1 является прямым произведением циклической группы порядка 2Г~2, порожденной элементом 5, я циклической группы порядка 2, порожденной элементом — 1.
IV-3.4.3 Группа обратимых элементов Z/prZ при нечетном р 461 Доказательство. I (И) То, что Кегтг циклическая, следует из пункта (ш) при г > 2 и из того, что тг — изоморфизм при г = 2. (iii) Пусть х — такое целое число, что х = 1 (mod 4). Обозначим через х его класс по модулю 2Г и запишем х = 1 + 4а с a G Z. Так как х принадлежит группе Кег тг, порядок которой равен 2Г~2, то х2Г = 1 (mod 2Г). Кроме того, согласно предложению 32, х2 = 1 + а2г_1 (mod 2Г) и, следовательно, х2 ^ 1 (mod 2Г) тогда и только тогда, когда а ^ О (mod 2). Это означает, что порядок [_х равен 2Г~2 тогда и только тогда, когда х ^ 1 (mod 8). 3.4.3 Группа обратимых элементов Z/prZ при нечетном р (34) Лемма. Предложение 30 (И) позволяет определить отображение Хг,к из и(Ърг) в U(Zpr+k) по правилу Xr,k{x modpr) = xp modpr+k. Позволяя себе небольшую вольностьу будем это иногда обозначать через ХгМх) = хрк- (35) Предложение. Пусть тг — естественный гомоморфизм C/(Zpr) на C/(Zp). Обозначим через х = Xi,r-i отображение из C/(Zp) в C/(Zpr). (i) Отображение х есть сечение тг: тг о х = Id. В частности, х инъ- ективноу а тг сюрьективно. (И) Благодаря разложению х = (хрГ _1 J х хрГ , имеем U(Zpr) = Кегтг х Imx- (Hi) Кроме тогоу Кег тг — группа порядка рг~1, состоящая из таких элементов х Е C/(Zpr), что х = 1 (modp), a Imx — группа порядка р — \у образованная q-ми степенями элементов из C/(Zpr), где q = pr~l (Imx изоморфна U(ZP)). Доказательство. I (i) Пусть x G Z — pZ, т.е. х обратимо по модулю pk для любого к. Тогда , I r— 1 r— 1 тг о x{x mod p) = тг(хр modpr) = xp mod p = x mod p, так как у? = у (mod p).
462 IV-3 Группа обратимых элементов в Ъ/пЪ (И) Отображение т = х°я" является проекцией C/(Zpr), т.е. тот = т. Следовательно, имеем классическое разложение в прямое произведение ядра и образа: и{Ърг) = Кегг х Imr, по правилу : х = (хт(х)~1) х т(х). То, что разложение Кег rxlmr имеет место и что оно единственно, сразу следует из свойства тот = т. В нашем случае \ инъективно, а значит, Кегг = Кегтг, а так как тг сюрьективно, то Imr = Imx- Вычисляя х - т(х)~1 и г(х), получим выражения, записанные в условии. (ш) Кег тг состоит из элементов C/(Zpr) таких, что х = 1 (mod р), и нетрудно сосчитать количество таких элементов: рг_1. Таким образом, снова получили функцию Эйлера для рт. (36) Предложение. Пусть р — нечетное простое число, а г > 0. (г) Элемент \—р имеет порядок рГ_1 в Кег тг. Другими словами, 1 —р порождает Кег тг. («) Гомоморфизм Xr,fc группы и{Ърг) в U(Zpr+k) инъективен. Доказательство. (г) Порядок Кегтг равен рг_1 и, очевидно, 1 — р принадлежит Кегтг. Следовательно, порядок 1 — р делит рг_1. Кроме того, используя предложение 31 («), имеем: (1-р)рГ"2 Ell-p'"1 £1 (modpr). Значит, 1 — р имеет порядок рг_1. (И) Достаточно доказать, что инъективен Хг,1- Действительно, Xr,fc = Xr+fc-1,1 О • • • О Хг+1,1 О ХгД. Для этого же достаточно показать, что из хр = 1 (mod pr+1) следует х = 1 (mod рг). Пусть х таково, что хр = 1 (mod pr+1). Тогда хр = 1 (mod р), а значит, х = 1 (mod p). Согласно предложению 31 (г) имеем Sp(x) = p (modp2) и тем более Sp(x) ^ 0 (modp2). Из равенства хр — 1 = (х — l)Sp(x) и того, что по условию левая часть равенства делится на pr+1, a Sp(x) не делится на р2 по только что доказанному, заключаем, что я— 1 делится нарг. Что и требовалось доказать.
[V-3.4.3 Группа обратимых элементов Z/prZ при нечетном р 463 Замечания. Элемент 1 + кр также порождает Кегл-, если к £ О (mod р). Отображение Ъ в t/(Zp2), которое каждому числу 6 ставит в соответствие 1 — 6р, является гомоморфизмом, чье ядро — pZ, a образ — Кегл\ Это отображение индуцирует изоморфизм Ър и Кегл\ Если х € Ъ —рЪ^ то разложение t/(Z,,2), введенное в предложении 35, позволяет записать х = хр(хр~ )~1. По малой теореме Ферма хр~1 = 1 + ахр, а значит, х = хр(1 — ахр) (mod p2), откуда x = xp(l-p)a* (modp2). Это позволяет заключить, что в U(Zpi) компонента х, принадлежащая Кег 7Г, есть степень ах образующей 1 — р ядра Кег л\ Предыдущее предложение позволяет полностью определить структуру U(Zpr) для нечетного простого р. Так как р — 1 и рг_1 взаимно просты и группа C/(Zpr) — прямое произведение циклических групп порядков р — 1 и рг_1, то она изоморфна Хрг-цр_^ и циклична. (37) Теорема. Пусть р — нечетное простое число, a r — строго положительное целое число. (г) Элемент 1 — р имеет порядок рГ_1 в U(Z/prZ). (И) Группа и{Ъ/ргЩ изоморфна прямому произведению подгруппы порядкарг~1, порожденной элементом 1—р, и подгруппы порядка р—1, образованной q-ми степенями элементов U(Z/prZ), где q = рг~1. Вторая подгруппа изоморфна и{Ъ/рЖ). (Hi) Группа U(Z/prZ) — циклическая порядка рг~1(р— 1). Пример В таблице 4 дана группа обратимых по модулю 125 элементов, разложенная согласно предыдущему изложению. В первом столбце находится образ X) а в первой строке — ядро тг. Первый столбец состоит из 25-х степеней чисел по модулю 125 и изоморфен С/(^б). При этом изоморфизме элементы 57 и 68 соответствуют образующим группы U(b$). Кроме того, теперь легко определить образ любого элемента из и(Ъ\2ь) под действием \: это элемент первого столбца, который имеет тот же остаток по модулю 5.
464 IV-3 Группа обратимых элементов в Z/nZ п- 57 68 124 6 92 33 119 11 2 123 114 16 37 88 109 9,1 72 53 104 26 107 18 99 31 17 108 94 36 52 73 89 41 87 38 84 46 122 3 79 51 32 93 74 56 67 58 69 61 102 23 64 66 12 113 59 71 47 78 54 76 82 43 49 81 117 8 44 86 27 98 39 91 62 63 34 96 97 28 29 101 7 118 24 106 42 83 19 111 77 48 14 116 112 13 9 ИГ\ 22 103 4 Таблица 4. Разложение группы обратимых по модулю 125 элементов Первая строка представляет собой подгруппу U(Z\2b)> изоморфную ^25- Этот изоморфизм очень просто выражается в явном виде: он отображает элемент г из Z25 в элемент (1 + 5)г из [/(Z125), тем самым преобразуя аддитивную структуру Z25 в мультипликативную структуру подгруппы из и(Ъ\2ь), образованной элементами, сравнимыми с 1 по модулю 5. Эта подгруппа имеет 20 образующих (они выделены в таблице курсивом). Группа и(Х\2ъ) есть прямое произведение первой строки и первого столбца таблицы; ее образующие представляют собой произведения образующих элементов из подгрупп, соответствующих первому столбцу и первой строке. Все образующие группы обратимых по модулю 125 элементов выделены в таблице жирным шрифтом. Сколько же их? Не трудно проверить, что их ровно <р(<р(125)) = 40. щ Продолжим наше исследование. В случае [/(Z2O мы выяснили, что элемент 5 порождает подгруппу порядка 2Г~2 при г > 2. Займемся теперь поиском примитивных корней в U(Xpr). (38) Теорема. Пусть р — нечетное простое число. (г) Пусть х обратимо по модулю р. Следующие утверждения эквивалентны: a) х — примитивный корень по модулю рг для всякого г > 0, b) х — примитивный корень по модулю рг, c) х — примитивный корень по модулю р и xp~l ^ 1 (mod р2). (гг) Пусть х — примитивный корень по модулю р. Если х = у (mod р) и х £ у (mod р2), то один из элементов х или у является примитивным корнем по модулю р2. В частности, если х не является прими-
IV-4 Почти периодические последовательности 465 тивным корнем по модулю р2у тох + рих—р являются примитивными корнями по модулю р2. Доказательство. I Импликации а => b => с очевидны. Для доказательства с => а запишем хр~1 = 1 4- &р, где к не делится на р. Используя доказанные в предложении 31 (И) сравнения, получаем: х(р-1)рг-2 = 1 + kp1-1 (mod рг) $ 1 (mod pr), откуда следует, что порядок х равен (р— 1)рг~1. (И) Если х = у (mod p), то сформулированное в предложении 30 (И) соотношение приводит к хр = \р (modp2). Остается лишь доказать, что хр~х ^ г/Р-1 (modp2), что равносильно (ху-1)*7-1 ^ 1 (mod р2). Если это не верно, то сравнение ху'1 = 1 (mod p2) дава- |_ло бы (xy~l)p ^ 1 (mod p2), что невозможно. (39) Следствие. Пусть х — образующий группы U(Z/prZ)y обратимый в Ъ/рЪ> где р — нечетное простое число, г ^ 1. Тогда остальные примитивные корни по модулю рт являются степенями х, взаимно простыми с<р(рг) = р(р — 1); их число равно <р{<р{рг)), т.е. рг~2(р — 1)<р{р — 1). 4 Почти периодические последовательности Во многих областях математики бывает необходимо использовать так называемые псевдослучайные последовательности чисел: в численных методах это методы Монте-Карло, в статистике это генерирование образцов для различных тестов, в некоторых алгоритмах требуется выбрать «наугад» один элемент из какого-то множества — в этой главе приведены конкретные примеры — и такой случайный выбор может значительно улучшить сложность алгоритма по отношению к выбору детерминированному... Возникает множество вопросов относительно так называемых генераторов случайных чисел: насколько случайны появляющиеся числа? Что вообще такое последовательность случайных чисел? Это довольно сложные вопросы. Кнут [99] во введении к третьей главе «Случайные числа» своей книги, в качестве упражнения задает несколько вопросов, которые пока- 30 1017
466 IV-4 Почти периодические последовательности зывают, насколько наш выбор не случаен. Как, например, наугад выбрать цифру от 0 до 9? Использовать телефонный справочник? Нет! Цифры, которые там используются, неодинаково распределены. Попросить кого-нибудь загадать цифру? Нет! В основном люди загадывают вполне конкретные числа... Один из методов, используемых для образования чисел случайным образом, состоит в применении последовательности, задаваемой сравнениями £n+i = ахп + 6 mod m. Конечно, эти последовательности на некотором шаге становятся периодическими и нужно выбирать их так, чтобы период был максимален. Известно, что десятичная запись рационального числа почти периодическая. Если открыть книгу, в которой изучаются непрерывные дроби, то вскоре обнаружится, что запись непрерывной дроби действительного числа почти периодическая тогда и только тогда, когда это число является квадратичным целым. Периодические явления встречаются повсюду. В частности, всякий рекуррентный процесс, происходящий в конечном множестве, — почти периодический (согласно принципу вложенных отрезков). В конце этого раздела мы увидим, что в некоторых случаях имеются эффективные алгоритмы для определения периодов таких последовательностей, а в конце главы нами будет рассмотрен алгоритм факторизации, основанный на почти периодическом явлении (р-метод Полларда). 4.1 Одношаговый генератор Случайные последовательности1 легко получить при итерациях функций с одной или несколькими переменными (что влияет на длину получаемых последовательностей), выбранной таким образом, что периодичность последовательностей неочевидна. (40) Определение. Последовательность (хп)п^о (элементов какого-либо множества) называется периодической у если существует такое к ^ 1, что xn+k — хп для всех n G N. Множество чисел ку удовлетворяющих этому определе- ниюу представляет собой подмножество из N*, замкнутое относительно сложения и вычитанияу и равное AN*, где А — наименьший элемент 1Ыы не будем доказывать никаких свойств этих последовательностей, касающихся их случайного или детерминированного характера. Это выходит за рамки данного учебника, требует серьезных статистических исследований и формального определения того, что означает «наугад»!
IV-4.1 Одношаговый генератор 467 этого множества (как относительно отношения порядка ^, так и по делимости). Подпоследовательность яо,яь...,ял-1 называется периодом последовательности (хп)п^(ь а число А — длиной периода. Пример Последовательность десятичной записи числа 1/7 периодическая с периодом длины 6, так как 1/7 = 0,142857142857.... Последовательность £n+i = 4xn mod 21, хо = 5 имеет период длины 3. Этот период (5,20,17). (41) Определение. Последовательность (хп)п^о называется почти периодической или периодической некоторого ранга, если существует такое m ^ 0, что последовательность (xn)n^m периодическая. Обозначим через /1 наименьшее из целых чисел т, удовлетворяющих этому свойству. /i называется индексом вхождения в период. Назовем периодом последовательности (хп)п^о период последовательности (хп)п^ц. Отметим, что множество {к е N | Зт, х„+* = xn, Vn ^ т}, как и в предыдущем определении^ есть множество кратных длине периода. Примеры Последовательность x„+i = 2xn + 1 mod 48, хо = 0, является периодической ранга 4 и имеет период длины 2: I—Т 0-+1-+3-+7-+15-+31 Для числа тщ = 0,14 142857142857... последовательность десятичной записи почти периодическая, а последовательность десятичной записи V5 = 1,4142135623 73095 0488016887 24209 69807 85697 ... не является почти периодической. щ В данном разделе генератором множества F называется алгоритм, который выдает последовательность (хп)п^о элементов F. Например, xn+i = 3 141 592 621xn + 2 718 281829 (mod 1010), хп = (хп_24 + Яп-5б) (mod264), *n+i = (4а£ + 5*„ + 1) (mod232). 30*
468 IV-4 Почти периодические последовательности В дальнейшем будем считать, что F конечно, и рассматривать только одношаговые генераторы, т.е. имеющие вид x„+i = f(xn), где / — отображение F в себя. (42) Предложение. Пусть (F, /, хо) — генератор (множество F конечно). Тогда последовательность (хп)п^о, определяемая по правилу xn+\ = f(xn), почти периодическая. Если /i — индекс вхождения в период, а А — длина периода, то для различных индексов i и j Xi = Xj <<=> ij^fi и i = j (mod A). В частности, все х, при О ^ i < /i + А попарно различны и, следовательно, /1 + А ^ |F| (откуда А <С |F| я /i <С |F| - 1). Доказательство. Поскольку F конечно, существуют h < k такие, что хь = Хк (принцип ящиков). Применяя /г, получим £л+г = Х£+г, а значит, к — h — период подпоследовательности (х,),^. Предположим, что я,- = Xj для j > i. Последовательность (x/)/^i периодична, а потому г ^ /i и, следовательно, j — г = 0 (mod А). Обратное очевидно, так же как и конец предложения. Рис. 1. Схема одношагового генератора Почти периодическая последовательность, получаемая при одноша- говом генерировании, схематически может быть представлена фигурой р (рис. 1): все элементы на р различны, хвост — это множество членов
IV-4.1 Одношаговый генератор 469 последовательности, которые не входят в период, а завиток представляет собой период. Число /i является длиной хвоста, а А — длиной завитка. Пример: представление рационального числа в виде десятичной дроби Пусть и и v — два целых числа с v > 0 и qo + (0 • q\q2 .. .)io — Десятичная запись числа u/v с qo E N. Можно определить последовательность (г,-)^о по правилу: го = tx, r,+i = 10 г,- mod v. Тогда g,-+i = L^lf1] (и go = LW/VJ)- Последовательность г,- порождается функцией / : [0, v[—>• [0,v[, которая каждому х ставит в соответствие 10 х mod v. Такая последовательность почти периодическая, а потому почти периодической является и последовательность qi десятичных цифр в записи u/v. Замечания. Отметим, что индекс вхождения в период и длина периода зависят от первого члена xq. Например, для последовательности агп+1 = 2а; п + 1 (mod 48) имеем: i т (i) при х0 = 0: 0 -+ 1 -+ 3 -► 7 -► 15 -+ 31, а значит, ц = 4, А = 2, (и) при аг0 = 11: 11 -> 13 -> 47—У и уже /j = 2, Л = 1. Хотя одношаговый генератор не может порождать последовательности, период которых больше порядка F, очевидно, существуют почти периодические последовательности произвольно большого периода. Например, для F = {0,1} последовательность (#п)п>о такая, что хп = 0 при п ^ 0 (mod А) и хп = 1 при п = 0 (mod А) имеет период длины А. Так для А = 5 получаем 0000100001.... Предыдущий пример тривиален, а потому приведем еще один пример: 1Ч1-*0-*1-*0-+1-Ю-+0-Ю-+0-+0-*1-+0-+0-+1 t ' I 1 0 t ! 0<-1<-1<-0<-0<-0<-1<-1<-1<-1<-1<-0<-0<-1<-1 В данном случае используется множество {0,1} и если присмотреться повнимательнее, то видно, что все 5-ти битовые цепи возникают в данной диаграмме ровно по одному разу. Этот цикл длины 32, а значит, генерируется за 5 шагов. Этому циклу отвечает многочлен степени 5, неприводимый над Z2, P = Х5 + Х2 + 1.
470 IV-4 Почти периодические последовательности (43) Определение. Одношаговый генератор (F, /, xq) называется генератором максимального периода, если длина его периода равна \F\. (44) Предложение. Для одношагового генератора (F, /) эквивалентны следующие условия: a) (F, /, хо) максимального периода для х0 Е F. b) Отображение f — циклическая перестановка F. c) (F, /, х) максимального периода для всех х € F. d) Для любых х,у G F существует г G N такое, что fr(x) = у. Из двух генераторов (F,/, х0) и {G,g,yo) можно получить третий, рассматривая их декартово произведение (F x G, / х д, (хо>2/о))« (45) Предложение. Декартово произведение двух генераторов имеет период длины, равной НОК длин периодов компонент, а индекс вхождения, равный наибольшему из индексов компонент. Доказательство. I Для последовательности (tzn)n^o обозначим: Iu = {s e N | З&о, uk+s = uk, VA: ^ А:0}. Тогда для последовательностей (xn)n^o, (l/n)n^o, (<*п)п^о, порождаемых соответственно функциями f,gnfxg, имеем 1Х П 1у = Iz, откуда легко получить утверждение, касающееся длины периода. Последовательность {zi)i^q периодична тогда и только тогда, когда такими же являются последовательности (ж,-),-^д и {у%)%^я, что досказывает утверждение относительно индекса вхождения в период. 4.2 Генерирование при помощи линейных сравнений В данном пункте рассматриваются генераторы вида xn+i = axn 4- Ь mod m; назовем их линейными генераторами сравнений. Такие генераторы характеризуются модулем т, аффинным преобразованием х —У ах + 6 кольца Ът (назовем а мультипликатором, а 6 приращением) и, наконец, первым членом xq E Ът.
IV-4.2 Генерирование при помощи линейных сравнений 471 Несколько примеров 1. £n+i = 4хп + 1 mod 9, хо = 0 дает I Т 0-+1-+5-+3-+4-+8-+6-+7-+2 2. xn+i = 2хп + 1 mod 48, х0 = О дает 0-*1-*3->7->15->31 * т 3. x„+i = Зх„ + 1 mod 20, х0 = 0 дает 0 -* 1 -* 4 -* 13 I t 4. xn+i = 2xn + 1 mod 5 при хо = 0 дает цикл 0—¥ I —>• 3 —f 2 , а при xo = 4 цикл длины 1: (4). ■ Дадим теперь необходимые и достаточные условия того, что генератор сравнений имеет максимальный период. Более детальное изучение читатель найдет в упражнениях 37-40. (46) Предложение (китайская теорема об остатках). Пусть m = mi Ш2, где т\ ит^ — два взаимно простых числа. Любой генератор сравнений по модулю т: (G) { Zn+1 = (aZn + ^ то^ m \ zo = с mod m есть декартово произведение генераторов по модулям mi ит^: (G ) { Xn+1 = (aXn + ^ тос* Шь (G ) < 2/n+1 = ^a2/n + ^ тос* Ш2' * | хо = с mod mi. \ уо = с mod 7712. В частности, длина периода (G) равна НО К длин периодов (G\) и (G2), а индекс вхождения в период (G) равен наибольшему из индексов вхождения (G\) и (Сг). Доказательство. Рассмотрим преобразования /i, /2 и /з, определенные по правилам /i(x) = ax + 6 mod mi, /2(2/) = си/+ 6 mod 7712, /(г) = az + 6 mod m. Тогда коммутативна диаграмма 1 ^mi * ^m2 /) /1X/2 2m 1 ^rr»i * ^m2 в которой вертикальные отображения — это китайский изоморфизм Jm —> (ImiJm2) и, следовательно, / и /1 x /г связаны между |__собой.
472 IV-4 Почти периодические последовательности После этого общего представления генераторов сравнений, займемся теми, которые имеют максимальный период. Предположим, что генератор хп+\ = f(xn) = ахп + 6 mod m имеет максимальный период (т.е. период длины т). Тогда для всякого делителя р ^ 2 числа т генератор х »-> ах + 6 mod p также имеет период длины р. Действительно, если / — цикл на множестве Л, а 7Г — сюръ- екция А на множество В, то преобразование g множества В такое, что по/ = дотг, также является циклом. Поэтому, если последовательность имеет максимальную длину, то уравнение х = ах+ 6 mod p не имеет решений для любого делителя р числа т. В частности, если р — простое, то: а — 1 = 0 (mod p) и 6^0 (mod p). Кроме того, если 4 делит т, то а = 1 (mod 4). Действительно, а = 1 (mod 2) и условие а = —1 (mod 4) невозможно, так как тогда хп+1 = — хп + 6 mod 4 и хп+2 = хп mod 4. Эти условия являются и достаточными, как это следует из следующей теоремы. (47) Теорема. Генератор сравнений хп+\ — ахп + 6 mod m имеет максимальный период (длины т) тогда и только тогда, когда выполняются следующие три условия: a) 6 обратимо по модулю т, b) a = 1 (mod p) для любого простого р, делящего т, c) если 4 делит т, то a = 1 (mod 4). (48) Лемма. Пусть f(x) = ax + b рассматривается как отображение Ът в себя. Тогда q-я степень f это аффинное преобразование х —¥ aqx + bSq(a), Sq(X) — многочлен из раздела 3.4.1. В частности, если Ь обратимо по модулю тп, то: /"(0) = 0 «=> 5,(0) = 0 «=> /* = IdZm. Чтобы доказать эту лемму, достаточно заметить, что bSq(a) = О эквивалентно Sq(a) = 0, так как 6 обратимо по модулю т, и что Sq(a) = 0 влечет а* = 1, ибо aq - 1 = (а - l)Sq(a). (49) Лемма. Пусть р — простое, г ^ 1 (с г = 1 яря р = 2^, а = 1 (mod р) и Ь ^ О (mod p). Тогда х »-> f(x) = ax + 6 — цякляческая перестановка Ъ?г, а зяачят, генератор максимального периода.
IV-4.3 Нахождение периода методом Брента 473 Доказательство. I Отображение / это перестановка Zpr, так как а обратимо по модулю рг. Кроме того, лемма тривиальна, если р = 2 (так как г = 1). Предположим, что р ф 2, и рассмотрим ограничение / на орбиту О, равную {/9(0), q E N}. Достаточно доказать, что наименьшее q такое, что /9(0) = 0, равно рг. Так как а = 1 (mod p), то Spr(a) = О (mod рг) согласно предложению 30. С другой стороны, для / < г, согласно предложению 31, имеем Spi(a) = pl (mod pl+1) и, следова- I тельно, Spi(a) ^ 0 (mod pr). Теперь осталось применить лемму 48. (50) Лемма. Пусть г ^ 2, а а = 1 (mod 4) я 6 ^ 0 (mod 2). Тогда х »-> /(х) = = ах + 6 — циклическая перестановка ^2^, а значит, генератор максимального периода. Доказательство. I Доказательство аналогично доказательству предыдущей леммы и использует главным образом то, что а = 1 (mod 22). Согласно предложению 32 имеем SVfa) = 0 (mod 2Г), а кроме того, при / < г, 52«(а) = 2l (mod 2/+1), по предложению 32, откуда 52<(а) ^ О |_(mod 2Г). Затем применим лемму 48. Теперь можно доказать теорему 47. Необходимость доказана перед формулировкой теоремы, а достаточность следует из китайской теоремы об остатках и двух предыдущих лемм. Пример Пусть m = 106 — 1 = З3 х 7 х 11 х 13 х 37. Чтобы получить генератор xn+i = axn+b mod m максимального периода, нужно выбрать (согласно теореме 47): а = 1 (mod 3 х 7 х 11 х 13 х 37) и 6^0 (mod p) для ре {3,7,11,13,37}. Это дает 9 решений для а вида 1 4- 111111 х&с0^&^8. 4,3 Нахождение периода методом Брента Пусть F — конечное множество, xq Е F и / : F —¥ F отображение, которому соответствует последовательность xn+i = /(^n), начинающаяся с хо. Цель алгоритма Брента — сосчитать длину периода последовательности (xn)n^(h используя при этом как можно меньше памяти
474 IV-4 Почти периодические последовательности (достаточно 3 переменных!). Сложность алгоритма имеет порядок квадратного корня из F. Принцип метода Метод Брента состоит в проверке равенства х^ = хь для пар индексов (ft, &), принимающих следующие значения: 2' -1 2\..2,+1 -1 2,3 4,5,6,7 8,9,...,15 j <— 1; х <— хо] $»~X*mh loop х' <— х\ Зг. —'фШЁясь. $%#?**» &.V&fci for A in 1 .. j loop J^t^X*s'fc' x <— f(x); '-йтщ^+х if x = x' then return А; ДОЮ'ЭДЯИДО end if; end loop; Щш щ$„\ j «— 2j; end loop; Отметим, что для Л = 2* — 1 интервал соответствующих значений к равен [Л+1,2Л+1]. Для того, чтобы теперь х^ = х^, необходимо и достаточно, чтобы ft ^ /i (индекс вхождения в период) и к — h было кратно А (длина периода) — условия, которые выполняются при достаточно большом ft (так как интервал для к удваивается на каждом этапе). Пусть ft — какой-либо индекс, для которого существует А: е [h + 1,2ft + 1] с xh = xk. Если к — первый индекс интервала [ft 4-1,2ft + 1], для которого х^ = Хк> то к — ft равно длине периода А. На- Алгоритм 4. Вычисление конец, если /1 — наименьший ин- периода по методу Брента деке, такой, что х^ = Хц+\} то /i — индекс вхождения в период. Это приводит к алгоритму, представленному слева. В этом алгоритме переменная j принимает значения ft + 1, т.е. степени 2. Хотя алгоритм 4 находит только длину периода, дальнейшее применение метода Брента позволяет определить все 4 параметра (ft, &, A,/i), описанных выше (причем к — ft = А): сложность измеряется при помощи параметра к, который равен числу итераций х <— f(x) и обозначается kjtXo. Пример Применяя метод Брента к десятичной записи числа ^, получаем: -J- = 0.020408163265306122448979591836734693877551020408163 ... 49 Длина периода равна 42 и в этом нет ничего удивительного, так как при получении цифр десятичной записи используется функция
IV-4.3 Нахождение периода методом Брента 475 i^IOi mod 72 и длина периода равна порядку элемента 10 в мультипликативной группе [/(Z72). Но 10 — порождающий элемент группы U^L-j) и 107-1 ^ 1 (mod 72), а значит, 10 — порождающий элемент группы [/(Z72) и его порядок у?(72) = 42. Сложность метода Брента Рассмотрим теперь следующую проблему: если / — функция, действующая из F в F, и начальный член хо Е F «выбраны наугад», то каков порядок величин А (длина периода), /i (индекс вхождения в период) и индекса к = &/,*<,, полученного после применения алгоритма Брента? Основной результат данного раздела состоит в том, что эти величины имеют порядок у/т, где т — число элементов в F. Основные идеи доказательства заимствованы из книги Кнута «The Art Of Computer Programming», упражнения к разделам 3.1 и 4.5.4. Читатель может также обратиться к [104], [155] и [67]. Заметим сначала, что если /i — индекс вхождения, то выполняется равенство (в котором сложное выражение 2^°^п^ — это наименьшая степень 2, большая или равная п): kftXo = 2^l^mBX^1^ + A-1. Действительно, h = kj)Xo — \ — это наименьшее целое число, такое, что: h + 1 степень 2 и h ^ /i, (2/i + 1) — h ^ A. Значит Л, удовлетворяющее этим условиям, равно 2Г1о82тах(/*+1>Л)1 — \} откуда и следует равенство для kf)Xo. Заметим, что kftXo зависит только от А и /1, а потому обозначим его через &^,а- Зафиксируем конечное множество F мощности т и рассмотрим вероятностное пространство, состоящее из всевозможных пар (/, хо), где / : F -+ F — некоторая функция, а хо Е F. (51) Лемма. Пусть F — конечное множество мощности m и A, /i удовлетворяют неравенствам l^A^m, 0^/j<mn/i-f A^m. Вероятность того, что последовательность xn+\ = f(xn) (f — функция из F в F, xo E F) имеет период длины А я индекс вхождения /i, равна Функция Р(ц} А) зависит только от /i + А (я т, очевядяо).
476 IV-4 Почти периодические последовательности Доказательство. Имеется mm+1 возможностей выбора функции / из F в F (число которых тт) и первого члена хо. Благоприятным исходом, которому соответствует пара (/, хо), является последовательность из /1 + А различных элементов Е = (хо, х\,..., x^+a-i) (на которой / зацикливается) и произвольная функция из F — Е в F (сужение / на F — Е). Число благоприятных исходов равно т х (т - 1) х • • • х (т - (/а + А - 1)) х тт~^+х1 Значит, отношение числа благоприятных исходов к общему числу возможностей равно: т х (т - 1) х • • • х (т - (/i + А - 1)) _ = — х (1 ) х • • • х (1 - ). mm m (52) Обозначение. Определим функцию Q : N* —¥ М+ следующим образом л/ ч , т—1 т—1т —2 т—1т —2 1 Q(m) = l + + + •••+ т mm m m m = £ П (»-=)- Е т! (т — a)\ mq Она связана с P(fi, А) равенством J2o<n<m ^(а4» *) = Q(m)/m- (53) Предложение. Кнутом в книге The Art Of Computer Programming, раздел 1.2.11.3, была получена асимптотическая формула для функции Q: Л/ ч /тгп 1 1 /~тГ 4 1 / тг Л/ 9ч QH = ^Т " 3 + 12 V 2^ " 135^ + 288 V 2^ + 0(" >" Функция Q используется при изучении сложности алгоритма Брен- та. (54) Лемма. Если индексы А я /i связаны соотношениями l^A^ m, 0 ^/i<m
IV-4.3 Нахождение периода методом Брента 477 и /1 + А ^ т, то выполняются равенства: £>•*>-= Е til ('-£> = '• 5> + А)Р(,«,А) = 1 ^ 92 П (1"^) = QH. /*,А l^g<m l^k<q /i,A l^g<m l^fc<g Эти равенства представляют собой математические ожидания соответственно J, /1 4- А, А я /1. Доказательство. Заметим, что 5>(/|,л)р(М)= £ £ *(М)Р(М) = /*,А l^g<m/j+A=g ~k Е Е*-^ПО-;], что позволяет перейти от выражений с (/i, А) к выражениям с д. Функция P(/i, А) была определена как вероятность и, следовательно, J2 Л P(/i, A) = 1 (первая формула леммы). Для бесконечной последовательности а = (ao,ai,a2,...) определим /И: /(а) = /(оо)а1,о2)...) = Еап И (1_^) = = а0 + ai (1 ) + а2 (1 ) (1 ) + •••, m m m сумма, в которой лишь конечное число слагаемых не равно нулю, так как внутреннее произведение равно нулю при n ^ m. Вычислим /(I2,22,32,...). Используя то, что при n ^ 1
478 IV-4 Почти периодические последовательности «.(!_!)...(l_JL) = en(i_I)...(i_!Lzi)_ т' т т\ т ' -^(i-V-(i-^). mm m получаем равенство: /(а) = /(а0, ах, а2,...) = а0 + /(ai, а2, а3,...) /(ai, 2а2, За3,.. .). т Для удобства обозначим Да = (а\ — ао,а2 — а\,аз — а2,...) и а' = (ai, 2a2, Заз,...) и из предыдущего равенства получим: ^ = /(Да)+а0. m Применяя это равенство к постоянной последовательности 1, получим /(1,2,3,...) = т, что доказывает первую формулу леммы. А если применить это равенство к последовательности a = (0,1,2,3,...), получим: /(12,22,32,...) М; = т что дает вторую формулу. Две последние формулы являются следствиями первых. (55) Предложение. Математическое ожидание E(kfi)\) индекса Брента оценивается следующим образом: 1,5 Q{m) - 0,5 ^ Я(^,аК1, 625 Q{m) - О,5. Доказательство. Вместо обычных индексов запишем E(kfi)\) = 5^„ д кц}\Р(ц, А) = = Si+S2,rfle 5Х = 5^ 2Г1овятм<"+1'Л)1 P(/i, A), 52 = J>- l)P(/i,A). /j,A /j,A Согласно предыдущему результату сумма 52 равна {Q{m) — l)/2. Осталось лишь вычислить сумму S\, которую перепишем так:
IV-5 Квадратичные вычеты 479 где f(q) = ]£ 2riog2max(g+1-A'A)1. Найдем ограничения для f(q). Значения и = ma,x(q + 1 — А, А) для 1 ^ А ^ q следующие: и значение L?/2J + 1 появляется два раза при четном q и один раз при нечетном. Теперь, чтобы определить /(<?), нужно определить 2П0вам1 дЛя приведенных выше значений и. Пусть 2q' — первая степень 2, большая или равная q. Тогда q' < q ^ 2qf, и, в частности, q/2 ^ q'. Для значений и, удовлетворяющих условию q' + 1 ^ tx ^ д (число которых 2(д — я')), наименьшая степень 2, большая или равная tx, есть 2д', а для остальных значений и (число которых 2q' — q) она равна q'. Отсюда f(q) = 29'(2(9 - q')) + Я'(2д' - q) = 3qq' - 2q'2 = 92(3x - 2x2), где x = —. Так как 1/2 ^ x < 1, а экстремумы функции Зх — x2 на интервале [1/2,1] равны 1, 9/8, 1 и достигаются в точках 1/2, 3/4, 1, то <72 ^ 1{я) ^ §<72- Перенося эти оценки в формулы для Si и используя результаты предыдущей леммы, получим Q(m) ^ S\ ^ |Q(m), откуда и следует искомое утверждение. 5 Квадратичные вычеты Термин «квадратичный вычет» несколько устарел. Он вводится очень простым определением: это квадрат в мультипликативной группе обратимых по модулю р элементов или, более общо, в конечном поле. Несмотря на всю простоту, изучение квадратов довольно быстро приводит к эффективным результатам типа формулы Эйлера или результату, известному как закон квадратичной взаимности Лежандра — Гаусса, труднейшей задаче, в которой изучается распределение квадратов и
480 IV-5 Квадратичные вычеты не-квадратов на интервале [1,р — 1] (таблицы квадратов по модулям малых простых чисел выглядят довольно любопытно). Понятие квадратного вычета имеет достаточно приложений в арифметике и мы увидим некоторые из них. Например, запись простого числа в виде суммы двух квадратов тесно связана с тем, является ли —1 квадратичным вычетом по модулю этого простого числа. Это только один пример среди многих. Мы начнем с классического изучения квадратичных вычетов. Благодаря критерию Эйлера, можно довольно быстро узнать, является ли элемент квадратом по модулю р. Закон взаимности позволяет ответить на вопрос: число 3, или 5, или 7... является квадратом по модулю р? Наконец, в последнем разделе мы рассмотрим алгоритмы вычисления квадратных корней в С/(2£р). Важно отметить, что большая часть алгоритмов вероятностная. В некоторых, например, необходимо знать какой-нибудь не-квадрат по модулю р. Тогда это вопрос случайности: или распределение не-квадратов с вероятностью 1/2 будет случайным распределением или же некий не-квадрат в интервале [2,р— 1] появится очень быстро. К счастью, все это можно проверить на практике. 5.1 Общие свойства (56) Определение. Назовем элемент а Е Ъ квадратичным вычетом по модулю п (n G N*J, если а является квадратом в Zn, т.е. если существует такой х G Z, что х2 = a (mod n). Примеры Число —1 — квадрат по модулю 10, ибо З2 = — 1 (mod 10). Оно также является квадратом по модулю 13, так как 52 = — 1 (mod 13). С другой стороны, оно не является квадратом по модулю 7, так как можно найти все квадраты по модулю 7: {О2 = 0, (±1)2 = 1, (±2)2 = 4, (±3)2 = 2} и — 1 в этом списке не присутствует. Приведем список квадратичных вычетов и невычетов по модулю простого числа 43: квадраты: 1, 4, 9, 16, 25, 36, 6, 21, 38, 14, 35, 15, 40, 24, 10, 41, 31, 23, 17, 13, 11 не-квадраты: 42, 39, 34, 27, 18, 7, 37, 22, 5, 29, 8, 28, 3, 19, 33, 2, 12, 20, 26, 30, 32.
IV-5.1 Общие свойства 481 Можно заметить, что число квадратов равно числу не-квадратов и это свойство является общим для конечных полей. Заметим также, что если х — квадрат, то — х является не-квадратом и, как мы увидим в дальнейшем, это произошло потому, что 43 = 3 (mod 4). (57) Предложение. Пусть р — нечетное простое число. Множество С квадратов в U (Ър) — подгруппа U (Zp) порядка ^-. Это свойство сохраняется для всех конечных полей К характеристики, отличной от 2: множество квадратов — это подгруппа порядка 2~~ (понятно, что условие, наложенное на характеристику, означает, что \К\ нечетно). Доказательство. Отображение и{Ър) Э х у-¥ х2 Е U(Z,P) есть, очевидно, гомоморфизм с образом С. Его ядро — {—1,1} (так как в полях х2 = 1 => х = ±1). Следовательно, С изоморфно U(Zp)/{ — 1,1} и имеет иско- [_мый порядок. (58) Определение (символ Лежандра). Отождествляя факторгруппу C/(Zp)/C (состоящую из 2 элементов) с группой {—1,1}, для элемента х Е Z — рЪ обозначим через (|) образ х в {—1,1}. Тогда по определению: I —) = I —) ( - ) я 1-1=1 <<=> х — квадрат по модулю р. Можно также рассматривать отображение a *-> (^) как гомоморфизм U(Zp)b{-1,1}. (59) Предложение (критерий Эйлера). Если р — нечетное простое число, то для a E U(ZP): (^) = a 2". Доказательство. Отображение ф : U(ZP) Э a —> а^~ — гомоморфизм со значениями в множестве {—1,1}, так как если b = а з , то б2 = ар~1 = 1, а значит 6 = ±1. С другой стороны, подгруппа С квадратов из U(ZP) содержится в ядре ф. Это ядро совпадает с множеством корней многочлена Х^~ — 1, число которых не превосходит 2^-, а порядок С в точности равен ^—. Включение С С Кег ф, следовательно, доказывает, что Л 1017
482 IV-5 Квадратичные вычеты С = {ае U{ZP) | а^ = 1}, U{ZP) - С = {a G U{ZP) \ а^ = -1, } и отсюда получаем необходимый результат. (60) Следствие. Число — 1 является квадратичным вычетом тогда и только тогда, когда р = 1 (mod 4). Рассмотрим известный результат, связывающий два свойства: «р — квадрат по модулю q» и «q — квадрат по модулю р». (61) Теорема (закон квадратичной взаимности Лежандра — Гаусса). Пусть р и q — два различных нечетных простых числа. Тогда G)G)=<-4^. Среди различных доказательств закона взаимности есть такие, которые используют конечные поля. Вот одно из них. Рассмотрим надполе Пр поля Zp, содержащее о>, — корень степени q из единицы (можно, конечно, рассмотреть алгебраически замкнутое надполе 2£р, но достаточно и любого другого надполя, в котором многочлен Xя — 1 имеет корень, отличный от 1, например, надполе ZP[X]/(P), где Р — неприводимый множитель многочлена Xя — 1). Рассмотрим сумму Гаусса: Отметим что так как ия — 1, то отображение ¥q Э х —> их Е 0,р определено и удовлетворяет равенству ых+у = ихиу. Например, для q = 7 имеем: т = и + и2 + о>4 — о>3 — о>5 — и6. В поле Пр элемент т — квадратный корень из ±q, как это показывает следующая лемма. (62) Лемма. В предыдущих обозначениях г2 = (=^)q- Доказательство. Имеем:
IV-5.1 Общие свойства 483 Проведем замену переменных у = xz и, используя то, что (^) = (f)2(|) = (|). получим: т2 = ?©?"'<1+-)- Так как £*€*У = 1 + <" + ^ + '' -Ч-^"1 = 0, то Et€z;w* = ~L Если z ф — 1, то отображение х —¥ х(1 + г) — перестановка из Z* и, следовательно, ^х^х^2^ = — 1, а потому: г2 -£©♦(?)-«■ Используя то, что число квадратов в Z* равно числу не-квадратов, получаем £z€Z* (|) = 0, откуда г2 -(7Ит>->-(т> Доказательство квадратичного закона взаимности Сумма Гаусса т Е Qp — это квадратный корень из (~L)^. Отсюда следует, что (—)q есть квадрат в Zp тогда и только тогда, когда г принадлежит Жр. Напомним в связи с этим, что элемент 9 Е Пр принадлежит Zp тогда и только тогда, когда 9Р =9: действительно, многочлен Хр — X имеет в Qp не более р корней и все элементы Zp являются корнями этого многочлена. Вычисление тр упрощается, потому что мы работаем в характеристике р: "- ■• л=а Отсюда получаем, что (-£)q — квадрат в Ъ? тогда и только тогда, когда р — квадрат по модулю q. Следовательно, (И^М^МтГеН-^), что и требовалось доказать. 31*
484 IV-5 Квадратичные вычеты Существует дополнение к закону взаимности, указывающее, когда число 2 является квадратом по модулю простого нечетного числа. (63) Теорема (дополнение к квадратичному закону взаимности). Пусть р — нечетное простое число. 2 является квадратом по модулю р тогда и только тогда, когда р = ±1 (mod 8). Это можно записать в виде: ©■<-^ Доказательство. I Легко убедиться в том, что для нечетного х число х2 — 1 делится на 8 и *-j^ четно тогда и только тогда, когда х = ±1 (mod 8). По аналогии с доказательством закона взаимности найдем квадратный корень из 2 в расширении поля Zp. В поле комплексных чисел равенство е т* позволяет записать л/2 = z + I, где z = e~^\ кроме того, используя равенство X4 4- 1 = {X2 4- уДХ 4- 1){Х2 - у/2Х 4- 1), получаем, что z — примитивный корень из 1 степени 8 (что эквивалентно z4 = — 1). Это отчасти объясняет, почему следует рассмотреть подполе Qp поля Zp, имеющее корень а 8-й степени из единицы (достаточно взять поле, в котором многочлен X4 4-1 имеет корень а). Тогда: а2 = -сГ2 => (а 4- а"1)2 = 2. Значит, 2 является квадратом по модулю р тогда и только тогда, когда элемент и = a 4- ot~l принадлежит Zp, т.е. когда о>р = ш. Так как мы работаем в поле характеристики р, то ир = о? 4- <*~р — выражение, в котором показатели можно привести по модулю 8 (так как а8 = 1). Получаем: а1 +<х~1 =ш, а3 4-а"3 = -w, а54-а"5 = -а>, а74-а"7 = а>, и следовательно, 2 является квадратом по модулю р тогда и только |_тогда, когда р сравнимо с 1 или 7 по модулю 8. Пример: является ли 323 квадратом по модулю 479? Это пример применения закона квадратичной взаимности. Введенный в упражнениях 31, 32, символ Якоби позволяет проводить те же самые вычисления, не разлагая используемые числа в произведение множителей. Число 479 — простое, в то время как 323 = 17 х 19, а потому
IV-5.2 Квадратные корни: метод Цассенхауза — Кантора 485 (HI) = (^У (^т§). Первый символ Лежандра вычисляем, используя то, что 479 = 3 (mod 17): Аналогично, используя сравнение 479 = 4 (mod 19), получаем: откуда (HI) = 1 и значит, число 323 является квадратом по модулю 479. Вопрос теперь состоит в том, как эффективно вычислить квадратный корень из 323 в Z479? 5.2 Квадратные корни: метод Цассенхауза — Кантора Зафиксируем конечное поле К (например, К = Ъ? для простого р) и поставим себе цель: вычислить квадратный корень из элемента и Е К*. Конечно, необходимо, чтобы и был квадратом, — условие, которое всегда можно реализовать в поле К характеристики 2 (почему? как в этом случае эффективно получить квадратные корни?). Предположим поэтому, что в дальнейшем К обозначает поле характеристики, отличной от 2. В этом случае элемент и является квадратом тогда и только \K\-1 тогда, когда и з =1. Результат сохраняется также во всякой циклической группе G четного порядка: элемент и Е G — квадрат тогда и 1Ш л , только тогда, когда и * = 1 (записать и в виде степени порождающего элемента). Простой случай: \К\ = 3 (mod 4) Соотношение и з" = 1 можно записать как и з = и или как (и 4 J = и. Таким образом, найден квадратный корень из tx, а имен- но и * , который может быть быстро вычислен при помощи метода экспоненциальной дихотомии. ■ Мы изучим два метода извлечения корней. Первый фигурирует как упражнение в книге Кнута [99] (раздел 4.6.2) и опирается на метод разложения многочленов в конечных полях, принадлежащий Цассенхаузу и Кантору. Второй, изложенный в следующем разделе, принадлежит Шенксу.
486 IV-5 Квадратичные вычеты Принцип метода Цассенхауза — Кантора состоит в сопоставлении квадрату и Е К* кольца А = К[Х]/(Х2 — и). В этом кольце тождество z 1^1 = z может быть записано как п , I*!-1 1Ч , \k\-i О = z х (z з _ 1) х (z з 4-1), а потому (прочтите в конце раздела отступление о факторизациях) взятое наугад z приводит к делителю многочлена X2 — и (а значит, и к квадратному корню из и в /С). Продолжение этого раздела состоит в основном в перечислении благоприятных случаев и доказательстве того, что все вычисления могут быть реализованы без использования кольца многочленов. Легко убедиться, что А = КфКХ и умножение в кольце А задается формулой: (а + ЪХ){а' + 6'Х) = ао! + ЬЬ'и + (аЬ' + а'6)Х, и А имеет инволютивный автоморфизм <т, который переводит а + ЬХ в а — ЬХ, а также мультипликативную норму N : А —>• К, определенную как N(z) = za(z) или, по другому, N(a + ЬХ) = а2 — Ь2и. Напомним, что найти квадратный корень из и в К это все равно, что найти делитель нуля в Л. В следующей лемме дано несколько уточнений. (64) Лемма. Для у = а + ЬХ G А — {0} эквивалентны следующие условия: a) N(y) = 0, b) Ь не равно нулю и a/b — квадратный корень из иу c) у делитель нуля в Ау d) у не обратим в А. Доказательство. I Импликации а => b и с => d очевидны. Для доказательства b => с рассмотрим у = a + ЬХ, удовлетворяющий равенству (а/6)2 = и. Тогда y<r(y) = N(y) = 0 и у — делитель нуля в А. Наконец, d => а: если \_N(y) ф 0, то y<r(y)/N(y) = 1, что приводит к обратимости у в А. Пусть \К\ — 1 = 2kq, где q — нечетное, a k ^ 1. Каждому элементу у G А — {0} поставим в соответствие последовательность элементов из А: Уо=Уя, 2/i+i = vh (a значит, у{ = уГя), и назовем элемент у благоприятным, если N(y) = 0 или существует такой индекс г ^ 0, что N(yi — 1) = 0 и у\ ф 1. В противном случае назовем у неблагоприятным. Если удастся найти благоприятый элемент,
IV-5.2 Квадратные корни: метод Цассенхауза — Кантора 487 то сразу найдется и квадратный корень из tz, так как в этом случае найдется ненулевой элемент z E Л, удовлетворяющий условию предыдущей леммы. Частный случаи \К\ = 3 (mod 4) Этот случай эквивалентен к = 1. Если у = X, то , v 1*1-1 1*1-3 \К\ — 1 а значит, N(yo — 1) = 1 — у% = 1 — и * = 0. Следовательно, элемент X благоприятен (уо отличен от 1 в К), а это позволяет вычислить квадратный корень из и в К и снова легко находим /- l*l+i (65) Предложение. (i) Вероятность того, что элемент у Е Л — {0} неблагоприятный, меньше или равна п + ^ . («) Если Л ^ 2, т.е. |/£| = 1 (mod 4), то эта вероятность ^ 4. (ш) Если к = 1, то элемент у = X благоприятный. Для доказательства построим новое кольцо В, изоморфное Л = К[Х]/(Х2 — tz), в котором множество неблагоприятных элементов легко пересчитать. Пусть и — квадратный корень из и в К. Тогда X2 — и = (X — ш)(Х + w) и многочлены X — и и X + и взаимно просты. На основании китайской теоремы об остатках К[Х]/(Х2 - и) ~ К[Х]/(Х -ш)х К[Х]/(Х + ш) ~ К х X. Более того, справедливо утверждение: (66) Лемма. (г) Отображение К[Х] —¥ КхКу которое каждому многочлену Р(Х) ставит в соответствие пару (P(u>)yP(—w)), — сюръективный гомоморфизм кольца К[Х] в произведение колец К х К. Идеал, порожденный X2 —и, — ядро этого гомоморфизма. Переходя к факторкольцу, получаем изоморфизм ф : К[Х]/(Х2 — и)-+КхКу который элементу а + ЬХ ставит в соответствие пару (а + Ьш,а — Ьи). (гг) Норма К[Х]/(Х2 — tz), перенесенная в К х К, каждой паре (a,/?) G К х К ставит в соответствие элемент а/3.
488 IV-5 Квадратичные вычеты (67) Лемма. Пусть G_i = 0, G, = {х Е К | хГя = 1} для i ^ 0. Если D — множество неблагоприятных элементов из А — {0}, то /с V>(£>) = |J(G» " G»-i) x (G< " G»-i)- i=0 Доказательство. I Заметим сначала, что G_i С Go С G\ С • • • С Gk и Gk = Л"*. Кроме того, если для у Е Л ^Ы = (а,/?), то V(y«) = К, А), где а,- = а2'9, А = /?2'*. Если у — неблагоприятный, то ЛГ(у) ^ 0, а потому а/? ^ 0. Пусть i ^ к — наименьший индекс, такой, что а,- = 1 (такой индекс существует, ибо а ф 0 и, следовательно, а* = 1). Тогда N(yi — l) = (ore-—1) (/?,- — 1) = 0, откуда у,- = 1 (в противном случае у будет благоприятным). Следовательно, /?,- = 1, а Е G,- — G,_i, /? Е G,. Аналогично можно доказать, что существует индекс j ^ к такой, что /? Е Gj-Gj-i пае Gj, азначит, г = ;,и(а,/?) Е (Gi-G,_i)x(Gi-Gt_i), и включение ip(D) С U(^« ~~ ^«-l)2 доказано. Обратное включение (G, —G,_i)2 С i>(D) доказывается следующим образом: пусть (а,/?) = ф(у) и а Е G, — G,_i, /3 € Gi — G,_i. Тогда а ф 0, /? ^ 0 и N(y) = а/3 ф 0. Пусть индекс j такой, что N(yj — 1) = 0. Тогда (ctj — l)(/?j — 1) = 0, и без ограничения общности можно считать, что otj — 1. Но otj — 1 приводит к тому, что \ j ^ i (так как а Е G, — G,_i) и /?j = 1 (так как /? Е G,), откуда yj = 1. Это доказывает, что у — неблагоприятный элемент. Лемма |_доказана. Доказательство предложения 65 Имеем \D\ = \1>(D)\ = £?=0(|Ф| " lG»-il)2 и Для г' £ ° порядок G,- равен 2'д (так как К* — циклическая группа порядка 2kq); для i = —1 положим |G,| = 0. Получаем: к \D\ = q2+Y^Vq-V^q)2 = ?2(4*-Ч4*-2 +.. .+4+1 + 1) = <72(4*+2)/3. Откуда: |Д| g2(4*+2) g2(4*+2) = g2(4fe + 2)/3 = 1 2 |Л - {0}| 3 {\К\2 - 1) ^ 3 (|Я| - I)2 3 • 4V 3 3 • 4*'
IV-5.2 Квадратные корни: метод Цассенхауза — Кантора 489 Сделаем несколько замечаний, касающихся реализации алгоритма 5. Пусть у G А — {0} такой, что N(y) ф 0 и г — наименьший индекс, для которого N(yii — 1) = 0 (такой индекс существует, так как ук = 1). Если t ^ 1, то у>-1 = 2/?_! - 1 = (s/i-i - l)(j/.--i + 1), откуда ЛГ(у.-_1 + 1) = 0 и можно проверять AT(t/i_i + 1) вместо N(yi — 1). loop Выбрать «наугад» £ € /f; t/ if N(y) = 0 then return t\ end if; a + 6X = z <— yq\ loop exit when z £ К b-t + X; ]%)-**«*•«:**«: if AT(z -I- 1) = 0 then return (a + 1)6_1; elsif N(z - 1) = 0 then return (a - 1)6_1; end if; z+-z2; end loop; у я*? 1+ X неблшчшриятбн, end loop; рассмотреть другое i/w t Алгоритм 5. Вычисление квадратных корней в конечном поле С другой стороны, если yj Е К для некоторого j, то для / ^ j равенство N(yi — 1) = 0 приводит к тому, что од — 1 = 0 (действительно, у/ — 1 G Я" влечет N(yi — l) = (yi — 1)2). Поэтому достаточно найти jy Е Я (вместо того, чтобы продолжать вычислять j/j+i, 2/7+2 • • • )• Наконец, для элемента A Е А* элемент у Е Л —{0} неблагоприятный тогда и только тогда, когда неблагоприятен элемент Ху. Следовательно, вместо проверки произвольных элементов у Е А — {0} достаточно проверить элементы вида у = t + X (t E К). Вероятность того, что выбранные наугад т элементов из А — {0} являются неблагоприятными, меньше, чем (|) , при условии k ^ 2. Для к = 1, т.е. при \К\ = 3 (mod 4), используя формулу у/и = и < , сразу получаем квадратный корень из и (разумеется, если и — это квадрат). Отметим, что этот алгоритм предполагает, что и является квадра- zs* I*!-1 п / том в К , т.е. удовлетворяет равенству и з =1 (конечно, все возведения в степень осуществляются при помощи дихотомии). Пример Приведем пример, иллюстрирующий два результата работы алгоритма 5: N(z — 1) = 0 и N(z + 1) = 0. В обоих случаях имеются по 3
490 IV-5 Квадратичные вычеты z = 1 + X, z = 2 + X, z = 3 + X, z = 4 + X, z25 z25 z25 z2b неудачных попытки (данные абсолютно не выдуманные, хотя, как правило, число попыток меньше). Пусть р — 401. Тогда р — 25 • 24 + 1 и найдем квадратные корни из —1 и 29 (проверить, что эти числа действительно являются квадратами по модулю р). Вычисления у/^Т дают: = 86 4- 86X, z225 = 356X, И 25 = 381, неудача, = 400Х, г2'25 = 400, неудача, = 315 4- 86X, г2"25 = 45Х, И"25 = 381, неудача, = 302 +396Х, JV(z-l) = 0, откуда \/—Т = 301 • 396" * mod 401 = 20. Вычисления %/29 следующие: z=l + lX, z25 = 315 4- 255Х, z22b = 250X, г4"25 = 381, неудача, z = 2 4- IX, г25 = 272 4- 182Х, г225 = 362Х, г4'25 = 400, неудача, г = 3 + IX, г25 = 282 4- 33lX, z225 = 272 4- 219Х, г4"25 = 39Х, г8"25 = 400, неудача, г = 4 + IX, г25 = 305 4- 320Х, z225 = 188 4- 314Х, г4"25 = 210 4- 170Х, ЛГ(г 4-1) = 0, откуда \/29 = 211 • 170"1 mod 401 = 164. Делители 0 и факторизация. Начнем с элементарных вещей: элемент а кольца главных идеалов А называется разложимым, если кольцо А/а не является областью целостности, т.е. существуют ненулевые элементы х, у € А/а такие, что х у = 0. Значение делителей нуля, в частности, позволяет найти нетривиальные факторизации а: НОД(х, а) и НОД(у, а) являются истинными делителями а. Действительно, они необратимы и, тем более, не эквивалентны а. Аналогичные рассуждения применяются, если в факторкольце А/а имеется равенство x"iX2 .. .хг = 0, в котором ни один из х\ не равен нулю. Внимание: в этом случае можно лишь утверждать, что существует такой Xi, что НОД(х;,а) — нетривиальный делитель а (фактически, имеется по крайней мере два необратимых элемента х\, которые дают два нетривиальных делителя а). Разумеется, все это простая переформулировка определения непростого элемента (а значит, разложимого). Чтобы все это выявить, необходимо использовать машину для нахождения равенств а/3 ... v = 0 в факторкольце А/а. Эти равенства отражают структуру алгебры А/а и зависят от природы элемента а. Проиллюстрируем эти ужасы при помощи простого примера. Предположим, что мы хотим найти квадратный корень из 7 по
IV-5.2 Квадратные корни: метод Цассенхауза — Кантора 491 модулю простого числа р. Разумеется, поиски бесполезны, если 7 не является квадратом по модулю р (вычисление 7 з mod p позволяет выяснить это). Найти у/7 в ¥р все равно, что разложить на множители многочлен X2 — 7 в FP[X]. Можно ли, используя машину, породить равенство а/3 = 0 в кольце ¥Р[Х]/(Х2 — 7)? Да! И ответ лежит в китайской теореме об остатках: так как элемент 7 имеет квадратный корень, то в FP[X] можно записать X2 — 7 = (X — у/7)(Х + у/7) и, применяя китайскую теорему об остатках к взаимно простым многочленам X — \/7, X + \/7, получим: ¥Р[Х]/(Х2 - 7) ~ ¥Р[Х]/(Х - V7) х ¥Р[Х]/{Х + V7). Оба множителя, находящиеся в правой части равенства, изоморфны Fp, в котором имеется тождество zp = z. Следовательно, это тождество выполняется и в ¥Р[Х]/(Х2 — 7), что позволяет, как мы увидим позже, находить делители 0. Небольшое отступление: небесполезно выделить в явном виде китайский изоморфизм для этого частного случая, чтобы заметить одну очень простую вещь, — многочлен степени 1 может быть найден, если известны его значения в точках dby/7. Но какие делители нуля дают равенство zp = z? Ответ записан в тождестве Цассенхауза — Кантора: zp-z = zx (z^1 - 1) х (z^1 + 1) = 0. Если (р — 1)/2 четно, то можно разложить и z * — 1. Например, если р = 1 (mod 8), то z х (z2*1 - 1) х (z2^ + 1) х (z2^1 -Ь 1) х (z2^1 + 1) = 0. Но необходимо избежать таких z, что предыдущее равенство было бы вида ах0х--х6 = 0. Это происходит, например, при z = 0,1 или z € Fp. Существуют ли «хорошие» z и насколько их много? Только что изученный материал говорит о том, что удача нам улыбается. Привести пример? Пусть р = 337, р — I = 16 q и q = 21. Тогда: (z21 - l)(z21 + 1) = z42 - 1, (z42 - l)(z42 + 1) = z84 - 1, (z84 - l)(z84 + 1) = z168 - 1, (z168 - l)(z168 + 1) = z336 - 1. Как оперировать с z € FP[X]/(X2 — 7)? Элементы z € FP[X]/(X2— —7) представляют собой формы вида a-f 6X, которые складывают —2 и перемножают, используя равенство X = 7. Если взять z =
492 IV-5 Квадратичные вычеты 1 + X, то мы потерпим неудачу (придем к равенству 0 х а = 0). Возьмем z = 2 + X и получим: z21 = 150 + ИХ, z42 = 94 + 267Х, z84 = 320Х, z168 = 1. Получилось! z84-l ф 0, z84 + l ^ 0, a (z84-l)(z84 + l) = z168-l = 0. Из-за простоты примера можно без вычисления НОД заметить, что z84 + 1 = 1 + 320Х делит X2 - 7 в Рзз7[Х], откуда >/7 = 320-1 mod 337 = 218. Мы нашли квадратный корень. Существуют и другие примеры применения этого принципа. Например, метод Берлекампа [21] разложения многочлена степени п с коэффициентами из Fp использует алгебру В = ¥Р[Х]/Р размерности п над ¥р. Вычисляется матрица эндомор- физма г : z »-> zp в каноническом базисе {1, X, X ,..., X } алгебры В, что не вызывает особых проблем. Затем определяется базис ядра Кег(т — Ыв) — это классическая задача линейной алгебры. Если элемент z принадлежит Кег(т — Ыв) и не является константой, то произведение х(х - 1)(* - 2) ... (г - (р - 1)) = г" - г = 0, состоит из ненулевых множителей, а потому позволяет разложить Р(Х): если элемент z из ¥Р[Х]/Р представляется в виде многочлена Q € Fppf] степени < п, то по крайней мере один из НОД(ф — 1, Р) является нетривиальным множителем Р(Х). Читатель, заинтересовавшийся этим методом, может получить более точную информацию в [21], [22] и [99]. Последний пример: записать простое число р в виде суммы двух квадратов. Фактически запись р = х2 + у2 в Ъ означает, что р = (х -|- it/) (a; — it/) в Z[t], а значит, р разложимо в Z[i]. Что дает в этом контексте рассмотрение факторкольца Щг\/р1 Ничего. Если не рассмотреть Z[i] как факторкольцо Z[X]/(X2 + 1) и не поменять местами факторкольца: Z[i]/p ~ (Z[X]/(X2 + l))/p ~ (ВД/р)/(Х2 + 1) ~ ~ ¥р[Х]/(Х2 + 1). Ситуация изменилась: теперь речь идет о разложении на простые множители многочлена X2 + 1 по модулю р или, по-другому, об отыскании квадратных корней из —1 по модулю р. А это мы умеем делать! Если х2 = — 1 (mod р), то z = НОД (я + i,p) является собственным делителем р в Z[i]. Это приводит к тому, что N(z) = р — сумма двух найденных квадратов.
IV-5.3 Квадратные корни: метод Шенкса 493 5.3 Квадратные корни: метод Шенкса Как обычно, запишем \К\ — 1 = 2kq, где q — нечетно. Из китайской теоремы об остатках, примененной к циклической группе К* порядка 2kq, следует, что эта группа является прямым произведением Go x G\ группы порядка 2к (единственная 2-подгруппа Силова) и группы порядка q. Метод Шенкса использует 2-подгруппу, а не всю группу К*. В отличие от метода Цассенхауза — Кантора, метод Шенкса использует вычисления в К (а не в его квадратичном расширении). При помощи коэффициентов Безу мы можем вычислить разложение и = u$u\ элемента и Е К*. Элемент и\ всегда квадрат в G\ (так как порядок G\ нечетен) и мы всегда можем вычислить квадратный корень из tii = (^!2 ) . Поэтому вычисление квадратного корня из и сводится к вычислению квадратного корня из tzo- Это приводит нас к изучению группы, порядок которой — степень 2. Вместо того, чтобы использовать приведенное выше разложение К*, Шенкс опирается на равенства: (w з ) = и. ия или и=(и 2 ) {uq)~~ , (3) которые, с одной стороны, доказывают, что и является квадратом тогда и только тогда, когда ия — квадрат (это следует также из того, что отображение и »-> ия есть автоморфизм поля), а с другой стороны, позволяют вычислить квадратный корень из tx, зная квадратный корень из ия. Конечно, элемент ия принадлежит подгруппе G = {z G К*, z2 =1} порядка 2к. Отметим, что если \К\ = 3 (mod 4) (что эквивалентно к = 1), то из (3) немедленно следует искомый результат: элемент и является квадратом тогда и только тогда, когда |K|-i £±! и з = ия = 1, а значит, в этом случае и < — один из квадратных корней из и (вторым корнем является — и < ). Остается описать алгоритм вычисления квадратного корня из элемента, принадлежащего циклической (под)группе, порядок которой — степень 2. (68) Лемма. Пусть х и у — два элемента, порядка, ?п в циклической группе. Тогда произведение ху имеет порядок, строго меньший 2п (в действительности, этот порядок делит п). Доказательство. I Так как (хп)2 = 1 и хп ф 1, то хп = е, где е обозначает единственный элемент порядка 2 в нашей группе. Следовательно, [_(ху)п = е2 = 1.
494 IV-5 Квадратичные вычеты Пусть порядок циклической группы G — степень 2. Предыдущая лемма позволяет найти квадратный корень из элемента х Е G при помощи последовательного понижения порядка х, предполагая, тем не менее, что выполняется следующее свойство: для всякого элемента х Е G, порядок которого строго меньше |G|, существует элемент у того же порядка, что и х, квадратный корень из которого мы знаем. Действительно, рассмотрим произведение ху (у имеет тот же порядок, что и х, и нам известен квадратный корень из у) и из равенства х = ху - у'1 получим у/х = у/ху(у/у)~1. Это дает рекуррентную процедуру, так как ovd(xy) < ordx. Пример Рассмотрим простое число р = 641 = 5 • 27 + 1. Группа G = {х G и(Ър) | х2 =1} имеет порядок 128. Позже будет показано, как определить с помощью вероятностного метода образующий элемент G; сейчас же воспользуемся тем, что образующим G будет элемент и = 21 (из равенства ы2 = 1 следует, что и порождает группу G). Следующее фундаментальное равенство непосредственно проверяется для любого образующего элемента G: u,26=-l. Выберем какой-нибудь элемент из G, скажем хо = 160, и попытаемся найти квадратный корень из Xq1 . Начальная проверка х§ = 1 доказывает, с одной стороны, что хо принадлежит G, а с другой стороны, что хо — квадрат. Действительно, порядок хо равен 32, а значит: х* = -1 => (x0u*Y = х$ х w2' = (-1) х (-1) = 1. Положим xi = xou>2 = 256 и заметим, что х2 =1. Нетрудно проверить, что порядок х\ равен 8, откуда: xf = -1 => (ц/)22 = xf х и2' = (-1) х (-1) = 1. Полагая Х2 = xio>2 = 487, получаем: х\ =1. Проверяем, что порядок Х2 равен 4, откуда следует: х2 = -1 => (х2ы25)2 = х2 х и2' = (-1) х (-1) = 1. В итоге процесс останавливается на хз = X2U>2 , так как хз = 1. Перепишем цепочку в обратном порядке: 1 = я3 = х^м1 = х\ш2 ш2 =
IV-5.3 Квадратные корни: метод Шенкса 495 х^и?2ш2<и2* = хошЪ2. Следовательно, х0 г = (и26)2 = 3082, что и требовалось найти. щ Ниже приведена итеративная версия этого метода для группы, в которой известен образующий ее 2-подгруппы. Согласно формуле (3) этот метод позволяет вычислять квадратный корень из х"1 быстрее, чем из х (конечно, с математической точки зрения эти процедуры эквивалентны, однако, с точки зрения программистской необходимо еще и вычисление обратных). Для прямого вычисления квадратного корня из х было бы предпочтительнее заменить в лемме 68 ху на ху~1 ... (69) Предложение. Пусть G' — циклическая группа порядка 2kq с нечетным q и G — подгруппа G' порядка 2к. Предположим, что известен образующий и группы G. Свяжем с ним последовательность Ш{ = и2 ' для О ^ i' ^ к. (г) Элемент и>,- является элементом G порядка 2х и, кроме того, Ш{ = и>?+1 для i < к. (И) Элемент х Е G является квадратом в G' тогда и только тогда, когда его порядок (делящий 2к) меньше 2к. В этом случае определим последовательность целых чисел hi и элементов ж,- группы G: (Х\=Х, (X2 = XiUhx, ( Xm+\ = XmWhm, \2Л1=огс1х1, \2Лз=огс1х2, ••' \ 2Л-+1 =ordxm+i. Последовательность чисел hi строго убывает до 0 (т.е. /im+i = 0, что эквивалентно xm+i — I) и и\+ьхи\+ь2 • • -^И-Лт — квадратный корень из х"1. Доказательство. I Заметим, что G — единственная подгруппа порядка 2к в G1 (Gf циклическая) и элемент, порядок которого есть степень 2, принадлежит подгруппе G. В частности, х Е G является квадратом в G' тогда и только тогда, когда он является квадратом в G. Согласно предыдущей лемме последовательность Л,- — строго убывающая, а элементарные вычисления показывают, что xj+l = xlVhiVh2---Vhj = Xi(u>i+hiVl+h2---Vl+hj) ', [_откуда, используя xm+i = 1 и х\ = х, получаем искомый результат. Для вычисления произведения ^ц-л^ц-л., - . .^>1+лт при программировании введем последовательность Zj, состоящую из последовательных произведений, т.е. определенную как Zj = u\^h1^i-\-h2 •••^1+л>, и
496 IV-5 Квадратичные вычеты удовлетворяющую рекуррентным соотношениям: Z\=Ui+h1} Z2 = ZiO>i+/j2, ..., Zj = Zj-iWi+hj,... Если m такой индекс, что /im+i = 0 (т.е. хт+\ = 1), то х-1 = г^. Для рассматриваемой нами проблемы было бы предпочтительнее напрямую вычислять квадратный корень из и (а не из ия), изменив для этого значение Z\ (см. формулу (3)). Впрочем, можно немного сэкономить при вычислении а^. и wi+hi- Это сделано в следующем следствии. (70) Следствие. Обозначения заимствованы из предыдущего предложения. (г) Для Zo G G' последовательность Z{y построенная по правилу Z{ = Zi-iUi+ht, удовлетворяет равенству z^ = zfix'1. (гг) иЛ. =wj._1 ,u>i+hi =wj._1 (x,z,/i,a) <— (u9,u 2 ,fc}U;); Вычислить наименьшее j такое, что x2 = 1; if j = к then — u не-квадрат; return; end if; while j ф 0 loop / i_ \ . / 2h-J 2h-J_1 2h--*\ (x,z,/i,Gf)«— (ш ,za ,j,a ); Вычислить минимальное j такое, что x2 = 1; end loop; return z; a? «* 1, a я — квадра^шая корень из w Алгоритм 6. Квадратные корни: метод Шенкса Алгоритм 6 с одной стороны позволяет проверить, является ли элемент и квадратом, а с другой стороны, в случае положительного ответа, вычисляет квадратный корень из и в К*. При этом используется предыдущее следствие с z$ = и 2 . Кроме того, предполагается известным образующий и группы G = {v Е К* \ v2 =1} (ниже описано, как можно его определить вероятностным методом). Во время реализации можно осуществить еще несколько небольших улучшений. Для нахождения пары (х, z) вычисляем х <— и 2 } затем z — 1=1 l±l 1±1 1=1 Q и з и = и 2 и заканчиваем вычисление так: х <— z-x = и * и * = и4. Чтобы реализовать (ж, г, Л, а) <- (жа ,га ,j,a ),
IV-6 Факторизация и простота 497 можно выполнить следующие действия: «h-j-i 2 I а «—а ; z <— га; а <— а ; х «—ха; п <—j. Можно показать, что основной цикл требует порядка к2/4 умножений в X. Чтобы найти образующий группы G = {v Е К* \ v2 =1}, выбираем наугад t E К* до тех пор, пока не выполнится равенство \К\—1 t 2 = — 1: некоторые t из К* подойдут (не-квадраты в К*). Затем положим и = tq, это порождающий элемент G. Очевидно, что поиск порождающего элемента 2-силовской подгруппы G из К* эквивалентен поиску не-квадрата в К*. Действительно, если и — порождающий элемент 2-силовской подгруппы, то о; — не-квадрат, а если t — не-квадрат, то tq порождает 2-силовскую подгруппу. 6 Факторизация и простота Изучим теперь два критерия простоты и метод факторизации. Рассматриваемые нами алгоритмы вычисления модулярных квадратных корней выроятностны в том смысле, что их сложность статистически ограниченная, однако, когда они выдают ответ, то он корректен. Алгоритм факторизации Полларда, который мы изучим в конце раздела, является вероятностным в различных смыслах: он может подвести. Аналогично этим алгоритмам, тест на простоту Рабина — Миллера также является вероятностным, впрочем, как и множество других алгоритмов теории чисел. Примененный к некоторому числу этот алгоритм очень быстро дает один из следующих ответов: число составное и этот ответ однозначен, или число, вероятно, простое, т.е. имеются лишь достаточно сильные предположения простоты. Это то, что называется вероятностным тестом на непростоту. Однако существуют числа, для которых имеются детерминированные критерии простоты. Это, например, числа Ферма, с которыми мы уже встречались (тест Пепина представлен в упражнении 23), и числа Мерсенна, к изучению которых мы и переходим. 6.1 Числа Мерсенна Огромное преимущество детерминированных критериев простоты заключается в том, что они дают доказательство простоты. Без этих критериев исследование простоты числа довольно сложная операция, которая иногда состоит в доказательстве того, что группа обратимых 32-1017
498 IV-6 Факторизация и простота элементов циклическая. Числа Мерсенна (которыми являются и самые большие известные сейчас простые числа) и Ферма (относительно 5 из которых известно, что они простые) позволяют освободиться от этой сложной работы. В 1644 г. Марен Мерсенн предположил, что единственные простые числа вида 2я — 1, соответствующие значениям параметра q, заключенным в интервале от 2 до 257, это в точности числа, соответствующие следующим значениям q: 2, 3, 5, 7, 13, 17, 19, 31, 67, 127, 257. Прошло два века, прежде чем появилась идея доказательства предположения Мерсенна. В 1772 г. Эйлер доказал, что 231 — 1 — простое; в 1870-х годах Лукас доказывает, что 2127 — 1 — простое, а 267 — 1 — нет, что приводит к предположению об опечатке 61 <-> 67 в сообщении Мерсенна. С 1911 по 1914 г. Пауэре доказывает, что 289 — 1 и 2107 - 1 простые, а в 1922 г. Крайчик показывает, что 2257 - 1 непростое, что и заканчивает экспертизу предположения Мерсенна. Числами Мерсенна называются простые числа Мя вида 2я — 1, где q — простое (если q непростое, то Мя легко факторизуется). Из того, что q — простое, еще не следует, что Мя также простое, как это доказывают исправления в предположении Мерсенна. Так, например, 11 и 23 — простые числа, аМц = 2047 и Мъъ = 8 388607 простыми не являются (2047 = 23 х 89, 8 388 607= 47 х 178481). В таблице 5, возможно и неполной, указаны известные к 1990 году числа Мерсенна; причем явно в этой таблице выписаны лишь те числа Мерсенна, число цифр в которых не слишком велико. Для оставшихся мы указали лишь число десятичных знаков. Забавно, но например, запись числа М132049 в эту книгу потребовала бы порядка 20 страниц, и если бы какой-нибудь оратор захотел продекламировать это число на светском вечере, то ему понадобилось бы примерно 10 часов (без остановок и перерывов). Вот два небольших числа Мерсенна: 261 - 1 = 2 305 843 009 213 693 951, 2107 — 1 = 162 259 276 829 213 363 391 578 010 288 127. Конечно ли множество.чисел Мерсенна? А множество непростых чисел Мерсенна?
IV-6.1 Числа Мерсенна 499 1 я 3 5 7 13 17 19 31 61 89 107 127 521 607 1279 2 203 2 281 3217 4 253 4423 9689 9941 11213 19937 21701 23 209 44497 86243 110503 132 049 1 216 091 Мя = 2*-1 3 7 31 127 8191 131071 524 287 2147483647 19 цифр 27 цифр 33 цифр 39 цифр 157 цифр 183 цифр 386 цифр 664 цифр 687 цифр 969 цифр 1 281 цифр 1 332 цифр 2 917 цифр 2 993 цифр 3 376 цифр 6 002 цифр 6 533 цифр 6 987 цифр 13 395 цифр 25 962 цифр 33 264 цифр 39 751 цифр 65 050 цифр Открыватель, дата, ЭВМ Cataldi, 1588 Cataldi, 1588 Euler, 1772 Perchouvine, 1883 Powers, 1911 Powers et Fauquemberge, 1914 Lucas et Fauquemberge, 1876-1914 Robinson, 1952, sur SWAC Robinson, 1952, sur SWAC Robinson, 1952, sur SWAC Robinson, 1952, sur SWAC Robinson, 1952, sur SWAC Riesel, 1957, sur BESK Hurwitz, 1961, sur IBM-7090 Hurwitz, 1961, sur IBM-7090 Gillies, 1963, sur ILLIAC-II Gillies, 1963, sur ILLIAC-II Gillies, 1963, sur ILLIAC-II Tuckerman, 1971, sur IBM-360/91 Nickel et Noll, 1978, sur CDC-CYBER-174 Noll, 1979, sur CDC-CYBER-174 Nelson et Slowinski, 1979, sur CRAY-I Slowinski, 1982 Colquitt et Welsh, 1990, sur NEC SX-2 Slowinski, 1983 Slowinski, 1985 Таблица 5. Известные числа Мерсенна Мы упоминали, что доказательство простоты числа р часто связано с факторизацией, полной или частичной, числа р — 1. Лукас показал, что в некоторых случаях можно заменить факторизацию р — 1 на факторизацию р+ 1; Лемер обобщил эту идею и не так давно показал, что существуют и другие способы доказательства простоты [67]. Числа 32ф
500 IV-6 Факторизация и простота Мерсенна входят в категорию чисел, для которых возможно разложение на множители числа р + 1. Тест на простоту чисел Мерсенна, называемый тестом Лукаса — Лемера, основывается на изучении порядка элемента 2-f л/З по модулю Мя, т.е. в группе обратимых факторкольца Щу/3]/(МЯ). (71) Теорема (Лукас — Лемер). Число Мерсенна Мя = 2я — 1 с нечетным показателем qy большим или равным Зу простое тогда и только тогда, когда (2 4- л/З)2* = -1 (mod Mq). Вопреки формулировке предыдущей теоремы в тесте Лукаса — Лемера используются вычисления только с целыми числами, и позже мы дадим более эффективную формулировку этой теоремы, в которой уже не будет фигурировать \/3. В любом случае мы видим, что доказательство простоты числа Мерсенна эквивалентно доказательству некоторого сравнения, что легко реализовать (благодаря алгоритму экспоненциальной дихотомии), и имеет сложность порядка 2q (q — 1 возведений в квадрат и q — 1 делений на Mq). Докажем теорему Лукаса — Лемера, рассматривая по отдельности каждую из импликаций. Из сравнения следует простота При доказательстве этой импликации явно ипользуется арифметика кольца Щу/З] = Ъ ф Ъу/%. Напомним, что данное кольцо имеет инволю- тивный автоморфизм, который переводит у/Ъ в —л/З» а. также снабжено мультипликативной нормой N : Ъ[уД] -+ Ъ, определенной как N{x + yVZ) = x2-3y2. (72) Лемма. (г) Кольцо Щу/3] евклидово по отношению к отображению х+уу/3 ь-^ \х2 — Зу2| (абсолютное значение нормы). В частности, это кольцо — кольцо главных идеалов. (И) Элемент а из Ъ[уД>\ обратим тогда и только тогда, когда его норма равна ±1. (ш) Элемент 2 + у/Ъ обратим в Ъ[у/Ъ]} его обратный 2 — y/Z. Доказательство. I Для определения евклидова деления элемента а на /? введем элемент а//? из Q[\^}], который запишем в виде г + sy/b с г и s из Q. Рас- | смотрим такие целые числа х и у, что \г — х\ ^ 1/2 и \s — у\ ^ 1/2.
IV-6.1 Числа Мерсенна 501 I Тогда -3/4 < (г - х)2 - 3(« - у)2 <С 1/4 =► \N(a//3 - (х + ууД))\ <; 0/4=>|ЛГ(в-Д(х + у^))|<|ЛГ(/?)|. Положив 7 = я + 2/л/З и р = а — /Зу} получим, что а = /Зу + р и \_\N(p)\ < \N(0)\- (73) Следствие. Пусть число Мерсенна Мя = 2я — 1 с нечетным показателем </, большим или равным 3, удовлетворяет сравнению (2 + л/3)2* = — 1 (mod M9). Тогда Мя простое. Доказательство. I Индукцией по нечетному числу q, большему или равному 3, легко показать, что Мя = 7 (mod 12). Заметим, что всякий простой делитель р числа Мя отличен от 2 и 3, а значит, сравним с ±1 или ±5 по модулю 12 (иначе с ±1 было бы сравнимо и их произведение). Отсюда следует, что Мя имеет по крайней мере один простой делитель р с р ^ ±1 (mod 12). Теперь покажем, что этот простой делитель р равен Мя, что доказывает простоту Мя. В Z существуют простые числа, которые уже не являются простыми в Щу/Ъ] (например, 13). Но это не относится к р. Действительно, если р разложимо в Z[V§], то p=a/3 =» p2 = N{a)N{(3) =» p=±N{a) =» p = ±{х2 - Зу2), и, учитывая то, что х2 — Ъу2 — простое число, отличное от ±2 и ±3, легко проверить, что х2 — Ъу2 = 1 (mod 3) и х2 — Ъу2 = 1 (mod 4), откуда р = ±1 (mod 12) — противоречие с выбором р. Значит, р остается простым и в Z[V§]. Сравнения (2 + л/3)2*"1 = -1 (mod р) => (2 + л/3)2' = 1 (mod p) показывают, что 2 + V3 имеет порядок 29 в U(Z[\/S]/(p))} а поэтому, кольцо Z[V5]/(p) — поле (поскольку Z[V5] — кольцо главных идеалов), состоящее из р2 элементов. Следовательно, 2я делит р2 — 1 — порядок группы обратимых элементов этого поля. Так как р — I делитель Мя = 2я — 1, то получаем сравнения
502 IV-6 Факторизация и простоте р2 = 1 (mod 2я) и ар = -1 (mod 2я) => ар = -р2 (mod 2я). Можно сократить последнее сравнение на р (р нечетно, а следовательно, обратимо по модулю 2я) и получится, что а + р = 0 (mod 29). Теперь имеем неравенства ар < 2я ^ а+р, а это приводит |_к (а — 1)р ^ а — 1, что возможно лишь при а = 1, т.е. р = 29 — 1. Другое доказательство следствия 73 Второе доказательство не использует структуру кольца Z[v5], a происходит в кольце А = Z[y/$]/(Mq). Обозначим через а и /3 соответственно образы элементов 2 + \/3 и 2 - \/3 в Л. Сравнения (2 + уД)24'1 = -1 (mod Mg) =► (2 + \/3)2' = 1 (mod Afg) показывают, что а имеет порядок 2я в Л. Существенно отметить, что последний вывод сделан благодаря неравенству 1 ф —1 в А (2 обратимо в Л, так как М9 нечетно). Итак, 2 остается обратимым в любом частном Л и, в частности, а имеет порядок 2я не только в Л, но и в любом его частном: это замечание является основным для дальнейшего доказательства. Пусть р — некоторый простой делитель Мя. Покажем, что р непременно равно Мя, что и докажет простоту Мя. Этот делитель необратим в Л (поскольку является делителем нуля в Л). Пусть М — максимальный идеал Л, содержащий р. Тогда факторкольцо А/М является полем характеристики р (так как р Е М) и, следовательно, имеет подполе Fp = Z/pZ. Коэффициенты многочлена (X — а)(Х — /3) принадлежат Fp, так как а + /3 = 4 и а/? = 1. Поскольку а — корень этого многочлена, то таковым является и ар (из-за формального равенства Р(Х)Р = Р(ХР) в Z/pZ[X]). Следовательно, в А/М имеем: ар = а или ар = /3 = а-1 = а2*-1. Используя то, что а имеет порядок 2я в (А/М)*, получаем: р = 1 (mod 2*) или р = 2я - 1 (mod 2я). Поскольку р делит 2я — 1 = М9, тор < 2я, что делает невозможным левое сравнение. Из правого сравнения следует, что р ^ 2я — 1, а значит, р = 29 — 1, что и требовалось доказать.
IV-6.1 Числа Мерсенна 503 Из простоты Mq следует сравнение Лукаса — Лемера При доказательстве этой импликации используется частный случай закона квадратичной взаимности Лежандра — Гаусса. Для простого числа р и а Е Ъ — рЪ символ Лежандра (£) равен 1, если а является квадратом по модулю р, и равен — 1 в противном случае. Для числа 3 закон квадратичной взаимности можно записать следующим образом: (74) Лемма. Пусть р — простое числоу отличное от 2 и 3. Число 3 является квадратичным вычетом по модулю р тогда и только тогда, когда р = ±1 (mod 12). Доказательство. I Закон квадратичной взаимности, примененный к числу 3, дает (-)(|) = (—^(р-1)/2 Следовательно, 3 является квадратичным вычетом по модулю р тогда и только тогда, когда (|) = (—1)(р-1)/2. Единственным квадратом по модулю 3 является 1, откуда р = 1 (mod 3) и р = 1 (mod 4), либо р = 2 (mod 3) и р = 3 (mod 4). |_Отсюда следует искомый результат. (75) Следствие. Пусть Мя = 2я — 1 — простое число Мерсенна с показателем qy большим или равным 3. Тогда (2 + л/3)2* = — 1 (mod Мя). Доказательство. I Для удобства записи положим р = Мя. Поскольку р = 7 (mod 12) (см. доказательство следствия 73), то из предыдущего доказательства следует, что 3 не является квадратом по модулю р, а потому уДР = 3<р-1)/2л/3 = -л/3 (mod p), откуда (х-f 2/v3)p = х — ул/З (modp). (4) Это сравнение можно рассматривать как малую теорему Ферма в Z[V§]. С другой стороны, 2 является квадратом по модулю р. Можно, конечно, вспомнить теорему о квадратичной взаимности, а можно получить это в явном виде: 2(2* - 1) = 0 (mod 2* - 1) => 2*+1 = 2 (mod p) => (2<*+1>'2)2 = 2 (modp). Определим теперь два элемента г и г в Z[V5]/(p) как т = 1^Х3 и
504 IV-6 Факторизация и простота т = * J&. Элементарные вычисления дают: т2 = 2 + уД bZ[vS1/(p), rr = -l. Из сравнения (4) выводим: тр = т => rp+1 = — 1 (так как тт = — 1) =»(2 + л/3)(р+1)/2 = -1 (modp) (так как т2 = 2 + л/3) => (2 + УЗ)2*"1 =-1 (modp). Приведем обычную формулировку теоремы Лукаса — Лемера, которая хотя и является переформулировкой теоремы 71, но не использует больше (76) Теорема (тест Лукаса — Лемера). Пусть Mq = 2я — 1 — число Мерсенна с нечетным показателем q, большим или равным 3. Поставим ему в соответствие следующую последовательность Лукаса — Лемера (Li)i^o- L0 = 4 я Li+i = L2 — 2 mod Mq. Число Мя простое тогда и только тогда, когда Lq-2 = 0 (mod Mq). Доказательство. Положим и = 2 + \/3, tJ = 2 — >/3- Используя то, что шШ = 1, и индукцию по г, легко показать, что L,- = о>2 + ы2 . Теперь также легко проверяется эквивалентность для некоторого целого числа п: Li = 0 (mod п) <=> а>2,+1=-1 (mod п). Действительно, во всяком кольце, если выполнено равенство yz = 1, то эквивалентны равенства y+z = 0 и у2 = — 1. Осталось применить |_эти рассуждения к у = и2% и г = Ш2 . 6,2 Тест на простоту Рабина — Миллера Если р — простое число, то малая теорема Ферма утверждает, что 6я-1 = 1 (mod p) для любого 6, не кратного р (т.е. взаимно простого с р). Этот критерий можно использовать для того, чтобы показать, что некоторое число п — составное. Выберем целое число 1<6<п— 1 и
IV-6.2 Тест на простоту Рабина — Миллера 505 вычислим 6n mod n при помощи дихотомии. Если последний результат отличен от 1, то п — составное, в противном случае ничего конкретного сказать нельзя. На практике бывает полезно перед вычислением 6n_1 mod n, требующем log(n— 1) операций, вычислить НОД(6, п), что требует C?(log6) операций, и в случае результата, отличного от 1, сразу доказывать, что п составное. Например, для приведенного ниже п вычисление 3n_1 mod n требует 128 возведений в квадрат по модулю п: п = 22' + 1 = 340 282 366 920 938 463 463 374 607 431768 211457, 3n_1 mod n = 47511664 169441434718291075092691 853899. Последнее доказывает, что п непростое (вопросы: что дает вычисление НОД(3,п)? а если выбрать основание 6=2 вместо 6 = 3?). Конечно, это несерьезный пример, поскольку п не что иное как число Ферма F-j, непростота которого может быть установлена при помощи теста Пепина, который утверждает, что число Ферма Fq = 22* 4- 1 простое тогда и только тогда, когда 3 з = — 1 (mod Fq) (см. упражнение 23). (77) Определение. Число п Е N* называется псевдопростым по основанию 6 Е N*, если 6n_1 = 1 (mod n) (что, в свою очередь, приводит к тому, что Ь и п — взаимно просты). Пример псевдопростого числа Пусть п = 105 = 3x5x7. Число п не является псевдопростым по основанию 2, поскольку 2104 = 217х6+2 = (26)17 х 22 = 4 (mod 7) и, тем более, 2104 ^ 1 (mod 105). Однако, п является псевдопростым по основанию 13: 13104 = (132)52 = 1 (3), 13104 = (134)26 = 1 (5), 13104 = (136)17х132 = 1(7), и, следовательно, 13104 = 1 (mod 105). ■ Является ли простым целое число п, псевдопростое по любому основанию 6, взаимно простому с п? Ответ неизвестен. (78) Определение. Число п называется числом Кармайкла, если оно псевдопростое по любому основанию Ь, взаимно простому с п (по-другому, если
506 IV-6 Факторизация и простота хп 1 = 1 в группе U(Zn) обратимых по модулю п элементов), но само при этом простым не является. Классический пример: п = 561 = 3 х 11 х 17. Группа U(Z^6i) изоморфна произведению трех групп U(Z3), U(Zu), и{Ъ\т) порядков 2, 10 и 16 соответственно. Но п— 1 = 560 делится на каждое чисел 2, 10, 16, а потому х560 = 1 в группе C/(Zs6i) и число 561 является псевдопростым, но не простым (это наименьшее число Кармайкла). (79) Напоминания (см. раздел 3.3). (г) Индикатором Кармайкла Х(п) целого числа п называется экспонента группы U(bn), т.е. наименьшее целое число m такое, что хт = 1. Наименьшее как по отношению к упорядочению ^, так и по делимости: Х(п) делит всякое такое число т. (И) Индикатор Кармайкла Х(п) делит значение функции Эйлера <р(п) и вычисляется следующим образом: • если П\, П2,..., пг — взаимно простые числа, то \{п\П2 ... пГ) = НОК(А(щ),А(п2)...А(пг)), • если р — простое число, отличное от 2, то А(ра) = ра~1(р — I), • А(2) = 1, А(4) = 2 я А(2а) = 2а"2 при а ^ 3. (ш) Целое непростое число п является числом Кармайкла тогда и только тогда, когда индикатор Кармайкла Х(п) делит п — 1. Сильно псевдопростые числа Существование чисел Кармайкла доказывает, что выполнение свойства 6П-1 = 1 (mod n) для всякого 6, взаимно простого с п, недостаточно для выяснения простоты п. Чтобы усилить это свойство, заметим, что если п — нечетное простое число, то, кроме сравнения 6n_1 = 1 (mod n), выполняется сравнение 6~2~ = ±1 (mod n) (поскольку в по- ле у2 = 1 => у = ±1). Далее, если 6"з" = 1 (mod n) и rL^- четно, то 6~*~ = ±1 (mod n)... Получаем: (80) Определение. Пусть п — целое нечетное число и п — 1 = 2kq, где q — нечетное. Назовем число п сильно псевдопростым по основанию b E Ъ, если выполняются следующие условия: Ья = 1 (mod n) или 3j в [0, к - 1], b2J<J = -1 (mod n). (81) Предложение. Пусть п — целое нечетное число. Если п — простое, то п — сильно псевдопростое по любому основанию Ь, 1 ^ 6 < п. Если п — сильно
IV-6.2 Тест на простоту Рабина — Миллера 507 псевдопростое по основанию 6, то оно псевдопростое по основанию b (в частности у взаимно простое с Ь). Доказательство. I Пусть п— 1 = 2kq с нечетным q. Для доказательства первого пункта рассмотрим наименьшее целое число г Е [0, к] с Ь2%я = 1 (mod n) (к удовлетворяет этому свойству). Если г = 0, то Ья = 1 (mod n). Если г > 0, то для j = i — 1 выполняется 0 ^ j < к и b2'q = — 1 (mod n). Для доказательства второй части заметим, что в любом случае существует такое г Е [0, к], что Ь2 я = 1 (mod n) (возвести в квадрат сравнение Ь2 я = ±1 (mod n) и заметить, что j < к). Так как 2'д [_делит п — 1, то 6n_1 = 1 (mod n). Пример числа Кармаикла Число п = 561 = 3 х 11 х 17 является числом Кармаикла, а потому псевдопростое по основанию 2. Однако оно не является сильно псевдопростым по основанию 2. Действительно, п — 1 = 35 х 24 и 235х2 = 1 (mod 561), а 235х22 = 67 (mod 561). с <— Ьч mod п; if с = 1 ог с = п — 1 then return n есть псевдопростое по основанию 6; end if; j<— 0; loop }ЩШ|1|&Ш exit when j = k — 1; с i— c2 mod n; j <— j + 1; if с = n — 1 then return n псевдопростое по основанию 6; end if; exit when с = 1; end loop; return n не сильно псевдопростое по основанию 6; Алгоритм 7. Сильная псевдопростота по основанию 6 В алгоритме 7 реализуется концепция сильной псевдопростоты. Входными параметрами этого алгоритма являются основание 6 и целое число п ^ 3 с п - 1 = 2fcg, где q нечетно. Отметим выход из цикла exit when с = 1: действительно, если b23q mod n = 1, то b2' я mod n = 1 для любого j' ^ i, а потому п не является сильно псевдопростым по основанию 6. Целые числа ^ 25 • 109, сильно псевдопростые по малым основаниям были изучены Померанцем, Селфриджем и Вагстафом [148]. Существует лишь 13 не простых сильно псевдопростых чисел по основаниям 2,
508 IV-6 Факторизация и простоте 3, 5 и нет ни одного не простого сильно псевдопростого числа по основаниям 2, 3, 5, 7 и 11. 6.2.1 Вероятностный алгоритм Рабина (82) Теорема (Рабин). Пусть дано целое нечетное число п. Определим Вп = {х G и(Ъп) | п сильно псевдопростое по основанию х}. Если п — непростое (а значит, ^ 9), то отношение числа элементов множества Вп к числу элементов C/(Zn) не превосходит ^, т.е. *-?Ч ^ ^. Исключение составляет случай п = 9. Можно придать вероятностную окраску приведенной выше формулировке, рассматривая вероятность pn = jV4 того, что п сильно псевдопростое по основанию из C/(Zn). Теорема Рабина утверждает, что если п непростое, то эта вероятность не превосходит 1/4. Когда п непростое, можно рассматривать элементы Вп как «свидетелей» простоты в том смысле, что они наводят на мысль о простоте п. Следовательно, если число п является сильно псевдопростым по m случайно выбранным основаниям, то с вероятностью ошибки, меньшей, чем ^г, можно считать, что п — простое. Другая формулировка теоремы Рабина — следующее следствие, в котором надо исключить п = 9 как непростое число. (83) Следствие. Если нечетное целое число п сильно псевдопростое по основанию b для любого Ь G В С U(Zn) и \В\ ^ ^р, то п — простое. Теорема Рабина приводит к следующему вероятностному алгоритму. Зафиксируем множество В оснований тестов на сильную псевдопростоту и будем проверять по этим основаниям нечетное целое число п, строго большее каждого 6 Е В, до тех пор, пока не выполнится одно из следующих условий; п не сильно псевдопростое по основанию 6, а потому составное; п — сильно псевдопростое по любому из используемых оснований и с вероятностью ошибки, меньшей, чем ^ -^щ, можно считать, что п — простое. Пример реализации Приведем описание реализации теста Рабина в системе формальных вычислений Scratchpad. Устраним сначала некоторое количество целых чисел п (например, ^ 100 000), относительно которых можно точно
IV-6.2.1 Вероятностный алгоритм Рабина 509 выяснить, простые они или нет. Для этого возьмем первые 66 простых чисел pi, выпишем их (pg5 < Ю0 000 < Рее) и начнем алгоритм с деления п на эти числа: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311,313,317. Если п не делится ни на одно из р<, то применим тест Рабина, зафиксировав в качестве оснований первые 10 простых чисел В = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 }. Результат работы теста «вероятно, число п — простое» будет верным с вероятностью ^ 1 — -^ « 0,99999905. I 1195068768795265792518361315725116351898245 581= I 24 444 516 448 431392 447 461 х 48 889 032 896 862 784 894 921 1345 587 387 292 051697 387186 550 543 937 646 682 206 242 741 = 820240021972 852680853981x1640480043 945705361707961 1428 391434 278 955 057 766 480 215167 563 527 064 254 995 581 = 845101010021569864697461x1690202020043139 729394921 8 218 776122 312 414 589 259 453 815 284 880 194 791556 136 781 = 2027162 564067373284085861x4054325128134746 568171721 21725 013 656 018 763 076 105 459 253 647137 482 758 798 581 781 = 3295831735390837809700861x6591663470781675619401721 65133 961998 738 965 332 758 869 580 009 452 514 988 654 652 701 = 5706748724043269339010901x11413497448086538678 021801 19 840 288 923 887 081357 309 700 907 668 002 023 719 213 638 581 = 3149626082877 702592 298461x6299252165755405184596921 47 824 338 726 623 806 233 423 439 382 232 910 557 660 981544 141 = 4890007092358036970775781x9780014184716073941551561 40 731291916 337 435 991504 960 386 523 783 671925 548 224 861 = 4512831257444567691328021x9025662 514889135382656041 65 670 822 302 684 064 701133 181659 108 281791806 006 666 541 = 5730219118964128438904581x11460438237928256877809161 1И 968 231758 836 883 865 259 414 369 643 926 962 293 874 583 421 = 7482253395830593088122741x14964506791661186176245481 Таблица 6. Сильно псевдопростые числа по основаниям 2, 3, ..., 29 В таблице 6 дан список чисел (найденных Ф. Арнаутом), которые объявлены системой Scratchpad простыми, а сами таковыми не являются.
510 IV-6 Факторизация и простота 6.2.2 Доказательство теоремы Рабина В доказательстве перечисляются элементы множества Вп. Используя китайскую теорему об остатках, можно пересчитать решения уравнения хя = ±1 в циклической группе и(Ъ <*%). (84) Лемма. (г) В конечной мультипликативной группе G уравнения хя = 1 и хноA(qt\G\) _ i эквивалентны, (И) Если G — циклическая группа, то Н = {х Е G \ хя = 1} — циклическая подгруппа порядка НОД(д, \G\). Доказательство. I Если хя = 1, то £u9+t/lG1 = 1 для любых u,v G Z, откуда хнод(?,|с?|) _ ^ Обратное утверждение очевидно. Для доказательства пункта (гг) рассмотрим образующий g группы G. Нетрудно проверить, что h = днод{я,\о\) является образующим подгруппы Я Порядка НОД(?,|С|). (85) Лемма. Элемент у циклической группы G является q-й степенью тогда и \а\ только тогда, когда унодЩоТТ _ \ jg этом случае число решений уравнения хя = у равно НОД(д, \G\). Доказательство. I Подгруппа G^ группы G, состоящая из q-x степеней, изоморфна факторгруппе G/{x Е G,xq = 1}, а потому ее порядок равен HOiJ|G|\- Эта подгруппа содержится в подгруппе Я = \о\ \ {у € G | унод(д,|о|) — 1} такого же порядка и, следовательно, G^ = Я. Вторая часть леммы доказывается легко. Допустим мы хотим в явном виде представить элемент у Е Я как q-ю степень. Запишем у = gm, где g — образующий группы G. нфд|д Ui\ кратно |G|, а значит, m делится на НОД(д, |G|), т.е. существуют такие |_tz, v e Z, что m = uq + v\G\ и у = gm = gu V,G| = хя сх = gu. Вычисления, которые приведены ниже, несколько утомительны. Начнем с частного случая чисел п, для которых Jv4 = ^. Этот частный случай не только иллюстрирует используемую технику, но и то, насколько тщательным должно быть общее доказательство для того, чтобы получить границу \.
IV-6.2.2 Доказательство теоремы Рабина 511 Пример предельного случая Рассмотрим простое число р\ = 3 (mod 4) такое, что число р2 = 2pi — 1 также является простым (например, pi = 40 039, 41 011, 42 727). I я I 1 Тогда п = р\р2 — составное и *-тЧ = ^ (числа такого вида появятся в общем доказательстве). Запишем р\ = 1+2gi, р2 — 1+\q\ с нечетным q\. Для вычисления \ВП\ положим п — 1 = 2kq, где g — нечетное: п = (1 + 2gi)(l + 4fi) = 1 + 8g? + 6gi => n - 1 = 2gi(3 + %) => ft = l, g = gi(3 + 4gi), и воспользуемся тем, что множество £п есть объединение двух непересекающихся множеств Рп и Qn: Pn = {xe u(zn) | ** = 1}, Qn = {xe u(zn) I ** = -i}. По китайской теореме об остатках \Pn\ = \PPl\ x |РР2| и |Q„| = |QPl| x |QP2| (обозначения понятны). \PPi\ вычисляются по лемме 84: \РР1\ = НОД(9,Р1 - 1) = НОД(д,2д1) = НОД(«,в1) = qlt \РРЗ\ = НОД(?)Р2 - 1) = НОД(д,4д1) = Я1, a \QPi\ вычисляются по лемме 85, поскольку (—1)нод(«,Рё-1) — \. \QP1\ = НОД(д,р1 - 1) = ft, \QP2\ = НОД(?,р2 - 1) = qi. Итак, |ВП| = qj + ql = 2q\, a <p(n) = (pi - 1)(р2 - 1) = 8д?, откуда следует, что |^ = £. (86) Лемма. Пусть п = Pi*p%2.. -Prr — разложение нечетного числа п на простые множители. Положим п = 1 + 2kq с нечетным q и для любого i р{ = 1 -f 2kiqi, где все qi также нечетны. Если к\ ^ к2 ^ ... ^ кг (чего можно добитьсяj переставив р,), то |Вп| = НОД(«>«1)НОД(д>в2)...НОД(д>вг)(1+ £ 2*Г)" o$i<fci Доказательство леммы. В дальнейшем неоднократно будет использоваться равенство: НОД(2Ч ф?)) = 2inf(''*•> НОД(9, <?,)•
512 IV-6 Факторизация и простота Действительно, pi делит п и потому взаимно просто с п — 1 = 2kq, а значит, и с 2J. Отсюда жщачр?'-1^ -1)) = нод(2>в,Р< -1) = = Н0Д(2Ч 2fc-g,-) = 2inf0'.fc-) НОД(9, «)• Множество В„ является объединением непересекающихся множеств PnuQn{j) (О ^ j < Л), где: Р„ = {х € tf(Z„) | х* = 1}, Qn(j) = {х € U(Zn) | х2'' = -1}, а потому \вп\ = \рп\+ Yl \QnU)l (5) 1. Вычислим \Рп\: при понятных обозначениях из китайской теоремы об остатках следует изоморфизм Рп ~ Рр°\ х Рр<*2 х ... х Рр«г, приводящий к тому, что \Рп\ = |Pp*i | х |Рр<*21 х ... х |Рр«г |. Применяя лемму 84 к циклической группе U{7L *.), получим: \PpV\ = НОД(^(р?<)) = НОД(9>9<)- Следовательно, |Р„| = НОД(9, ?i) х НОД(9>«) х ... х НОД(9>9г). (6) 2. Вычислим |Qn(j)l: аналогично, китайская теорема об остатках устанавливает биекцию между множествами Qn{j) и QpQi{j) x Qp**(j) х ... х Qp?r(i), а потому |Qn(j)| = \Qp°i(j)\ x \Qp°>(j)\ x ... х |Qp^(j)|. По лемме 85, »(р?') |Qp*,(j)| ^0 *=> (_1)нод(2,д,.(Р|.)) = х 2*w» *=* 2*пга,*0нОД(д,и) ЧеТН°* Поэтому |Qp°i(j)| ^ 0 тогда и только тогда, когда j < к{. В этом случае, опять же по лемме 85, \Qp,(j)\ = НОД(2Ч^(рИ) = V НОД(д,д<)- Так как к\ ^ А?2 ^ .. .^ &г, то для данного j имеем:
IV-6.2.2 Доказательство теоремы Рабина 513 если j ^ *i, то |Q„(j)l = 0; если j < ku то |Qn(j)| = Уг НОД(*, ?i)... НОД(*, дг). Заметим, что Ari ^ Л, ибо р,- = 1 (mod2fcl), а значит, п = 1 (mod 2*1). Следовательно, сумма из (5) равна = НОД(«>«1)НОД(«>«2)...НбД(«>«г) £ 2*\ (7) 0$j<*i [_3аключение леммы следует из равенств (5), (6), (7). Пример Проиллюстрируем вычисление Вп на примере числа Кармаикла п = 561 = 3 х 11 х 17. Имеем: 561 - 1 = 24 • 35, А = 4, 9 = 35, 3 - 1 = 21 • 1, *i = 1, qx = 1, 11 - 1 = 21 • 5, k2 = 1, (/2 = 5, 17 - 1 = 24 • 5, *з = 1, ft = 1, что дает Ifteil = НОД(в> 91) НОД(д, ft) НОД(д, ft) = 5, 10561(0)1 = НОД(д>в1)НОД(д>д2)НОД(д>ft) £ 2« = 5 o$i<o и 1-05611 = Ю. Значит, существует 8 чисел (кроме 1 и —1), которые являются «свидетелями простоты» числа 561, в то время как это число простым не является. Отношение b^i) = "h ™ 0,03125 довольно небольшое. (87) Лемма. В обозначениях предыдущей леммы имеет место следующая оценка: Кроме того, если не все к{ равны между собой, то
514 IV-6 Факторизация и простота Доказательство леммы. Имеем: Р(П) = (Р1 - lK'"1^ " l)??3"1 . . . (р, - IK'"1 = = 2fcl+fe3+...+fer(?ipa1-l92pa3-l .^рв.г-1, откуда |Дп| = 1 + So<j<fciy> НОД(д,ц)НОД(д,ц) НОД(д,дг) 2Г-Х х К 2*1+*2 + -+*г Если заменить 2fcl+fca+"'+fcr на 2rkl, то получим первое неравенство. Если, кроме того, не все Л,- равны fci, то, заменяя 2*1+*а+,,,+*г на [_2Г*1+1, получим второе неравенство. Доказательство теоремы 82 в случае, когда п — степень простого числа (г = 1). Пусть п = р*1 cai ^2 (так как п — непростое). Применяя предыдущую лемму (г = 1), получим: |В„| Н0Д(д,д1) 1 _J_ откуда при pi ^ 5 находим J^ < £. При Pi = 3 ^ ^ |, за исключением случая <*i = 2, т.е. п = 9: £9 = {1, —1}, У?(9) = 6, а значит, |£9| _ I ¥>(9) 3* Доказательство теоремы 82 в случае, когда п — произведение степеней простых чисел (г ^ 2). Выражение —2*ir , которое использовалось при оценке Ч^Н (в предыдущей лемме), убывает при возрастании к\ (достаточно рас- писать —3^13"1 = 2** Г* + F^r)- Поэтому можно оценить ^4, заменив к\ на 1: \ВП\ 1 ^НОДЫ Л 1 < 1 -гт 1
IV-6.2.2 Доказательство теоремы Рабина 515 Если хотя бы одно из а,- больше или равно 2, то П!=1 «?-i ^ 3 и Pi \Вп\ 111 ^ - х - = -. <р(п) ^236* Поэтому в дальнейшем можно считать, что все а, равны 1 и число п произведение г ^ 2 различных простых чисел. Случаи г ^ 3. Из предыдущих неравенств получаем: Ш Л 1/8, р(п) * 11/4, если г ^ 4, если г = 3. Равенство j-тЧ = ^ достигается тогда и только тогда, когда г = 3, &! = &2 = А:з = 1 и qi | 9. Иначе говоря, если разложение п на простые числа есть п = (1 + 2gi)(l + 2g2)(l + 2g3). Случай г = 2 и A:i < А?2. Используя второе неравенство преды- дущей леммы, аналогично получаем, что выражение д^-И убывает при возрастании к\ и можно заменить Ari на 1: щ 1г,нодм 1 Равенство Кч = ^ получается тогда и только тогда, когда к\ = 1, /:2 = A:i + 1 = 2, q\ | q, qi \ q, что приводит к q\ = q2y и разложение п на простые множители есть п = (1 + 2<7i)(l + 4q\). Случай г = 2иА:1 = А:2. Имеем неравенство \Вп\ 1ЛН0Д(Д,Д<) VW2H 9. Покажем, что одновременно не может выполняться <7i | <? и (72 | <?• Деи~ ствительно, поскольку 2kq = n-l=p1p2-l = (1^2k^q1)(1^2k^q2)-l = 2k^q1^q2)-h22^q1q2i то соотношение q\ \ q приводит к тому, что q\ \ q2, а соотношение q2 \ q к q2 | q\. Поэтому q\ = q2, а следовательно, pi = P2, что невозможно. Значит, НОД(д.ц) 1 НОД(д,уа) 1 |В„| 1 1 _ 1 либо _ ^_, либо _ ^_ => —.^.х..-. IS I 1 w Во всех рассмотренных случаях \-гЧ ^ ^, причем общий вид чисел, на которых достигается равенство, известен.
516 IV-6 Факторизация и простота 6.3 Ро-метод Полларда факторизации чисел Для поиска некоторого множителя целого числа п р-метод Полларда использует следующую идею. Поставим в соответствие многочлену / G %[Х] и числу t/o 6 2 последовательность 2/i+i = f(yi) mod n элементов из Ъп с первым членом уо mod п. Предположим, что пара (/ mod n, 2/о mod n) обладает случайным свойством. По аналогии с алгоритмом Брента (см. раздел 4.3) образуем пары (ул, 2/л), заменяя тест yh = yk некоторым другим тестом, который будет описан ниже. Так как п предполагается составным, то у него должен быть простой множитель р < д/n, пока неизвестный. Этому простому р можно поставить в соответствие последовательность x,+i = /(х,) mod p с первым членом хо = 2/о mod p, которая тоже еще не известна. Алгоритм Брента, виртуально примененный к этой последовательности, дает пару таких индексов (Л, Л), что хд = хь и можно считать, что к порядка у/р (это выполняется, если пара (/ mod р, хо = 2/о mod p) выбрана случайным образом). Но х, = 2/t modp для всякого г, а следовательно, хн = хк =» р\ун-Ук => Р\ НОД(уЛ - 2/*, п). j <— 1; У <— Уо mod п; Main-Loop : loop у' <— </; for A in 1 .. j loop у <— /(у) mod n; d <— НОД(|у exit Main^Loop when d > 1; end loop; i «— 2j; end loop Main-Loop; Алгоритм 8. Неоптимизированный р-метод Полларда При реализации тест на вычислимость последовательности 2Л состоит в том, чтобы определить, будет ли d = НОД(|2/л — Ук\,и) строго больше 1. Если это так, то с большой вероятностью d является нетривиальным делителем п: действительно, если d — делитель п, строго больший 1, то он равен п тогда и только тогда, когда 2/л = Ук • Последнее равенство, в силу случайности выбора пары (/ mod n, 2/o mod n), означает, что к — число порядка у/п. С другой стороны, к порядка у/р ^ \/п < у/п и, скорее всего, укфук. Алгоритм 8, реализующий р-метод Полларда, после окончания своей работы выдает делитель d числа п, который больше 1. Если этот у»;
IV-6.3 Ро-метод Лолларда факторизации чисел 517 делитель < п, то он не тривиален, и число п можно факторизовать; в противном случае алгоритм терпит неудачу (выдавая d = п). Этот алгоритм предполагает существование многочлена /(X), который можно рассматривать как случайную функцию из Ъп в Ъп (а также из Ъ? в Ъ? для простых делителей < у/п). В настоящее время неизвестно, как выбрать такой многочлен. Однако, эксперимент показал, что многочлены вида X2 + а, и в частности X2 + 1, по-видимому, обладают необходимыми случайными свойствами. Именно эти многочлены используются обычно в реализациях. Обсуждаемый алгоритм требует большого количества вычислений НОД и, чтобы улучшить его эффективность, Полл ар д предлагает вместо того, чтобы вычислять НОД на каждом этапе, накопить произведение тг по модулю п из s последовательных значений у — у1. Число s должно быть меньше, чем простые множители п (например, s = 10 или s = 100, при этом следует проверить, не являются ли маленькие простые числа делителями п). После s итераций проверяется неравенство d = НОД(тг,п) > 1: если оно верно, то d является либо нетривиальным делителем п (алгоритм удался), либо d = п. Во втором случае следует вернуться назад и поискать в последнем произведении тг первый такой множитель, что d = НОД(|у — j/|, п) > 1. Опять, если d < n, то алгоритм удался, в противном случае — не удался. При применении этого метода полезно изменить значения пар (Л, Л), использовавшиеся в методе Брента, следующим образом: h к 0 5+1,...,25 25 45 + 1,...,б5 65 105 + 1, ... , 145 (2* -2)5 /1 + 2-15 + 1,...,/1 + 2*5 Есть несколько замечаний относительно выбора пар (h,k). Во-первых, длина интервала значений к, соответствующих h = (2* —2)s, равна 2t_1s, а потому удваивается на каждом этапе (каждый этап состоит из s итераций). Во-вторых, последнее значение к равно следующему значению Л. Наконец, в-третьих, k — h пробегает все значения, большие или равные s + 1 и, следовательно, пара (Л, к) с х/» = Хк наверняка найдется. Последняя деталь, касающаяся реализации алгоритма 9, в котором явно не фигурируют переменные h и к. Последовательные значения переменной j связаны с последующими значениями переменной Л: если j = 2,_1, то h = (2* — 2)s и у = у/». Если теперь осуществить 2,_1s итераций у <— f{y)y то получим у = Ук'-i, где к' — первый элемент ин-
518 IV-6 Факторизация и простота тервала значений к. Снова осуществляя 2,_1s присваиваний у <— f(y) (группами по s присваиваний), получим у = yk", и к" обозначает уже последний элемент интервала значений к. у <— t/o mod п; j <— 1; Main-Loop : loop \ у'<— у> for I in 1 .. s x j loop у i— /(y); end loop; for / in 1 .. j loop J/aaved < J/J 7Г < lj for e in 1 .. 5 loop У<—/(*/);*<—* (У ~ y') mod n; end loop; d <— НОД(7г, n); exit Main-Loop when d > 1; end loop; i «— 2j; end loop Main-Loop; lfd=n then у i t/aavedj loop У *— /(У); d *— НОД(|у - t/'|, n); exit when d > 1; end loop; end if; Алгоритм 9. Оптимизированная версия р-метода Полларда Примеры Приведем два примера, в которых используется случайный многочлен f{X) = X2 + 5 и первый член последовательности уо = 1. 1. Для п = 100 003 300 009 (« 1011) при помощи метода Полларда находится делитель р = 1000 003 (« 106). Разложение п на простые множители есть п = pq с q = 100 003 (« 105). Приведем значения /i и А для последовательностей Xk+i = f{xk) modp и x^+i = /(х&) mod q: для p : цр = 63, Ap = 22, для q : ця = 199, A9 = 54. Неравенство Ap < \q объясняет, почему метод Полларда находит делитель р, хотя р > q. 2. Метод Полларда (с параметрами, приведенными выше) терпит неудачу с числом п = 10 097063, являющимся произведением двух простых чисел р = 1 009 и q = 10 007. Рассмотрим три последовательности: щ = 1, tifc+i = (u\ + 5) modp, v0 = 1, vk+i = (v2k + 5) mod q} 2/o = 1, 2/fc+i = (2/jfc + 5) mod n.
IV-7 Это только начало 519 Последовательности и и v имеют одну и ту же длину периода А = 47 (а потому ту же длину периода имеет последовательность у). Параметр /1 последовательности х равен 52 (1152 = ^52+47 = 678), а последовательности у — 61 (^61 = ^61+47 = 8 392). Следовательно, если два индекса Л, к с h < к удовлетворяют неравенству НОД(п, \ук — ун\) > 1, то к — h кратно А. Как только h становится больше 61, то сразу yk = 2/л, что и объясняет, почему метод Полларда в данном случае терпит неудачу. 7 Это только начало ... В математических журналах формулы и теоремы, как правило, пронумерованы. Эти числа обычно не превышают 1000. Следовательно, легко, на первый взгляд определить теорему по ее номеру. Но, если взять очень толстый журнал, мы можем наткнуться на теорему номер 157 767 733443477. Где-то дальше в этом журнале мы могли бы прочитать *... таким образом, применяя теорему 157 767 733443477, имеем. ..р и мы вынуждены были бы сравнивать эти числа цифра за цифрой, чтобы проверить, что речь идет об одном и том же числе, и даже использовать карандаш, отмечая галочкой каждую цифру, чтобы избежать их повторения. Alan Turing, On computable numbers... (1940 [87]) Эта глава заканчивается, а мы лишь слегка коснулись сути предмета. Мы изложили классические, т.е. элементарные, методы. Но наука идет вперед. Те, кто открывают большие простые числа, всегда используют алгоритмы, аналогичные алгоритму Полларда, для умножения целых чисел, однако используемые компьютеры становятся все мощнее и могут работать параллельно. Следовательно, в алгоритме Полларда все три преобразования Фурье могут вычисляться одновременно... Надежность криптографических систем тесно связана с невозможностью факторизации больших чисел. Мы изложили лишь один метод факторизации, далеко не единственный и не лучший. К классическим относят метод, основанный на разложении в цепную дробь числа у/п\ (р— 1)-метод Полларда, который основан на разложении числа р — 1 на малые простые для некоторого делителя р числа п; метод квадратичного решета: образуются небольшие квадратичные вычеты по модулю п, которые факторизуются (каким-либо иным методом), а затем, комбинируя их различными способами, можно пытаться получить сравнения типа х2 = у2 (mod n). Но методы, которые дают сейчас наилучшие
520 IV-7 Это только начало результаты, используют эллиптические кривые. Эти же самые кривые используются как основа криптографических систем, и мы снова возвращаемся к началу этого параграфа. Мы не знаем, какова сложность проблемы факторизации целых чисел, а потому мы ничего не знаем о надежности RSA. Начиная с теста Рабина — Миллера, тесты на простоту также претерпели существенные улучшения. Тест Рабина — Миллера хотя и очень быстрый, но имеет один серьезный недостаток: он не дает гарантий простоты исследуемых чисел. Но существуют детерминированные тесты. Один из таких критериев был найден Адлеманом, Померанцем и Рамели, а впоследствии упрощен и улучшен Коэном и Ленстрой [50]. Полученный алгоритм может быть применен к числам, о которых метод Рабина — Миллера говорит, что они, вероятно, простые, для полного доказательства их простоты. Недавно эллиптические кривые стали использоваться и в области исследований на простоту. Как видим, затрагиваемые в этой главе темы далеки от завершения.
Упражнения 1. Простые сравнения a. Доказать, что 6 • 4П = 6 (mod 9) для всякого nGN. b. Доказать, что если 7 не делит п, то оно делит п6 — 1. c. Доказать, что в десятичной системе счисления числа п и п5 имеют одну и ту же последнюю цифру. 2. Критерии делимости Доказать, что число, записанное в десятичной системе счисления, делится на 3 тогда и только тогда, когда сумма его цифр делится на 3. Относительно каких еще делителей можно составить подобный простой критерий? Почему? Обобщить на системы счисления по другим основаниям. 3. Автоморфные числа Как найти числа из п десятичных цифр, удовлетворяющие сравнению х2 = х (mod 10n) (число 9376 таково, поскольку 93762 = 87 909 376). 4. Нумерация Фибоначчи Доказать, что всякое целое число записывается единственным образом в системе счисления Фибоначчи, т.е. в виде п = Fni+Fn2-\ hFnk, где ni ^ n2 + 2, п2 ^ п3 + 2, ..., пк-\ ^пк+2,пк^ 2. 5. Простота чисел (1... 1)ь a. Доказать, что число, записываемое в виде (1... 1)ю по основанию 6. не может быть простым, если число единиц в его записи есть простое число. b. Доказать, что любое простое число, отличное от 2 и 5, делит число (11... 1)ю, записанное в десятичной системе счисления. Привести примеры.
522 IV Некоторые методы алгебраической алгоритмикх 6. Проблема показателя Пусть, например, т = 2 321, г = 143, х = 2 и у = 745. Проверить, что у = xr (mod m). Можно ли найти такое s, что х = ys (mod m), и если да, то как? 7. Применения китайской теоремы об остатках Решить следующие системы: J.ajmodJ) /4-= 7 (mod 9), х, х,- € Z, х = j X2 (mod 15), n € Z, 12„ = 3 [^ ^ Кстати, является ли Ъ\Х\ кольцом главных идеалов? 8. Восстановление обратных модулярных величин a. Пусть 6 обратно к а по модулю п. Проверить, что 6(2—ab) обратно к а по модулю п2 и что 62(3 — 2а6) обратно к а2 по модулю п2. b. Определим последовательность (bk)k^o следующим образом: &о = Ь и bk = 6fc_i(2 — abk-i) mod n2 . Проверить, что bk обратно к а по модулю п2 . Какое число обратно к 11 335 по модулю 216? c. Если известно, что 6 — обратное к а по модулю n, a 6' — обратное к а по модулю п', то как найти обратное к а по модулю пп'1 9. Арифметика по модулю 2я — 1 a. Пусть а ^ 2. Изучив отображение Ъ Э п ь->. ап Е C/(Za9_i), доказать, что сравнения an = am (mod a9 — 1) и п = m (mod g) эквивалентны. b. Чему равен НОД(ап — l,am — 1)? Вывести отсюда, что 2П — 1 обратимо по модулю 2я — 1 тогда и только тогда, когда п обратимо по модулю q и найти обратное к 2п — 1 mod (29 — 1) как функцию от обратного к п mod g. Обратимо ли 213 — 1 по модулю 232 — 1? 10. Перечислительное упражнение Сколько элементов порядка 10 в следующих группах и каковы они? ^25, ^50, ^100, ^10 X ^10, tf(Z40), tf(Z5o), C/(Zioo), C/(Z3i), C/(Z1023).
Упражнения 523 11. Сравнение ак<р^п^х = a (mod n) для любого а Пусть п — свободное от квадрата целое число. Доказать, что из т = 1 (mod <р(п)) следует ат = a (mod n) для некоторого (не обязательно обратимого по модулю п) числа а. Будет ли это свойство справедливым, если убрать условие свободы от квадрата? 12. Целые числа, удовлетворяющие модулярным ограничениям Пусть имеется г попарно взаимно простых положительных модулей mi, Го2, ••-, "V и множества Vi, Vjj, ..., Кг такие, что Vi С [0, mi[, • • •, Vr С [0, тг[. Выяснить, какие значения может принимать переменная п G N, удовлетворяющая ограничениям: п mod p, Е К для любого t = l,2,...,г. 13. Пары взаимно простых элементов, сохраняющих НОК Для фиксированных элементов пит факториального кольца определить два взаимно простых элемента п' и т', делящих пит соответственно и имеющих то же НОК, что и п с т, не используя при этом разложение исходных элементов на неприводимые множители. a. Доказать, что если n, m, п' и т! удовлетворяют поставленной задаче и д = НОД(п,т), то любой неприводимый элемент р,делящий т/<7, делит т', но не делит п'. b. Вывести отсюда алгоритм (и его обоснование), который находит п' и ш', используя только деления и вычисления НО Д. 14. Сравнение Р(Х) = 0 (mod pn) и целые р-адические числа Это упражнение посвящено представлению целых р-адических чисел через решение сравнения Р(Х) = 0 (mod pn). Детали читатель может посмотреть в [28]. Разумеется, р обозначает простое число, а Р(Х) — многочлен с целыми коэффициентами. Пусть х — решение сравнения Р(х) = 0 (mod p). Предположим, что Р'(х) ^ 0 (mod p) и если Р'(х)"1 обозначает обратный к Р'(х) по модулю р, то, как и в упражнении 34 главы I, построим последовательность (*f)s>i: х\ = х, х2 = xi — P'(x)~1P(xi), х3 = х2- Р'(х)'1Р(х2)у xw = Xi - Р'(х)-гР(х{). Доказать, что я,- — единственные сравнимые с х по модулю р, решения сравнений Р(х{) = 0 (mod px). Образно говоря, мы преобразовали
524 IV Некоторые методы алгебраической алгоритмикь решение х\ по модулю р в решение х2 по модулю р2 (и это преобразование единственно), затем преобразовали это решение в решение хз по модулю р3 ... В частности, x,+i = x, (mod px). a. Доказать, что если у = z = х (mod р) и Р(у) = P(z)= О (modpn), то у = z (mod рп) (указание: использовать равенство P(Y)-P(Z) = (Y-Z)Q(Y,Z)). b. Последовательность (x,-),-^i зависит от выбора х (и обратного к Р'(х) по модулю р). Проверить, что переходя от х к х' = х (mod р) получим последовательность (x(),^i такую, что х( = х, (mod р'). Можно ограничить х, так, что 0 ^ х, < р\ Доказать, что в этом случае х, можно записать в виде х, = ао + ai р+в2 Р2 Н hOi-i P1-1, где все а, принадлежат интервалу [0,р— 1] и определены однозначно. Написать программу построения последовательности (х,),^1 и элементов (а,),^о- Рассмотреть пример X2 — 3 = 0 (mod 7n) и xi = 2. Что можно сказать о примере X3 — 50Х2 — 2Х +100 = 0 (mod 7n) при х\ = 1 и xi = 3? Более общо, при каких условиях существует у Е Z такое, что 2/ = х, (mod р%) для любого г? c. Предыдущие вопросы наводят на мысль об изучении подмножества Л С П|>1 Z/p'Z, состоящего из таких последовательностей (х,),^1, что Xi+i (mod p') = Х{. Доказать, что так определенное подмножество является коммутативным унитарным кольцом Л, содержащим Z (а значит, имеющим нулевую характеристику). Это кольцо называется кольцом целых р-адических чисел. d. Пусть х G А. Доказать, что х обратим тогда и только тогда, когда xi ^ 0 (mod р). При каких условиях р% | х? Вывести отсюда, что кольцо А без делителей нуля. e. Доказать, что последовательность (х,),^1, соответствующая сравнению Р(Х) = 0 (modp*) (при подходящих условиях), определяет целое р-адическое число х такое, что Р(х) = 0. Пусть Р(Х) = Хр~1 — 1 и х\ ^ 0 (mod p). Описать целые р-адические числа, соответствующие сравнению Р(Х) = 0 (mod p'). Доказать, что в этом случае определено инъективное отображение U(Z/pZ) —у U(A). 15. р-адические разложения дробей Пусть р — простое число. Любой элемент кольца р-адических чисел единственным образом записывается в виде х = а0 + а\р + а2р2 + а3р3 + • • •, 0 ^ а, ^ р - 1.
Упражнения 525 Посмотрим, как вычислить а,-, если х — дробь; с одной стороны, это позволит доказать, что данная последовательность почти периодическая, а с другой — написать алгоритм поиска периода. До конца упражнения запись х mod р обозначает единственный элемент 2/ Е [0,р — 1] с у = х (mod p). a. Написать 5-адическое разложение числа 1992. Каково р-адическое разложение числа —1? Проверить, что 5-адическое разложение | есть 2+3-5+1-52+3-53+1-54+3-55Н Как выглядит 5-адическое разложение ^р? Допустим, что р-адическое разложение х есть х = а0 + aip + a2P2 + asp3 + • • • с ао ф 0. Как выглядит разложение — х? А если ао = 0? b. Чему равно р-адическое число 1 + 1-рп+1-р2п + 1-р3гЧ Вывести отсюда, что если р-адическое разложение числа х почти периодическое, то х — рациональное. c. Пусть a G Z, 6 G Ъ — рЪ. Так как 6 обратимо в кольце целых р-адических чисел, то | единственным образом записывается в виде ао + dip + 02Р2 + азр3 + • • • с 0 ^ а, ^ р — 1. Проверить, что бао = а (mod p), а затем, что (а - Ьа0)/р _ 2 = ai + (i2p + азр + • • • о Построить такую функцию / : Ъ —> Z, что рекуррентная последовательность 2/,+i = /(t/i), 2/о = а удовлетворяет сравнению 6а, = у,. Доказать, что / оставляет на месте всякий интервал [—К, К] при достаточно большом К > 0. Вывести отсюда, что последовательность (а,*),-^о почти периодическая. d. Построить алгоритм, позволяющий неограниченно находить коэффициенты а,. Сравнить этот алгоритм с алгоритмом упражнения 14. Написать алгоритм, позволяющий вычислять р-адическую форму дробей. 16. Поиск образующих элементов циклических групп Пусть G — мультипликативная абелева группа и р^1 .. .р{?г — разложение на простые множители числа п. Доказать, что в группе G имеется элемент порядка п тогда и только тогда, когда для каждого Pi существует элемент х, такой, что х" = 1, а х"'Pt ф 1. Используя этот результат, построить метод нахождения образующего элемента циклической группы, разложение порядка которой на простые множители известно.
526 IV Некоторые методы алгебраической алг о ритмики 17. Вокруг теоремы Лагранжа a. Теорема Лагранжа: «в группе G порядка п выполнено равенство хп = 1» или так: «если Я — подгруппа группы G, то порядок Я делит порядок G». Конечно эта теорема много раз использовалась в этой книге. Какие классические доказательства следуют из этой теоремы? b. Пусть а ^ 2, п ^ 1. Доказать, что п \ <р(ап — 1), где <р — функция Эйлера. 18. Утверждение, обратное китайской теореме об остатках a. Доказать, что прямое произведение абелевых групп циклично тогда и только тогда, когда все множители цикличны и имеют попарно взаимно простые порядки. b. Доказать, что C/(Zn) — циклическая тогда и только тогда, когда п G {2,4,ра, 2ра} и р — нечетное простое число. 19. Замечание, касающееся конечных абелевых групп Доказать, что любая конечная абелева группа реализуется как подгруппа (или как факторгруппа) группы C/(Zn) (мультипликативной группы целых чисел по модулю п). 20. Замечание о ^(я — 1) при нечетном п Пусть п\у..., пг — семейство г нечетных чисел и п = п\ .. .пг. Положим k = inf{t;2(n, — 1)}. Доказать, что ^(п—1) ^ к и равенство достигается тогда и только тогда, когда число индексов г с ^(п,- — 1) = к нечетно. 21. Простые числа вида 4А: -+- 1 Было доказано, что —1 является квдратичным вычетом по модулю р тогда и только тогда, когда р = 1 (mod 4). Вывести отсюда бесконечность множества простых чисел вида 4Аг -+- 1. 22. Некоторые свойства чисел Ферма В этом упражнении р обозначает простой множитель n-го числа Ферма Fn = 22П + 1. a. Доказать, что если п ф т, то числа Fn и Fm взаимно просты. b. Доказать, что р = 1 (mod 2n+1). Если р ф 3,5, то р = 1 (mod2n+2). c. Не проводя много вычислений, вывести отсюда, что F^ —^ простое, a F$ — нет.
Упражнения 527 23. Числа Ферма и критерии Пепина a. Пусть р = 22Л + 1 — простое число Ферма сп^2. Доказать, что элемент группы и{Ър) является порождающим тогда и только тогда, когда он — квадратичный вычет. b. Доказать, что 3,5 и 7 порождают и{Ър) при п ^ 2. c. Доказать, что р простое тогда и только тогда, когда За = — 1 (modp) (критерий Пепина). 24. Вычисление квадратных корней a. Известен элемент а коммутативного унитарного кольца, удовлетворяющий уравнению а4 +1 = 0. Вычислить квадратный корень из 2. Применение: вычислить квадратный корень из 2 в кольцах или полях Zncn, равным 17 и 257 (простые числа Ферма), 41, 241, 1201, 3281. b. Обобщение: доказать, что в коммутативном кольце с обратимым элементом 2 элементы 2 и —1 являются квадратами тогда и только тогда, когда существует такой а, что а4 + 1 = 0. В качестве примера найти число корней четвертой и восьмой степеней из 1, а также число квадратных корней из 2 в кольце ^3281- c. Каков будет ответ на предыдущий вопрос, если рассматривается поле Zp? Пусть теперь имеется поле Zp с р = 2q + 1, q нечетно. Как обосновать существование квадратного корня из некоторого элемента и, в случае удачи, найти этот квадратный корень? 25. При каком условии —1 является m-й степенью? Доказать, что —1 является m-й степенью в группе обратимых по модулю ра элементов (р — простое число) тогда и только тогда, когда v2(m) < v2(p- l). 26. Квадратичные вычеты по модулю некоторого числа a. Пусть пит — два взаимно простых целых числа и а Е Ъ. Доказать, что а — квадратичный вычет по модулю пт тогда и только тогда, когда а — квадратичный вычет по модулям пит. Какие можно сделать выводы относительно квадратичных вычетов по модулю какого-либо целого числа? b. Пусть п — нечетное целое число и а — квадратичный вычет по модулю п, взаимно простой с п. Доказать, что а — квадратичный вычет по модулю п2. (Указание: если х2 =. a (mod n), то квадратичный
528 IV Некоторые методы алгебраической алгоритмикь вычет а по модулю п2 можно искать в виде х + уп, где у требуется определить.) Вывести отсюда, что а — квадратичный вычет по модулю любой степени п. с. Пусть a G Ъ — нечетное целое число. При каком условии а является квадратичным вычетом по модулю 2? по модулю 4? Доказать, что а является квадратичным вычетом по модулю 2fc, k ^ 3, тогда и только тогда, когда а есть квадратичный вычет по модулю 8, и показать, что это эквивалентно тому, что а = 1 (mod 8). 27. Элементарное вычисление (:~) Общий закон квадратичной взаимности дает следующий результат: если р — простое число, отличное от 2 и 3, то —3 — квадратичный вычет по модулю р <=> p=l (mod 3). Мы же хотим найти более простое доказательство (которое, в частности, не использует закон взаимности). a. При каких условиях трехчлен второй степени с коэффициентами в поле К имеет корень в К? b. Предположим, что —3 — квадратичный вычет по модулю р. С помощью трехчлена X2 + X + 1 и группы обратимых по модулю р доказать, что р — 1 кратно 3. c. Если р — 1 кратно 3, то доказать, что группа C/(Z/pZ) содержит элемент порядка 3. Вывести отсюда, что —3 — квадратичный вычет. 28. Другой способ вычисления (|) Изучив приведенные ниже произведения, вычислить (^) и (^): тг = (2 • 4 • 6) х (8 • 10 • 12) mod 13, тг = (2 • 4 • 6 • 8 • 10) х (12 • 14 • 16 • 18 • 20 • 22) mod 23. Рассмотреть общую ситуацию, различая, при необходимости, случаи р = 1 (mod 4) и р = 3 (mod 4). 29. Прямые следствия закона взаимности Для каких простых чисел р число 3 является квадратом по модулю р? Тот же вопрос для 5 и 7.
Упражнения 529 30. Подгруппа квадратов по модулю степени простого числа Доказать, что множество квадратов по модулю ра образует подгруппу индекса 2 в C/(Zpo), если р — нечетное простое число. А если р=2? 31. Символ Якоби Это упражнение посвящено вычислению символа Лежандра (^), где р — нечетное простое число. Будем считать, что этот символ равен нулю, если а кратно р. а. Какова сложность вычисления символа Лежандра по формуле (£) = а^~ modp? Другой способ вычисления символа Лежандра состоит в использовании закона квадратичной взаимности при условии продолжения символа (-) на составные значения р. Для этого определим символ Якоби (|) для оЕ^и нечетного целого числа 6 следующим образом: G)=nfe> если Y\i Pi — разложение 6 на простые множители. В частности, положим (|) = 0 тогда и только тогда, когда а и 6 не взаимно просты. b. Доказать, что если а — квадрат по модулю 6, то (|) = 1, о и 6 предполагаются взаимно простыми. Верно ли обратное? Описать такие нечетные целые числа 6, что (|) = 1 для любого а Е C/(Zfr). c. Доказать, что выполняются следующие свойства (напомним, что второй аргумент символа Якоби — нечетное положительное целое число ^ 3): (т)= (т) •если ai =a2 (mod 6)> (Т)= (т) (т) • | —— ) = (—1)"аГ, иначе говоря, ( — 1=1 <==> 6=1 (mod 4), -1 =(—1)т~, иначе говоря, 1-1=1 <==> 6 = ±1 (mod 8), - 1 = (- 1 (—1) 4 (обобщенный закон взаимности). 34 1017
530 IV Некоторые методы алгебраической алгоритмики d. Используя эти свойства, построить алгоритм вычисления символа Якоби (в частности, символа Лежандра). Применение: выяснить, является ли 713 квадратом по модулю простого числа 1009. 32. Символ Якоби: подход Золотарева Определим здесь символ Якоби, используя знак подстановки; такой подход был предложен Золотаревым (см, например, [45] или [158]). Напомним, что каждой подстановке а : I —¥ I конечного множества 7 можно сопоставить ее знак e(<r) E {—1,1} и тем самым определяется гомоморфизм группы подстановок множества 7 в группу {—1,1}. Это единственный гомоморфизм в группу {—1,1}, который равен —1 хотя бы на одной транспозиции (или на всех транспозициях). Кроме того, если множество 7 вполне упорядочено и через Inv^ обозначить множество инверсий сг, т.е. таких пар (г, j), что г < j, а сг(г) > cr(j), то *И = (-1)1*4 е(а) = 1[^]^.. a. Чему равен знак цикла длины /? Если сг — подстановка множества 7 и I\ U ... U Is — разбиение 7 на множества 7*, остающиеся на месте под действием сг, то доказать, что е{<т) = е(<т\).. .£(сг5), где сг* обозначает сужение сг на 7*. Если сг : I -+ 7, т : J —>• J — две подстановки, то выразить £(сг х г) как функцию е(сг) и е(т). b. Пусть 7, J — два конечных линейно упорядоченных множества мощностей пит соответственно. Доказать, что знак подстановки, меняющей порядок 7 на обратный, равен (—1) з . Упорядочим I x J с помощью одного из двух возможных лексикографических порядков, что порождает перестановку перехода от одного порядка к другому. ТТ / . n(n-l) m(m-l) Показать, что ее знак равен (—1) з 2 c. Чему равен знак подстановки х ь-^ — х в Zn? а в абелевой группе нечетного порядка? Чему равен знак переноса 141 + гв Zn? Пусть даны два взаимно простых целых числа п и m, m нечетно. Обозначим через тгп>т умножение на п по модулю т (Zm Э х ->• пх G Zm) и определим символ Золотарева (n|m) как знак подстановки 7Гп,т (всегда будем считать, что аргументы символа (.|.) взаимно просты и второй аргумент нечетен). Оставшаяся часть упражнения посвящена доказательству того, что этот символ имеет те же свойства, что и символ Якоби. В конце будет доказано, что эти два символа совпадают.
Упражнения 531 d. Доказать, что: п = nf (mod m) => (n|m) = (n'|m), (nn'\m) = (n|m)(n/|m), v v 7Л ~ 1 . . . ТЛ — 1 (-1|т) = (-1) —, (2|т) = (-1) —, (п\р)=п 2 (modp), (p — простое). e. Пусть n, m — два нечетных положительных взаимно простых числа. Определим две подстановки а и т множества [0, п— 1] х [0, т— 1]: сг(г, j) = ((mi + j) mod n, j), r(i,j) = (г, (nj + i) mod m), 0< i^n-1, 0^ j ^ m- 1. Доказать, что е(а) = (m|n), e(r) = (n\m). Вывести отсюда, что (n|m)(m|n) = (—l)""5 3_ (закон взаимности). f. Из закона взаимности получить: (2|m) = (-l)1^, (n\m)(n\mf) = (n|mm'), (n\m) = Доказать, что 2 — примитивный корень по модулю простого числа р вида Aq +1, где q — простое. Тот же вопрос для числа р вида 2q + 1, где g — простое число и q = 1 (mod 4). Доказать, что —2 — примитивный корень по модулю простых чисел р вида 2q + 1, где g — простое и g = 3 (mod 4). 33. Некоторые простые числа, для которых 2 — примитивный корень Доказать, что 2 — примитивный корень по модулю простого числа р вида 2д+1, где q — простое число с q = 3 (mod 4). 34. Вычисление длины периода: метод Флой да a. Дана последовательность xn+i = /(xn), где / — функция на конечном множестве F. Доказать, что существует такой индекс п, что хп = х2п- Вывести отсюда алгоритм вычисления длины периода и индекса вхождения в период. Доказать, что хп единственно в том смысле, что если хт = х2т, то хп=хт. b. Доказать, что существует такое п, что хп = Х2П для любого значения xq. ©• 34*
532 IV Некоторые методы алгебраической алгоритмики 35. Линейные генераторы: примеры a. Чему равна длина периода последовательности tzn+i = ип 4-6 mod т (для какого-нибудь щ)? Чему равен индекс вхождения в период? b. Пусть а и т взаимно просты. Рассмотрим последовательность xn+1 = axn mod m, xq = 1. Чему равен индекс вхождения? Выразить длину периода через класс ат группы U(Zm). 36. Линейные генераторы: изучение частных случаев Пусть, ГП=1 Р?* — разложение на простые множители числа га Е N*. a. Пусть а = 0 (mod р,) для любого г = 1,..., г. Доказать, что последовательность £n+i = ахп + 6 mod m стационарна (при любом хо). Что можно сказать об индексе вхождения в период? Изучите последовательность £n+i = 6хп + 6 mod 320 для различных значений 6. b. Предположим, что а ^ 0,1 (mod pt) для г = 1,..., г (это эквивалентно тому, что а — 1 обратимо по модулю га). Доказать, что длина периода последовательности xn+i = exn 4- 1 mod га, xo = 0 равна порядку а в C/(Zm). Чему равен индекс вхождения в период? Доказать, что результат не изменится при xn+i = exn + 6 mod га, если 6 обратимо по модулю га. Рассмотреть примеры xn+i = 8xn + 1 mod 15, xn+i = 2хп + 1 mod 27. c. Снова предположим, что а и а — 1 обратимы по модулю т. Привести примеры последовательностей вида xn+i = exn + 1, у которых длина периода не превосходит порядка а в группе C/(Zm) (xo более не равно 0). d. Вычислить длины периодов следующих последовательностей: хп+1 = 12хп + 1 mod 63, xn+i = 2xn 4- 1 mod 100, xn+i = 4xn 4- 1 mod 100, xn+\ = 20xn 4- 1 mod 360 37. Линейные генераторы: частные случаи аффинных преобразований a. Доказать, что рекуррентно заданная последовательность xn+i = ахп 4- Ь является образом при аффинном преобразовании у —у <р(у) = осу 4- /? последовательности t/n+i = at/„ 4-1,2/0 = 0. b. Пусть га Е N. Найти такое га' E N, что <£>(у) = <p(z) (mod m) <=> у = z (mod га').
Упражнения 533 Используя это, доказать, что определение длины периода (и индекса вхождения в период) произвольной последовательности хп+\ = ахп + 6 mod m сводится к определению тех же параметров для последовательности уп+\ = ауп + 1 mod m', yo = 0. Посмотреть примеры: xn+i = 12хп + 7 (45), хо = 1; *„+i = 12х„ + 3 (45), х0 = 2; хп+1 = 11хп + 10 (45), хо = 1. 38. Порядок элемента 1 + р в U(Zpr) Рассмотрим последовательность хп+\ = (1 + р)хп modpr, х0 = 1 (р — простое число, отличное от 2), которая является образом при аффинном преобразовании у —¥ ау + /? последовательности уп+\ = (1 +p)s/n + 1 modm', 2/o = 0 (упражнение 37). Доказать, что последовательность (уп)п^о максимального периода, и этот результат зависит от порядка элемента 1+рв C/(Zpr). 39. Последовательности, порожденные сравнениями Доказать, что длина периода последовательности x^+i = ах^Л- + 1 mod pn, xo = 0 находится по таблице 7. рТз о = 1 (mod р) | Рп о £ 0,1 (mod р) ord(o,C/(Zpn)) р = 2, n ^ 2 о = 1 (mod 4) 2Л о = 3 ( о = -1 (mod 2Л) 2 mod 4) о £ -1 (mod 2Л) 2ord(o,C/(Z2n)) Таблица 7. Длина периода последовательности, заданной линейным сравнением 40. Линейные генераторы: синтез Показать, как вычислить длину периода произвольной последовательности, заданной линейным сравнением xn+i = axn + b mod т. Рассмотреть пример £n+i = 16хп 4- ЮО mod 315, xq = 2. 41. Многошаговые линейные генераторы В этом упражнении используется много понятий: линейная алгебра, конечное поле, неприводимый многочлен, ^-шаговые генераторы почти периодических последовательностей. а. Скажем, что последовательность (хп)п^о элементов множества F генерируется за к шагов, если ее члены получаются по правилу
534 IV Некоторые методы алгебраической алг о ритмики Хп+к = /(хп, хп+ь ..., x„+fc_i), где / — функция Fk -* F. Если число элементов множества F равно q (т.е. F конечно), то эта последовательность почти периодическая и длина ее периода не превосходит qk. Достигается ли эта граница Л-шаговым генератором? Предположим, что функция / : Fk —у F генерирует последовательность с длиной периода qk — 1 и что существует такое а Е F, что /(а,а,.. .,а) = а. Показать, как при помощи пары (/, а) построить Л-шаговый генератор с длиной периода qk. Изучим теперь линейные Л-шаговые генераторы, т.е. такие реку- рентные последовательности, каждый член которых является линейной комбинацией к предыдущих членов (в поле К): xn+fc = а0хп + aixn+i -| Ь ak-ixn+k-i. Обозначим через Р{Х) многочлен Хк — (ак-\Хк~1 + Ь а\Х + ао). Напомним, что многочлену Р можно поставить в соответствие матрицу Фробениуса В = Фр размеров к х Л, определенную следующим образом (определим также матрицу А = гВ): В = ФР = 1 О о о о о 1 0 а*_2 О 1 a*_i/ А = *В = /О 1 О О О О \а0 ai 1 О а*_2 0 \ О 1 a*-i/ b. Рассмотрим вектор Хп = (xn,xn+i,.. . ,xn+k_i). Какова связь между последовательностью (хп), векторами Хп и матрицей А? Обозначим через Е векторное пространство Кк, а через Ев — ^И" модуль, ассоциированный с В, т.е. определенный следующим образом: Р • х = Р(В)(х). Доказать, что первый вектор е\ канонического базиса порождает Ев, т.е. Е = К • е\ + К • £(ei) + # • #2(ei) + • • •• Чему равен характеристический полином В? минимальный многочлен В? Чему равны соответствующие многочлены для матрицы А? c. Показать, что если F С Е — подпространство, инвариантное относительно действия Л, то существует единственный многочлен Q, делящий Р и такой, что F = Q Е как /£[Х]-модуль, т.е.
Упражнения 535 F = {Q(A)(x) | x G #}• В дальнейшем будем считать, что Р{Х) неприводим. Что можно в этом случае сказать о подпространстве пространства Е, инвариантном относительно действия А? d. Допустим, что Хо — ненулевой вектор. Доказать, что X, = Xj тогда и только тогда, когда Л-7"' = Ые- Доказать, что Ах = И# эквивалентно тому, что Р(Х) \ Xх — 1. Пусть К — конечное поле порядка q. Доказать, что длина периода равна порядку X в расширении L = К[Х]/Р. В частности, она не превосходит qk — 1. e. Показать, что хотя X и кажется особым корнем многочлена Р(Х), но и любой другой корень Р{Х) (в подходящем расширении) имеет те же алгебраические свойства, что и X (сформулировать более точно это высказывание). Показать, что длина периода последовательности (хп)п^о равна qk — 1 тогда и только тогда, когда Р(Х) имеет корень порядка qk — 1. Доказать, что такие многочлены существуют для любого к. Назовем такие многочлены примитивными. Не следует путать это понятие (применяемое как правило к многочленам над конечными полями) с понятием примитивного многочлена в фактори- альных кольцах. f. Используя то, что многочлен X3 + 2Х2 + 1 примитивен над полем F3, построить 3-шаговые генераторы в множестве {0,1,2}, имеющие период длины 26 и 27. Для конечного множества F и некоторого к ^ 1 доказать, что существует функция / : Fk —f F, которой соответствует ^-шаговый генератор с периодом максимальной длины, т.е. \F\k. 42. Псевдопростые числа Напомним обозначение Sq(b) = 1 Ч-бЧ Ьб9"1. В этом упражнении будем считать, что q нечетно и взаимно просто с 6 — 1. a. Предположим, что б9-1 = 1 (mod q). Доказать, что п = Sq(b) нечетно, взаимно просто с 6— 1 и удовлетворяет сравнению 6^п_1)/2 = 1 (mod n). Проверить, что если имеется нечетное псевдопростое число по основанию 6, взаимно простое с 6 — 1, то отображение q —¥ Sq(b) определяет бесконечно много псевдопростых чисел по основанию 6. В частности, если q — псевдопростое по основанию 2, то таковым является и 2я — 1. b. Доказать, что существует бесконечное множество простых чисел q таких, что Sq(b) — псевдопростое по основанию 6. Указание: рассмотреть б2 (Cipolla, 1904 [154]).
536 IV Некоторые методы алгебраической алгоритмики 43. Числа Кармайкла Напомним, что число Кармайкла это такое целое число п, что 6n_1 = 1 (mod n) для любого 6, взаимно простого с п. a. Пусть число п ^ 3 непростое и п = р"1/^2 • • -Р**- Доказать, что п является числом Кармайкла тогда и только тогда, когда: Ргф2, а{ = 1, р, — 1 | п — 1, i=l,...,*, и в этом случае к ^ 3. b. Чему равно наименьшее число Кармайкла? Проверить, что следующие числа являются числами Кармайкла: 1105 = 5х 13 х 17, 1729 = 7 х 13 х 19, 2465 = 5 х 17x29, 2821 = 7 х 13 х 31, 6601 = 7 х 23 х 41, 29 341 = 13 х 37 х 61, 41041 = 7 х 11 х 13 х 41, 172 081 = 7 х 13 х 31 х 61, 278545 = 5 х 17 х 29 х 113, 825 265 = 5 х7х 17 х 19x73, 413631505 = 5 х7х 17 х 73 х 89 х 107. 44. Числа Кармайкла, являющиеся произведениями трех простых чисел Изучим числа Кармайкла вида п = Р1Р2Р3, т.е. всевозможные тройки чисел (рьР2,Рз) со свойствами: Pi — нечетное простое, р\ < р2 < Рз, Pi - 1 | Р1Р2РЗ - 1. (8) a. Для искомой тройки (рьР2»Рз) определим отношение г = (р\Р2— — 1)/(рз — !)• Доказать, что г — целое и 1 < г < р\. b. Доказать, что: (PiP2-l + r)pi = г (mod г(р2-1)), (PiP2-l + r)p2 = г (mod r(pi-l)). Вывести отсюда, что р^ — 1 делит (pi — l)(pi 4- г) и, следовательно, Pi + 2 02^ l + (Pi-l)(Pi+r). c. Доказать обратное утверждение. Показать, что множество троек (рьР2,Рз), удовлетворяющих (8) с фиксированными pi, конечно и написать алгоритм, позволяющий находить эти тройки. d. Найти все числа Кармайкла вида 3pg, 5pq} Ipq. Доказать, что 561 — наименьшее число Кармайкла.
Упражнения 537 45. Числа, достигающие границы \ в тесте Рабина Для нечетного целого числа п запишем п — 1 = 2kq и обозначим через Вп множество обратимых элементов 6 по модулю п таких, что п — сильно псевдопростое по основанию 6. a. Просмотреть доказательство теоремы Рабина и проверить, что существует лишь два семейства целых чисел, для которых <р(п) = 4х|Вп|: n = pip2, для р2 - 1 = 2(pi - 1), pi =3 (mod 4), п = Р1Р2РЗ, для pi = р2 = Рз = 3 (mod 4), р. - 1 | п - 1. Второе семейство состоит из чисел Кармаикла, которые являются произведением трех простых чисел = 3 (mod 4). Проверить, что п = 3 (mod 4), Вп = {Ь е U{Zn) | 6^ = ±1} и <р(п) = 4 х |БП|. Привести примеры чисел, принадлежащих этим двум семействам. b. Если п принадлежит первому семейству, то доказать, что п не псевдопростое, а тем более и не сильно псевдопростое, по основанию 2. 46. Равенство а~2~ = ±1 для любого а Е C/(Zn) a. В этом упражнении считаем, что п нечетно. Доказать, что п простое тогда и только тогда, когда Va G U(Zn) выполняется a-5" = ±1 n-l и da G C/(Zn), такое, что a 2 = — 1. b. Доказать, что равенство a~2~ = 1 для любого a G C/(^n) эквивалентно тому, что п — произведение различных нечетных простых простых чисел р,- с р,- — 1 | (п — 1)/2. Среди чисел Кармаикла п, рассмотренных в упражнении 43, найти такие, для которых а~5~~ = 1 для любого a G C/(Zn). c. Пусть для п ^ 2 выполняется а~2~ = ±1 для всякого а Е C/(Zn). Если п непростое, доказать, что а^з" = 1 для любого а Е C/(Zn). 47. Нестабильность оснований в тесте Рабина — Миллера Обозначим через п нечетное целое число, а через Вп С U(bn) множество таких чисел 6, что п — сильно псевдопростое по основанию 6.
538 IV Некоторые методы алгебраической алгоритмики a. Предположим, что п = ра, где р — нечетное простое число. Доказать, что b E Вп тогда и только тогда, когда п — псевдопростое по основанию 6. Какую долю в и{Ъп) составляют такие основания? b. Доказать, что если п сильно псевдопростое по основанию 6, то оно сильно псевдопростое по основанию —6 mod n и по основаниям Ьт mod n. c. Пусть п — 1 = 2kq, где q нечетно, и предположим, что п делится на простое число р = 3 (mod 4). Доказать, что 6 Е Вп тогда и только тогда, когда Ья = ±1. d. Доказать, что Вп — подгруппа C/(Zn) тогда и только тогда, когда п — степень простого числа или п делится на простое число = 3 (mod 4). e. Привести пример целого числа п и оснований 6 и 6' таких, что п — сильно псевдопростое по основаниям 6 и 6', но не по основанию 66'. 48. Количество элементов множества {6 Е C/(Zn) | b*^ = ±1} Если Я — подгруппа группы G, то через [G : Я] обозначим индекс Я в G, т.е. отношение |С|/|Я|. В данном упражнении п = р*1 .. .р"г — нечетное целое число ^ 3. Определим следующие подмножества U(Zn): Нп = {Ь\Ьп-1 = 1}, Kn = {b\b^=±l}, Ln = {b | 6^ = i}. a. Проверить, что Ln G K-n С! Нп и все эти подмножества являются подгруппами группы C/(Zn); найти порядки Нп и Ln. Показать, что [Я„ : Ln] = 2', где t — число таких индексов г, что ^(п— 1) ^ v2(pi -1). Привести примеры, для которых t = 0, t = г. b. Доказать, что [Кп : Ln] = 2 при t = ги [Кп : Ln] = 1 в противном случае. c. Отсюда [Я„ : Кп] = 2Г_1 при t = г и [Я„ : Кп] = 2г в противном случае. Доказать, что Нп = Кп тогда и только тогда, когда п — степень простого числа или t = 0 (т.е. V2(pi — 1) < V2(n — 1) для любого Pi). В последнем случае Нп = Кп = Ln. 49. Оценка количества чисел 6 Е C/(Zn) таких, что 6n_1 = 1 Обозначим через Я„ подгруппу {6 Е U(Zn) \ 6n_1 = 1} (см. упражнение 48). Доказать, что если п имеет квадратный множитель, то \Нп\ ^ ;j • Привести примеры, для которых достигается эта граница.
Упражнения 539 50. Псевдопростые числа Эйлера по основанию 6 Нечетное число п называется псевдопростым числом Эйлера по основанию 6 G U(Zn)} если в U(Zn) 6~2~ = (£), где (£) обозначает символ Якоби, введенный в упражнении 31. Пусть п = р\ .. .рг, где р, — нечетные, не обязательно различные простые числа. a. Доказать строгие включения: { простые числа } С { псевдопростые числа Эйлера по основанию 6 } С { псевдопростые числа по основанию 6 }. b. Положим п — 1 = 2kq} где q нечетно, и допустим, что п — сильно псевдопростое по основанию 6 Е C/(Zn). Если j — наименьшее целое число с Ь2'я = 1, то доказать, что j ^ v2(pi — 1) и 6^ = (—1)*, где t — число таких индексов г, что V2{p% — l)=j (напомним: V2(m) обозначает показатель 2 в разложении на простые множители числа т). Вывести отсюда, что п сильно псевдопростое по основанию 6. Доказать, что обратное утверждение не верно. c. Пусть п = 3 (mod 4). Доказать, что понятия «псевдопростое число Эйлера по основанию 6» и «сильно псевдопростое число» совпадают. 51. Псевдопростые числа по основанию 2, не большие 104 Написать программу нахождения псевдопростых чисел по основанию 2, не больших 104. Какие из них являются псевдопростыми числами Эйлера по основанию 2? Сильно псевдопростыми по основанию 2? 52. Тест на простоту Соловея — Штрассена a. В этом упражнении п — нечетное целое число. Проверить, что множество Еп элементов 6, обратимых по модулю п и таких, что п — псевдопростое число Эйлера по основанию 6, является подгруппой группы U(Zn). b. Доказать, что Еп = и{Ъп) тогда и только тогда, когда п — простое. Доказать, что если п непростое, то |i£n| ^ |C/(Zn)|/2. По-другому: если число п — псевдопростое число Эйлера по большей части оснований (из C/(Zn)), то оно простое. Построить вероятностный тест на простоту, аналогичный тесту Рабина — Миллера.
540 IV Некоторые методы алгебраической алгоритмики 53. Числа, достигающие границы \ в тесте Соловея — Штрассена Пусть п = р*1 .. .р{?г — нечетное целое число. Сохраним обозначения для подгрупп Еп, Ln С Кп С #„ группы U(Zn), введенных в предыдущих упражнениях. Известно, что \Еп\ ^ ^р- или, по-другому, число, являющееся псевдопростым числом Эйлера по большей части оснований, простое. Изучим порядок Еп для того, чтобы получить общий вид чисел с \Еп\ = ^Чр. Пусть п — 1 = 2kq} pj — 1 = 2*'<у, где q, Я\, • • Яг — нечетные, а к = ^(п — 1) и fcj = ^(Pj — 1). Напомним, что Л ^ inf A:j. a. Предположим, что к = inf kj. Доказать, что J2i к =к а» нечетно и что Ln — подгруппа индекса 2 в Еп. Вывести отсюда, что \Еп\ ^ ^^р и привести примеры, для которых эта грань достигается. b. Предположим, что к > inf kj. Доказать, что Еп С Ln и [Ln : i?n] = 2 тогда и только тогда, когда существует такое j, что kj < к и otj нечетно. Вывести отсюда, что |i?n| ^ ^Чр и равенство достигается тогда и только тогда, когда п — число Кармайкла с к > кj для любого j. Привести примеры. 54. Построение п, 6 с 6^ = ±1, но б^з" ф (£) Пусть р и q — два различных нечетных простых числа с ^(р— 1) = у2{я — !)• Если п = pq, то показать, как построить такое 6 Е C/(Zn), что 6^2~ = 1 и (£) = — 1. Привести примеры. 55. Факторизации «а 1а Ферма» Выбор простых чисел является основой метода RSA. Цель этого упражнения — установить алгоритм факторизации чисел п = pq, если р и q близки (и, очевидно, нечетны). a. Допустим, мы располагаем алгоритмом вычисления квадратных корней из целых чисел. Написать алгоритм факторизации п. Оценить его сложность. Указание: записать п как функцию от (p-f q)/2 и {Р — я)/2 (предполагается, что р > q). b. В действительности, при факторизации чисел Ферма можно не вычислять квадратные корни на каждой итерации; тогда две последние десятичные цифры квадрата не произвольны; это позволяет устранять числа, заведомо не являющиеся квадратами. Вместо использования двух последних десятичных цифр можно рассматривать квадраты
Упражнения 541 по модулям некоторых простых чисел и, не вычисляя квадратных корней, эффективно отсеивать не-квадраты. Написать алгоритм, реализующий этот метод. 56. Матрица Смита, формула Чезаро Обозначим через <р функцию Эйлера, а через /i — функцию Мёбиуса; напомним, что J2d\n fi{d) равна 0, если п > 1, и 1, если п = 1. Это означает, что в кольце арифметических функций функция /i и константная функция 1 взаимно обратны (единичная функция это функция Дирака 6\). Определим три матрицы Л, М и S размеров п х п: aij = НОД(г, j), rriij = /i(i/j), если j | г, и 0 в противном случае; Sij = 1, если j | г, и 0 в противном случае. Трансформантной функции h : [l,n] —¥ Ъ называется функция h : [1, п] —У Z, определенная по правилу h(m) = J2d\m Md). a. Доказать формулу обращения MS = SM = Idn. Что означает эта формула? Если Н — матрица Л(НОД(г, j)), то проверить, что матрица S&S диагональна и равна diag(/i(l), /i(2),..., h(n)). b. Доказать, что А = SDtS, где D — диагональная матрица diag(v?(l),.. .,<р(п)). Доказать, что det А = <р(1).. .<р(п) (формула Смита) и А"1 = tMD~1M (формула Чезаро). 57. Определение степеней множителей многочлена над ¥я Обозначим через К конечное поле порядка q, а через т — гомоморфизм Фробениуса х -+ хя какой-либо А'-алгебры. Если Р Е К[Х] и г G N*, то определим под-А-алгебру Берлекэмпа алгебры К[Х]/Р: BP)i = Кег(г' - Id) = {хе К[Х]/Р | т*(х) = х} = = {хеК[Х]/Р\х? = х}. a. Привести примеры, для которых т не инъективно. Проверить, что Bpti действительно под-А-алгебра К[Х]/Р. Объясните, как вычислить ее размерность над К. Предположим, что Р — неприводимый многочлен степени п; что представляет из себя алгебра Врп? алгебра Вр,1? Доказать, что dim/r Bpti = НОД(г, п). b. Используя упражнение 56 главы II, доказать, что формула для размерности остается верной, если Р — степень неприводимого многочлена.
542 IV Некоторые методы алгебраической а лг о ритмики c. Доказать, что если Р и Q — два взаимно простых многочлена, то BpQi ~ Bpti х Bqj. Вывести отсюда, что dim/r Bp\ равна числу неприводимых множителей (различных) многочлена Р. d. Пусть А — матрица Смита порядка п, элементами которой являются НОД(г,.;), a d,- — число неприводимых множителей (различных) 1-й степени многочлена Р. Доказать, что (dimВРЛ, dimBp>2, • • •, dimBp,n) = A(dx, d2,..., dn). Обратная матрица к матрице Смита находится по формуле обращения Чезаро (см. упражнение 56). Вывести отсюда выражение (di, d2,..., dn) через (dimBpti,dimBpt2,...,dimВр)П). 58. Неприводимые множители Хп — 1 над конечными полями Цель данного упражнения — используя технику упражнения 57, получить утверждения, касающиеся степеней неприводимых множителей многочленаХ" — 1 над ¥я, не вычисляя размерностей ядер Кег(г* —Id). В дальнейшем будем считать, что п взаимно просто с q. a. Рассмотрим многочлен Р(Х) = Хп — 1 и базис В = {1,Х,..., Хп_1} пространства ¥я[Х]/(Хп — 1). Доказать, что Хп — 1 не имеет квадратных множителей и что т — автоморфизм. Вычислить т(Х%). Вывести отсюда, что т оставляет без изменения базис В и что действие (г) на В можно отождествить с действием (q) на Ъп ( (г) обозначает подгруппу автоморфизмов, порожденную г, a (q) — подгруппу группы Aut(Zn), порожденную умножениями на q). b. Если дана подстановка а множества [l,d], то рассмотрим эндоморфизм сг пространства F^: e,- ь->> ea(i)- Какова размерность Кег(сг —Id) (рассмотреть сначала цикл)? Доказать, что dimKer(r* — Id) равна числу орбит в Ъп при умножении на q*. c. Объясните, как вычислить число и степени неприводимых множителей Хп — 1 над Fg. Рассмотреть многочлен X12 — 1 над Fg. Что будет, если q = 1 (mod n)? Предположим, что п — простое; каково условие того, что циклотомический многочлен ФП(Х) = (Хп — 1)/(Х—1) неприводим над F9?
Решения упражнений 1. Простые сравнения a. Степени 4 по модулю 9 равны 4, 7 и 1. Теперь достаточно проверить исходное сравнение для каждого из этих трех множителей. b. n обратимо по модулю 7, а потому его порядок делит 6. c. Достаточно доказать, что аъ = a (mod 10). Последнее сравнение выполняется по модулям 2 и 5. 2. Критерии делимости Легко доказать, что если 6=1 (mod d), то число, записанное в системе счисления с основанием 6, делится на d тогда и только тогда, когда на d делится сумма его цифр (действительно, ^щЬ* = £^п, (mod d)). В десятичной системе счисления этому условию удовлетворяют числа 3 и 9. Простые критерии существуют также для чисел, делящих основание (критерий состоит в том, что последняя цифра числа должна делиться на d), и для таких чисел, что 6 = — 1 (mod d) (в этом случае знакопеременная сумма цифр, взятая, начиная с любого конца, делится на d). Следовательно, в десятичной системе простые критерии существуют для чисел 2, 3, 5, 9 и 11. Можно расширить это множество, комбинируя критерии и не достигая при этом большой сложности: 6, 4 и 8 (по основанию 100) и т.д. 3. Автоморфные числа Эти числа удовлетворяют сравнению х(х — 1) = 0 (mod 10n). Поэтому исходная проблема эквивалентна нахождению чисел х, удовлетворяющих этому сравнению по модулям 2П и 5П. Одно из чисел хих-1 нечетно, а потому обратимо по модулю 2П. Следовательно, х{х - 1) = 0 (mod 2П) => х = 0 (mod 2n) или х = 1 (mod 2n). Аналогично, либо х = 0 (mod 5n), либо х = 1 (mod 5n). Следовательно, существуют четыре потенциальных решения, в зависимости от того,
544 IV Некоторые методы алгебраической алгоритмики чему равна правая часть сравнений. Согласно китайской теореме об остатках, достаточно вычислить один из кандидатов, х, другой равен 10п — х + 1. Одно из этих двух чисел имеет п десятичных цифр и, следовательно, является единственно достойным кандидатом. 4. Нумерация Фибоначчи Пусть Fni — наибольшее число Фибоначчи, меньшее п. Тогда Fni+i > п ^ Fni, откуда Fni_i = Fni+i - Fni > п - Fni; и эту процедуру можно повторить. Процесс закончится за конечное число шагов, поскольку в худшем случае мы придем к первому числу Фибоначчи (F2 = 1). Осталось доказать единственность разложения. Для этого по индукции докажем неравенство Fn > Fn_i + Fn_3 + Fn-5 H Ь ^2 или з- Оно верно для ^2 и F3 и, если оно верно для F„, то Fn+2 = Fn+\ + Fn > Fn+\ + Fn_i + Fn_3 + • • • Следовательно, выбор Fni в разложении единственно возможный. 5. Простота чисел (1... 1)ь a. Такое число равно (bk — 1)/(Ь — 1), где к — число его цифр. Если к — составное, то можно записать всегда верное тождество L_^i = *Zl (6m(»-l) + 6m(„-2) + . . . + 1} b. Приведем доказательство, в котором предполагается, что р ф 3. Пусть / — порядок 10 по модулю р. Тогда 1(У — 1 = 0 (mod p). Если 3 обратимо по модулю р (т.е. р ф 3), то последнее сравнение можно разделить на 9 = 10—1, а тогда число, состоящее из / единиц, делится на р. В качестве / можно взять также число р— 1, которое не обязательно будет порядком 10. Например, 7 делит 111111, 11 делит все числа, состоящие из четного числа 1, и т.д. Например, 111111111 = З2 х 37 х 333 667 и 10 имеет порядок 9 по модулю 333 667 и порядок 3 по модулю 37. Наименьшие простые числа, состоящие из 1, это 11, 1111111111111111111, 11111111111111111111111.
Решения упражнений 545 6. Проблема показателя Заметим, что х (и у) принадлежит C/(Zm). To, что х = у5, означает, что группа, порожденная х, порождена также и у = хг, а последнее эквивалентно тому, что г взаимно простое с порядком х. Если s обратно к г по модулю порядка х, то xrs = x (mod т) и ys = x (mod m). Поэтому достаточно, чтобы г было взаимно просто с порядком U(Zm) (который равен значению функции Эйлера у?(га)), и можно взять в качестве s обратный к г по модулю <р(т). т = 11 х 211, <р(т) = (11 - 1) х (211 - 1) = 2 100 = 22 х 3 х 52 х 7 и г = 11 х 13 взаимно просто с <р(т). После вычисления соотношения Безу 1307 х 143 - 89 х 2 100 = 1 можно взять s = 1 307. 7. Применения китайской теоремы об остатках Для первой системы достаточно найти частные решения для (1,0,0), (0,1,0) и (0,0,1). Эти решения соответственно 105, 76 и 120. Следовательно, общее решение есть 105xi + 76x2 + 120х3 по модулю 420. Имеем 42 = 7 (mod 9) и 4 имеет порядок 3 в U(Zg). Значит, 4П = 7 (mod 9) эквивалентно тому, что п = 2 (mod 3). Аналогично, 28 = 3 (mod 11) и 2 имеет порядок 10 в {/(2ц). Следовательно, 2П = 3 (mod 11) эквивалентно п = 3 (mod 10). Поэтому решение — это п = 8 (mod 30). Кольцо ЩХ\ не является кольцом главных идеалов, но 1 • (ЗХ3 + 1) — ЗХ • X2 = 1 и китайская теорема об остатках применима. Общее решение есть (-ЗХ3) • X2 -f (ЗХ3 -f 1) • (2Х +1) = -ЗХ5 + 6Х4 + ЪХ2 + 2Х + 1 по модулю ЪХЪ + X2. 8. Восстановление обратных модулярных величин a. Имеем 1 — аб = 0 (mod n), откуда (1 — ah)2 = 1 — а6(2 — аб) = 0 (mod n2). Если применить метод подъема (от модуля п к модулю п2) к корням многочлена аХ — 1, то получим требуемую формулу. Можно напрямую проверить утверждение, касающееся Ь2(а — 2а6), но можно вычислить (6(2 — аб))2 и заметить, что (2 — аб)2 = 3 — 2а6 (так как в кольце из х2 = 0 следует, что (1 + ж)2 = 1 + 2х, и можно применить это к х= 1-аЬ bZ/u2Z). b. Утверждение, касающееся последовательности (bk)k^o, вытекает из предыдущего пункта. Для п = 2иа = 11 335 можно взять &о = 1 и тогда &4 — обратное к а по модулю 216: &i = (2 - а) mod 22 = 3, 62 = 3(2 - За) mod 24 = 7, &з = 7(2 - 7а) mod 28 = 119, 64 = 119(2 - 119а) mod 216 = 48 503. 35 1017
546 IV Некоторые методы алгебраической алгоритмики с. Из того, что 1 — аЬ = 0 (mod п) и 1 — аЬ' = 0 (mod п'), получаем: (1 - а6)(1 - аб') = 1 - а(6 + 6' - абб') = 0 (mod mi'), а потому b + b' — abb' — обратное к а по модулю пп'. 9. Арифметика по модулю 2я — 1 a. Отображение Z 3 п И on E C/(Za9_i) — гомоморфизм с ядром gZ, откуда следует искомый результат. b. Используя то, что d = НОД(п, т) — линейная комбинация п и т, получим: 6|НОД(ап-1,ат-1) *=> ап = 1(6) и ат = 1 (6) *=> ad = 1 (6) *=> 6 | ad - 1, откуда ad - 1 = НОД(ап - 1, ат - 1). Следовательно, НОД(2п — 1, 2^ — 1) равен 2нод(п'?) — 1 и равен 1 тогда и только тогда, когда НОД(п, q) = 1. Если п' обратное к п по модулю д, то: 1 j_ х (2П - 1) = 2ПП —1 = 2—1 = 1 (mod 2я - 1), откуда 1 -f 2П + 22п + • • • + 2(п'_1)п = 1 + 2п mod * + 22n mod я + • • • + 2(n,-i)n mod 9 (mod 2^ - 1) — обратное к 2П - 1 по модулю 2я - 1. По модулю 32 имеем 2 • 13 = 26, 3 • 13 = 7, 4 • 13 = 20, 5 • 13 = 1, а потому 1 + 213 + 226 + 27 + 220 = 68 165 761 — обратное к 213 - 1 по модулю 232 - 1. 10. Перечислительное упражнение Таких элементов нет ни в Z25, ни в [/(Z40), поскольку их порядки не делятся на 10 (порядок [/(Z40) равен у?(40) = 16). В группе Zion имеется у?(10) = 4 элемента порядка 10, которые имеют вид кп) 1 ^ к < 10 и НОД(А:, 10) = 1. Эти элементы: п, Зл, In и 9п. Это рассуждение можно применить к группам Z5o, 25юо, а также к [/(Z31), которая является циклической группой порядка 30, и к U(Zso) — U№2) х и{Ъът) ~ {/(Z5a) — циклической группе порядка 20. Поскольку 25 = 1 (mod 31), то (—2)10 = 1 (mod 31), и можно проверить, что —2 имеет порядок 10. Остальные элементы порядка 10 в U(Z3i) это (-2)3 = -8, (-2)7 = -25 • 22 = -4 и (-2)9 = -25 • 24 = -16.
Решения упражнений 547 Элемент 2 порождает [/(Z25), поскольку, с одной стороны, 25 = 2 (mod 5) => 25 ^ 1 (mod 25), ас другой, 24 ^ 1 (mod 25). Отсюда получаем, что 4 — элемент порядка 10 по модулю 25. Так как 29 = 4 (mod 25) и 29 = 1 (mod 2), то 29 — элемент порядка 10 в C/(Z5o)- Для любого элемента х Е Ъп х Ъп выполняется пх = 0. Чтобы найти элементы порядка п, нужно избавиться от элементов, удовлетворяющих равенству dx = 0 для d | п и d < п. В Ъп имеется п — <р(п) таких элементов. Следовательно, число элементов порядка ubZJ равно п2 — (п — <р{п))2 = <р(п)(2п — <р{п)). Для п = 10 получается 64 элемента. Группа U(Z\oo) изоморфна и(Ъ±) х C/(Z5a), т.е. G = Z2x Z20. Множество элементов порядка 10 в G это Н — HfcH = {zEG\ 10 z = 0} и Я' = {z в Н | bz = 0 или 2г = 0}. Очевидно, Я = Ъ2 х 2Z20 - ^2 х ^ю и |Я| = 20. Можно проверить, что \Н'\ = 8, а потому \Н — Н'\ = 12. Можно в явном виде построить изоморфизм С/(^юо) — U(b±) x С/(^5з), используя то, что 2 порождает C/(Z5a), a 3 порождает [/(Z4): 51 = 3 (mod 4), 51 = 1 (mod 52), 77 = 1 (mod 4), 77 = 2 (mod 52), и, следовательно, С/(^юо) есть прямое произведение подгруппы порядка 2, порожденной 51, и подгруппы порядка 20, порожденной 77. Так как 772 = 29 (mod 100) и 292 = 41 (mod 100), то элементы порядка 10 в tf(Zioo) суть 51* • 29* и 41* с г = 0,1, j = 1,3,5,7 и к = 1,2,3,4. Элемент 2 имеет порядок 10 в [/(^югз), поскольку 210 = 1 (mod) 1023 (и 2' ^ 1 (mod 1023) для г < 10). Но группа [/(^югз) циклическая, так как 1023 = 210 - 1 = (25 - 1)(25 + 1) = 31 х 3 х 11. Используя то, что С/(^ю2з) ^ U(Z3i) х U(Z3) x U(Zn) ~ Z30 х Z2 x Zi0, можно изучить эту группу достаточно подробно. 11. Сравнение a/cv>(n)+1 = a (mod n) для любого а Если а обратимо по модулю п, то свойство верно. Если р — простое число, делящее п, то оно взаимно просто с п/р и <р(п) = <р{р)<р{п/р). Из того, что рт = р (mod n/p) и рт = р (modp), получаем рт = р (mod n). Следовательно, сравнение верно для чисел, обратимых по модулю п, и для простых делителей п; значит оно верно и для всех целых чисел. Это сравнение не выполняется для некоторого п: например, взяв п = р2, мы не получим ни для какого т > 1 сравнение рт = р (mod р2). 35*
548 IV Некоторые методы алгебраической алгоритмики 12. Целые числа, удовлетворяющие модулярным ограничениям Используя китайскую теорему об остатках, построим таблицу v = [vo, vi,..., v/-i] С — произведение мощностей V*), такую, что Vj mod m\ G Vi, ..., Vj mod mr G К- Упорядочим эту таблицу и построим новую (Cyclic-Increments), индексированную, начиная с 0 (эта вторая таблица может быть получена из первой), следующим образом: [vi — vo, • • • > vi-i — vi-2y vo — vi-\ + m], где m = m\ .. .mr — произведение модулей. Если теперь рассмотрим последовательность (п*)*^о, начинающуюся с щ = t;o, обозначенную как Initial-Value и определяемую через п/c+i = nk+Cyclic-Increments(k mod /), то легко проверить, что Пк = г;^ mod / (mod m). Это приводит к алгоритму: к <— 0; п <— Initial-Value; loop ^-^^^iW^^'^^^l traiter(n); n <— n + Cyclic_Increments(A;); к <— (к + 1) mod Z; end loop; Например, ограничения {1,2,6} по модулю 7 и {3,5} по модулю 8 дают 6 ограничений по модулю 7 х 8 = 56, которые записываются в таблицу [vo < • • • < V5] = [13, 27, 29, 37, 53, 51]. Отсюда получаем: CyclicJncrements=[vi—vQy v2 — vi, v3 — v2y V4-V3, V5—V4, t>o —vs+56]. Остается объяснить построение таблицы [v,-] с помощью китайской теоремы об остатках. С очевидными обозначениями моделируется цикл: for xi в Vi,...,xr e Vr loop x i—chinoismi>...>mr(xi,...,xr); поместить х в v end loop Эффективная реализация этого цикла требует наличия биекции интервала [0,/[ на произведении V\ х V2 х... х Vr (напоминаем, что / — произведение мощностей Vi). При этом предполагается, что каждое К индексируется числами от 0 до U — 1, где U = |V5|. В качестве биективного отображения можно использовать систему со смешанным основанием (/ьЬ? ..., /г): если к Е [0,/i .. ./г[, то разделим с остатком к на/i, к = q2l\ +к\ с 0 ^ к\ < /1, затем то же самое проделаем с q2} которое принадлежит интервалу [0,12 •••'»•[» его делим на 12у и т.д. В итоге числу к Е [0,/i.. ./г[ for к in 0 .. Z — 1 loop Я *— к; for 1 in 1 ..г loop x[i] i— Vi(q mod h)\ end loop; v[k] i— chinoism1 mr(tfi,... ,xr)\ end loop;
Решения упражнений 549 поставим в соответствие r-ку (Ari, Аг2,..., А:г), которая принадлежит искомому произведению. Таким образом, мы приходим к алгоритму, который написан справа. 13. Пары взаимно простых элементов, сохраняющих НО К a. Пары (га, п), (т',п') имеют одно и то же НОК, а потому т'п' = тп/д. Равенство га' = {п/п')(т/д) доказывает, что т/д делит т', откуда и следует искомое утверждение. b. Предыдущий результат показывает, что для определения га' и п' достаточно исключить из п все неприводимые элементы, которые делят одновременно п и т/д. Это в точности те неприводимые, показатель которых в п меньше, чем в га. Отсюда непосредственно следует алгоритм вычисления га' и п', однако его доказательство несколько сложнее. Рассмотрим инвариант цикла точно перед выходом из цикла. Число р, разумеется, неприводимо. Посмотрим сначала, какие можно сделать выводы из этого свойства. Мы заинтересованы в доказательстве его инвариантности. Инвариантное утверждение алгоритма состоит в том, что любой простой множитель п/п'делит т/д. Поскольку при выходе из цикла, п' взаимно просто с т/д, то п/п' удовлетворяет этому утверждению, а следовательно, и все произведение *Щ. Свойства делимости и сохранения НОК тривиальны. Докажем теперь, что свойство инвариантно. При входе в цикл оно верно, поскольку п = п'. После вычисления НОД имеем (n'/d) | n и, если р неприводимо, то nd ( Р | ^г => р | —, по предложению индукции, п' \р\ d => р\ ^} по определению d. На следующем этапе цикла (если мы еще не вышли из него), заменяя в предыдущих формулах n'/d на п', снова получим инвариантную формулу. 14. Сравнение Р(Х) = 0 (mod pn) и целые р-адические числа а. Можно записать P(Y) - P{Z) = (У - Z)SP(Y,Z), где SP(Y,Z) — многочлен с целыми коэффициентами, удовлетворяющий равенству п'<— п;д<— НОД(п,т); loop d <— НОД(п/, m/g); »': \ п щ 4вш. р | п}п\ то р | mf$ exit when d = 1; п' <_ n'/d; end loop; m i— nm/gn ;
550 IV Некоторые методы алгебраической алгоритмики SP{X,X) = Р'(Х). Тогда (у - z)SP(y,z) = 0 (mod pn). Но р не делит Sp{y,z)i так как Sp(y,z) modp = Sp(y modp, z modp) = Sp(x,x) = P'(x) (mod p) и, следовательно, рп делит у — z. b. Первые вопросы не трудны. Приведем начальное 7-адическое разложение у/2 (здесь таким образом обозначен квадратный корень из 2, сравнимый с 3 по модулю 7): уД = 3 4- 1 • 7 4- 2 • 72 4- 6 • 73 + 1 • 74 + 2 • 75 + 1 • 76 + 2 • 77+ 4-4 • 78 4- 6 • 79 4- 6 • 710 4- 2 • 711 4-1 • 712 4- • • • xi =3, х2 = 10, х3 = 108, х4 = 2 166, «5 = 38181, хб = 155 830, ..., xi3 = 19 757775 943. Многочлен X3 - 50Х2 - 2Х + 100 = (X2 - 2)(Х - 50) имеет целый корень 50: переходя к х\ = 1 = 50 (mod 7), получим стационарную последовательность х2 = 1, я,- = 50 для г ^ 3, т.е. 50=14-0-74-1-72 + 0 • 73 4- 0 • 74 4- • • • . При xi = 3 получим такую же последовательность, как для X2 =2 (mod 7n). Тогда Р(у) = Р(х,) = 0 (mod р*), а потому Р(у) = 0; иначе говоря, существует у = х (mod р) такое, что Р(у) = 0. c. Очевидно, это кольцо. Отображение т ►-> т • 1 = (т}т,т,...) является инъекцией Z в Л, поскольку, если т = 0 (mod p') для любого г, то m равно нулю. d. Если х обратимо в Л, то понятно, что х\ обратимо в Ъ?. Обратно, если х\ обратимо по модулю р, то каждое х,- обратимо по модулю р* (так как х,- = х\ (mod р)). Если у,- — обратное к х,- по модулю р*, то последовательность у = {yi)i^i принадлежит А (поскольку обратный элемент единствен) и ху = 1. Имеем: р* | х тогда и только тогда, когда х, = 0 (mod р'). Если х не равно нулю, то через j ^ 0 обозначим наименьшее целое число с р7"1"1 | х. Имеем х = р*х' и х' обратимо (ибо р f х'). Аналогично, если у ф 0, то у = рку* и у* обратимо. Следовательно, ху = р?+кх'г/', не равно нулю. e. Элемент Xi — решение сравнения P(xi) = 0 (mod p), xl+i = Xi - P'(x1)-1P(xi) = х,- - Р/(х,)-1Р(х|) (modp,+1). Так как Р'(Х) = {р-1)Х*>-2, то P'ixi)-1 modp= -х, их|+1 =х{+х{(х%~1-1) = = х?. Следовательно, х, = х\ . Впрочем, можно проверить, что f(x\) = (xi, x^, Xj ,...) — элемент А и что х\ *-ь f(x\) — это инъекция U(ZP) на А.
Решения упражнений 551 15. р-адические разложения дробей a. Имеем 1992 = (30432)5) откуда 1992 = 2 + 3-5 + 4-52+0-53+3-54. -1 = (р-1) + (р-1).р+(р-1).р2 + (р-1).рз + ... разложение — 1. 2 + 3-5 + 1-52 + 3-53 + Ь54 + 3-55 + --- = = 2 + 5(3 + 1-5)(1 + 52 + 54 + .-.) = 2 + iyj = 2-| = i. Если х = ао + а\р + а2р2 + • • •, то целое р-адическое число (р — ао) + (р — 1 — ai)p + (р — 1 — аг)р2 Н имеет обычную форму, когда ао ф 0. Прибавляя это число к х, получим 0, а значит, это —я. Если ао = 0, то достаточно провести аналогичное преобразование, начиная с первого a,- ^ 0. В частности: zl = 3 + 1 • 5 + 3 • 52 + 1 • 53 + 3 • 54 + 1 • 55 + • • • о b. Произведение частичной суммы 1 + 1 • рп Н Ь 1 • р,п на 1 — рп сравнимо с 1 (mod pn(,+1)), а потому: (l-pn)x(l-fbpn-f bp2n-f Ьр3п + •••)= 1 \-рп Если р-адическое разложение числа х почти периодическое, то существуют два таких целых числа а и 6, что х = a + Ьр» + 6р"+Л + 6р"+2Л + ... = a + 6р" —^Ц-, 1 — рА и число х рационально. с. Было бы соблазнительно для всякой последовательности записать 6ao = a (mod р), если только бао = a (mod рЛ), где А обозначает кольцо целых р-адических чисел. Если мы докажем, что рА П Z = pZ, то получим и наше сравнение в Z. Идеал рА П Z не содержит 1 (в противном случае р было бы обратимо в А), а потому pZ С рА П Z С Z и максимальность pZ приводит к нашему утверждению. Тогда: a — бао / о ч т— = р{а\ + a2p + а3р' + •••)> (а — Ьао)/р о откуда: - т-^— = а\ + а2р + а3р + • • • ;
552 IV Некоторые методы алгебраической алгоритмики теперь получаем: . _q-6q0/ _*=**-Ьа1 /ч 6ai = (р), 6а2 = — (р), Р Р Q —bap i Л 6a3 = Р~ (Р), Положим а — бао 2/i — 6ai 2/2 — &<*2 ^ = —7.—' 2/2 = ~ ' Уз = ~ ' Р Р Р если 6а,- = yi (mod р) (удобно положить у0 = а). Отсюда а, = (б-1 ух) mod р, где б-1 обозначает обратное к 6 по модулю р. На множестве // \ х-Ь((Ь-1х) modp) целых чисел определим функцию f(x) = и тогда Р 2/,>i = /(2/0- Имеем \f(x)\ ^ ~-f' ' р * • Для того, чтобы из |х| ^ К следовало \f{x)\ ^ А, достаточно взять такое А', что ^ + ' '^~ ' ^ А, что выполняется при А ^ |6|. Достаточно теперь взять К ^ тах(|а|, |6|), чтобы a G [—А, А] и /([—А, А]) С [—А, А]. Отсюда выводим, что последовательность 2/i почти периодическая, а значит, таковой является и последовательность a, = (6_12/,) mod р. Опытным путем можно проверить, что Ьа0 + У\Р = а, 6а0 + 6aip + у2р2 = а, 6а0 + Ьа\р + 6a2p2 + 2/зР3 = а, что дает 6(ао + а\р + а2р2 Н ) = а. Если применить формулы, использованные в упражнении 14 к многочлену Р(Х) = ЬХ — а, то переходя к решению х\ = б-1 a (mod p) и замечая, что Р'(Х) = b — постоянный многочлен, получим: —Р(х) —Р(х) a,- = P'(xi)"1 -r-^- modp= 6"1 \-^- modp, x,+i = ж.- + a,p\ p' p' и можно положить хо = 0. Итак, P(x + у) = Р(я) + 62/, откуда: -Pfo+i) = -P(*i + a^') = -P(xj) - barf = -P(*,)/p' - 6a,- pi+i pt+i pt+i p ' и получаем те же формулы для ух = — Р(х,-)/р\ Чтобы получить алгоритм, находящий период, используем, например, алгоритм Брента.
Решения упражнений 553 16. Поиск образующих элементов циклических групп Если порядок х равен п, то возьмем я,- = х для любого г. Обратно, если Z{ = x" * , то zf* = 1 и zf' ^ 1; z,- имеет порядок р?*, a порядок z\ ... гГ равен п. Перейдем к алгоритму. В нем функция succ (связанная со структурой порядка группы) позволяет пробежать G и записать р, и а, в таблицу. На этом этапе имеем три переменных д} j и х. Переменная j — это индекс в таблице [pi, • • • > Рг], указывающий, что элементы порядка р%к для к < j были найдены и произведение этих элементов записано в д. Начиная с х, попытаемся получить элементы (вида хп/р»'), имеющие порядок, не полученный ранее. Для этого используется второй индекс, пробегающий отрезок \pj,.. ., рг]. В случае успеха изменяется значение переменной д и ставший ненужным порядок (р,, а,) заменяется на (Pj,a,), который Алгоритм 10. Поиск еще не был получен. образующих в циклической группе Несколько улучшений, необходимых для построения алгоритма. В действительности вычисление хп1рх включает в себя вычисление хп/р* *, но при этом значение первого числа (вероятно) в дальнейшем не понадобится. Поэтому процедуру вычисления проводят в два этапа: сначала вычисляют £n/p»f, а затем возводят результат в степень pf*"1. На практике вместо таблиц [pi,... ,рг] и [сц,..., аг] удобнее использовать таблицы [tii,..., tir] и [vi,..., vr] с Щ — pf *_1 и V{ = n/pf*. Тест xnlpi = 1 сводится тогда к присваиванию у <— xv% и проверке уи% = 1. Конечно, присваивание д <— д х хп/р»' заменяется на д <— д х у, а команда (p,,c*i) V—$ {pj,(Xj) на (щ,ы) <—$ {ujyVj) и даже на (щ,ы) <— (uj,vj). 17. Вокруг теоремы Лагранжа а. Предположим, что G коммутативна. Так как у »-> ху — биекция G на себя, то Цу£в у = Цу£в ху = хп Цу£в у, откуда хп = 1. В общем д <— е; х <— succ(e); j i— 1; Main-Loop : loop for i in j .. r loop да^|^%Щ^|-( \fxn/p> ф 1 then д<—дххп'р**; exit Main-Loop when j = r\ (Рг,<*г) £3 (Pj,<Xj)\ J<— j + 1; end if; end loop; x i— succ(a:); end loop Main.Loop; return g\ g «— образующий О
554 IV Некоторые методы алгебраической алгоритмики случае, для произвольной подгруппы Я, отношение Нх = Ну — отношение эквивалентности на множестве смежных классов Нх имеющих одну и ту же мощность |#|. Поэтому \Н\ делит |G|. b. Группа G обратимых по модулю ап — 1 элементов имеет порядок <р(ап - 1). Так как ап = 1 (mod ап - 1) и а{ £ 1 (mod an - 1) для О < г < п, то порядок а равен п; значит, п делит <р(ап — 1). 18. Утверждение, обратное китайской теореме об остатках a. Пусть Q — мультипликативная группа, an — произведение порядков множителей: п — порядок Q. Пусть т — НОК порядков множителей. Тогда т делит п и ит = 1 для любого и Е Q. Если О, циклическая, то т = п, что доказывает, что порядки множителей взаимно просты. Кроме того, каждый множитель является подгруппой (или факторгруппой) Q, а потому цикличен. Обратное утверждение хорошо известно. b. Для указанных п группы U(Zn) циклические. Обратно, пусть р"1 .. .р%к — разложение на простые множители числа п. Множитель и(Ъ °г) цикличен тогда и только тогда, когда р,- нечетно или р,- = 2 и а,- = 1,2. Порядок этого множителя {pft~1{pi — 1)) всегда делится на 2, кроме случая р,- = 2 и а,- = 1. Отсюда и следует результат (поскольку порядки множителей должны быть взаимно просты). 19. Замечание, касающееся конечных абелевых групп Если Qi и ^2 — две циклические группы, то Q2 может быть представлена как подгруппа (или факторгруппа) Q\ тогда и только тогда, когда IQ2I делит |Qi|. Известно, что конечная абелева группа изоморфна произведению циклических групп ЪПх х • • • х ЪПг. Для любого а ^ 2 арифметическая прогрессия Ara-f 1, к = 1,2,..., содержит простое число (частный случай теоремы Дирихле). Тогда определим г простых чисел pi,.. .,pr: pi = 1 (mod ni), р2 = 1 (mod n2pi), ..., pr = 1 (mod nrpi.. .pr-i). Все простые числа p,- различны и n,- | p,- — 1. Циклическую группу Zni можно представить как подгруппу (или факторгруппу) группы C/(Zp.), а потому группа Zni x • • • х Znr представляется как подгруппа (или факторгруппа) группы U(ZPl) x • • • х U(ZPr) ^ U(Zn) с п = р\.. .рг.
Решения упражнений 555 20. Замечание о vi(n — 1) при нечетном п Имеем п, = 1 (mod 2к) для г = 1,..., г, а потому п = 1 (mod 2k). Кроме того: щ = 1 (mod 2fc+1), если ^(п,- — 1) > Л, п.- = 1 + 2* (mod 2*+1), если v2(n,- - 1) = Л, откуда п = (1 + 2кУ (mod 2fc+1), где t — число таких индексов г, что ^(я,- — I) = к. Элемент 1 + 2к имеет порядок 2 в C/(Z2fc+i), а значит, п = (1 + 2кУ mod 2 (mod 2fc+1), откуда и следует наш результат. 21. Простые числа вида 4А: + 1 Предположим противное: существует конечное множество таких простых чисел pi, ..., рП} и рассмотрим число а = 4(р\.. .рп)2 +1. Если простое число q делит а, то оно отлично от всех р,, но при этом явно — 1 является квадратом по модулю q и, следовательно, число q имеет вид 4к + 1; пришли к противоречию. 22. Некоторые свойства чисел Ферма a. Легко доказывается, что Fn+i — 2 = Fn(Fn — 2); и по индукции Fn+* - 2 = Fn+fc_iFn+fc_2...Fn+i^n(^n - 2). Следовательно, HOA(Fn,Fn+fc) = НОД(^„,2) = 1. b. В Zp элемент 2 имеет порядок 2n+1 (ибо 22" = -1). Значит, 2n+1 делит порядок группы C/(ZP), равный р— 1. Согласно дополнительному квадратичному закону взаимности (р = 1 (mod 8) при n ^ 3) 2 является квадратичным вычетом по модулю р. Порядок 2 равен 2n+1, а порядок квадратного корня из 2 равен 2П+2. По аналогии с предыдущими рассуждениями 2П+2 делит р — 1. c. Случай F±. Простой делитель р числа имеет вид 64к + 1, но единственное число такого вида, меньшее л/65537, есть 193 и оно не делит i<4. Случай Fs- Делитель F5 имеет вид 128А:+ 1. Поищем простые числа такого вида: 129 делится на 3, 257 — число Ферма, а потому взаимно просто с F$, 385 непростое, 513 делится на 3. Число же 641 является простым, а потому оно хороший кандидат в делители F5. И действительно, F5 = 4 294 967 297 = 641 х 6 700 417 — разложение F5 на простые множители.
556 IV Некоторые методы алгебраической алгоритмики 23. Числа Ферма и критерии Пепина a. Порождающий элемент группы обратимых очевидно не является квадратичным вычетом. Однако, если х не квадратичный вычет, то — 1 = (£) = х2^- (mod p) и, поскольку порядок х делит степень 2, он в точности равен р— 1. b. Согласно квадратичному закону взаимности, если р ф 5, то 5 — квадратичный вычет по модулю р тогда и только тогда, когда р — квадратичный вычет по модулю 5. Однако р = 42" +1 = 2 (mod 5) и 2 не является квадратичным вычетом по модулю 5. Аналогично, при р ф 3 число 7 является квадратичным вычетом по модулю р тогда и только тогда, когда р — квадратичный вычет по модулю 7, а квадратичными вычетами по модулю 7 будут 1, 2 и 4. c. Предположим, что выполнено сравнение. Имеем Зр_1 = 1 (mod p). Порядок 3 по модулю р равен в точности р — 1; и кольцо Zp, следовательно, является полем. Обратно, предположим, что р — простое. Докажем, что 3 не является квадратичным вычетом по модулю р. Заметим, что р = 2 (mod 3) и р не квадратичный вычет по модулю 3. Следовательно, как и в предыдущих вопросах, 3 не квадратичный вычет по модулю р (конечно, за исключением случая р = 3). 24. Вычисление квадратных корней a. Имеем: а4 + 1 = (а2 + 1)2 — 2a2 = 0, элемент а обратим и потому (a2 + 1)/а = а — а3 — квадратный корень из 2. Запишем 17 = 24 + 1, 257 = 44 + 1, 41 = (З4 + 1)/2, 241 = (84 + 1)/17, 1201 = (74 -f 1)/2 и 3281 = (94 + 1)/2 и теперь без труда находим квадратные корни из 2. Это соответственно 6, 60, 24, 22, 336 и 720. Последнее рассмотренное число, 3281, непростое: 3281 = 17 х 193. b. Если существует такой а, что а4 +1 = 0, то, как мы видели, существует и \/2- Еще проще доказать, что существует у/^Л. Обратно, предположим, что существуют оба корня, и изучим уравнение а4+1 = 0. Это уравнение обычным способом разлагается на множители (а2 + а\/2+ +1)(а2 — ау/2 + 1) = 0. Докажем, что оба эти уравнения имеют решение. Возьмем первое: его дискриминант равен —2 и, по предположению, существует квадратный корень из —2. Следовательно, одно из решений есть (—\/2-f у/—5)/2 (не забываем, что 2 обратимо по предположению). Итак, мы нашли элемент а и при этом не использовали предположение о целостности кольца.
Решения упражнений 557 Согласно китайской теореме об остатках, достаточно найти такие корни по модулю 17 и по модулю 193, которые являются простыми (между прочим, 193, как и 17, является суммой двух квадратов). Рассмотрим теперь конечные поля, порядок которых сравним с 1 по модулю 8, и которые имеют, следовательно, четыре корня четвертой степени и восемь корней восьмой степени из 1. Аналогично, имеется 2 квадратных корня из 2. Следовательно, по модулю 3281 существует 16 корней четвертой степени из 1, 64 корня восьмой степени из 1 и 4 квадратных корня из 2. с. Если мы работаем в поле Zp, содержащем такой элемент а, что а4 -f 1 = 0, то порядок элемента а равен 8 и р = 1 (mod 8). В этом случае нам известно, что существуют квадратные корни из —1 и 2. В предыдущем пункте они выражены в явном виде. Если теперь р = 2</ + 1 = 3 (mod 4), то можно записать магическую формулу Шенкса: / а±1\2 _„ / а±1\2 _£-! / i±l\2 e=± и = [и 2 ) и ч = [и 2 ) и 2 = (и 2 ) и 2 , в которой последний множитель является символом Лежандра для и и равен ±1. Следовательно, если вычислим квадратный корень из ц(?+1)/2, то получим один из вариантов: результат равен и и можно найти квадратный корень из tx, результат равен —и и не существует квадратного корня из и (ибо символ Лежандра равен —1). 25. При каком условии —1 является m-й степенью? Пусть d = НОД(т, <р(ра)). В этом случае —1 есть m-я степень в циклической группе {/(Zpa) тогда и только тогда, когда (—l)^(Pa)/d = 1, т.е. когда <p(pa)/d четно. Последнее эквивалентно тому, что mf(v2{<p{pa)),v2{m)) < v2(<p{pa)) или, иначе, v2{m) < v2(<p(pa)). Но <р(ра) = ра~1{р— 1) и v2((f(pa)) = v2(p— 1), откуда следует результат. Дадим более явное решение. Пусть <р(ра) = 2kq, m = 2hr с нечетными q и г. Существует такой х, что х * = — 1 (такие х образуют дополнение к подгруппе всех квадратов). Если h < к, то— 1 = (х2 q)2 r. Обратно, если —1 = хт, то (хг)2 = —1; это доказывает, что 2Л+1, порядок хг, делит ^(Ра)> а значит, h < к. 26. Квадратичные вычеты по модулю некоторого числа а. В одну сторону это очевидно. Докажем в другую. Пусть х, у таковы, что х2 = a (mod n), у2 = a (mod m). Применяя китайскую
558 IV Некоторые методы алгебраической алгоритмики теорему об остатках, получим, что существует такое целое число г, что z = х (mod n), z = у (mod m). Тогда z2 = х2 = a (mod n), z2 = у2 =а (mod m), а потому г2 = a (mod nm) (разность z2 — а делится напит, а значит, и на nm). b. Можно записать х2 = а + qn с q E Z. Сравнение (х + уп)2 = х2 + 2хуп + у2п2 = а + (q + 2xt/)n (mod n2) показывает, что для сравнения (х + уп)2 = a (mod n2) достаточно доказать, что q + 2ху = 0 (mod n). Элемент 2х обратим по модулю п (по предположению) и сравнение q + (2х)у = 0 (mod п) имеет решение у = —g(2x)_1. Отсюда получаем, что а является квадратичным вычетом по модулям п2, п4, п8 ..., а потому а — квадратичный вычет по модулю любой степени п. c. Пусть х — решение сравнения х2 = a (mod 2k) и поищем решение того же сравнения по модулю 2fc+1 в виде х + j/2*"1. Так как 2(А: — 1) ^ Л + 1, то (х + 2/2*"1)2 = х2 + Х2/2* + 2/222(fc-1) = х2 + xy2k (mod 2fc+1), откуда (х + у2к~х)2 = а + <j2fc + ху2Л (mod 2fc+1). Поэтому достаточно взять у такое, что q + xy четно, а это можно сделать, взяв у той же четности, что и q (х нечетно). Отсюда заключаем, что а — квадрат по модулю 2к ^ 8 тогда и только тогда, когда а квадрат по модулю 8. Группа обратимых по модулю 8 элементов есть {1,3,5,7}, а подгруппа квадратов — {1}. 27. Элементарное вычисление (:~) b. Дискриминант трехчлена X2 + X + 1 равен —3 и этот трехчлен, следовательно, имеет корень хо в Z/pZ. Тогда этот корень хо удовлетворяет следующим условиям: хо ф 1, xg - 1 = (хо - l)(xg + хо + 1) = О, а значит, хо — элемент порядка 3 в группе обратимых по модулю р элементов. Поэтому 3 делит порядок этой группы, т.е. 3 | р— 1, что и требовалось доказать. c. Если и порождает группу C/(Z/pZ), то хо = uAp-1)/3 — элемент порядка 3. Многочлен X2 + X + 1 имеет корень хо, а его дискриминант равен —3 и является квадратом: — 3 = (2хо + I)2. В действительности
Решения упражнений 559 речь идет о хорошо известном равенстве j = (—1 + л/~5)/2, где j — кубический корень из 1. Можно не использовать то, что и(Ъ/рЖ) циклическая, а рассмотреть многочлен х(р-1)/3 — 1 с коэффициентами из Ъ/рЪ. Поскольку степень этого многочлена строго меньше р — 1, то существует элемент у Е и(Ъ/рЖ), не являющийся корнем Х^"1)/3— 1. Элемент х0 = t/?"1)/3 тогда имеет порядок 3 ... 28. Другой способ вычисления (^) Пусть р = 1 (mod 4). Можно записать произведение тг = 2^~(Щ^)\ в виде двух подпроизведений, имеющих по £=-^ множителей каждое: ,г = 2.4.6...(р-3).(р-1) = (2.4.6...^)х(Р±^...р-1). Не изменяя значение по модулю р, заменим х на — (р — х) во втором произведении: Проделаем то же самое при р = 3 (mod 4), но на этот раз возьмем первое произведение из ^- множителей, а второе из ^-: , = (2.4...^1)х(£±1...р-1)| Проведя вычисления, аналогичные проведенным выше, получим (|) = (—1) * . Можно проверить, что, используя дополнение к квадратичному закону взаимности, мы получим тот же результат. 29. Прямые следствия закона взаимности Используя квадратичный закон взаимности, видим, что 3 — квадрат по модулю р <=> р=2 или р = ±1 (mod 12), 5 — квадрат по модулю р <=> р=2 или р = ±1 (mod 5), 7 — квадрат по модулю р <=> р=2 или р = ±1,±3,±9 (mod 28).
560 IV Некоторые методы алгебраической алгоритмики 31. Символ Якоби a. Искомая сложность — порядка C?(logp) операций по модулю р. b. Предположим, что (^) = 1 для всякого а, обратимого по модулю 6. Пусть 6 = р^1 .. .p%k — разложение на простые множители. Можно найти такой х Е и(Ъъ), что х — квадратичный невычет по модулю р\ и х = 1 (modp,) для г ^ 2. Тогда (|) = (— l)ai = 1, откуда ос\ — четно. Аналогично, все а; четны и 6 является квадратом. Обратное очевидно. c. Докажем, что (=£) = (—1)~. Если р\ .. .рг — разложение на простые множители нечетного числа 6, то, по определению, (^) — (—1)г с х = Y^%=\ ^Т~- Если р и q — два нечетных числа, то ^f^ = ^у^^у^ (mod 2) (заметим, что (р — l)(q — 1) делится на 4), а значит, Х^=1 ^f1 = Pl I*'1 (mod 2). Отсюда получаем, что (=£) = (-1)^. Аналогично, используя то, что ^ g = £-^— ^-^— (mod 2) для не- 62-i четных ри q ((р2 — l){q2 — 1) делится на 64), докажем: (|) = (-1)-~. Для доказательства закона взаимности запишем а = р\...рГ1 Ь = q\...qs. Можем считать, что а и 6 взаимно просты и, следовательно, pi ф qj. 2 2 Z-r 2 А-г 2 . о-1 6-1 = (-1)-' =(-l)' = 1 J = 1 =(-l) — — . . , (a-l)(b-l) d. Тождество (|) = ( ° )(—1) * , применимое к нечетным числам а > 6 ^ 3, наводит на мысль о том, что символ Якоби можно вычислить с помощью последовательности евклидовых делений. Надо все-таки то, что 6 mod а не обязательно останется нечетным. В этом случае используем следующее: (£)-<-»"*©• Множитель (—1)*~~8~~ равен —1 тогда и только тогда, когда к нечетно, а 6 mod 8 = ±3.
Решения упражнений 561 (а, 6) «— (u mod v, v)\ J +- -i; loop 0 <£ а < &$ & негаегаое J> 3 я- (|) J ш if а = 0 then return 0; if а четное then к <— 0; loop а <— а/2; к <— к + 1 end loop; end if; ; exit when a <•»■ нечетное if к нечетное and 6 mod 8 = ±3 then J i end if; 0 < s < Ь> <** * w«mm, if а = 1 then return J\ *>s«$J«<3 end if; if a mod 4 = 3 and 6 mod 4 = 3 then J i J; (a, 6) «—(6 mod a, a); end loop; -J; end if; end if; Алгоритм 11. Вычисление символа Якоби (£) («€Z,d — нечетно и ^ 3) Указания: присваивание (а,6) <— (umodv,v), возникающее в начале алгоритма 11, делает положительным первый операнд а вычисляемого символа Якоби; последующие операции обеспечивают то, что a остается ^ 0. Приведем требуемые вычисления: /713 \ _ /1009\ _ Л Vi ооэ; V 713 у ~ v 009 - 713 713 296 713 К 23 • 37 713 - ( 2 \ (Z7\ - (Z7\ - (11Ъ\ - (71Z ~ 19 " 3Л - fl°" ~ \713/ \713/ ~ V713/ ~\ 37 / \ 37 ) ~ \37 а потому 713 — квадрат по модулю 1009 (фактически 2102 = 713 (mod 1009)). Число 713 непростое: 713 = 23 • 31, и аналогичные вычисления дают, что ни 23, ни 31 не есть квадраты по модулю 1009. 32. Символ Якоби: подход Золотарева а. Достаточно рассмотреть модель цикла (123.../): инверсиями являются пары (г,/) с г < /, но можно также записать (123.../) в виде произведения транспозиций (12)(23)...(/ — 1)(/). В любом случае знак этого цикла равен (— I)'"1. 36-1017
562 IV Некоторые методы алгебраической алгоритмики Достаточно рассмотреть случай s = 2 и такое упорядочение, что I\ < h- Тогда имеем объединение непересекающихся множеств Inv^ = Inv^j Ulnv^, откуда и следует результат. Аналогично, рассматривая инверсии, получим е(а х г) = £г(сг)1-/1£г(т)1/1. b. В обоих случаях достаточно посчитать число инверсий. c. Отображение х —¥ —х инволютивно. В Ъп (а так же в абелевой группе порядка п) с нечетным п это отображение имеет неподвижную точку 0 и имеет знак (—1)~5". Если п четно, то имеется две неподвижных точки (Ои|)и знак равен — (—1) ?. В обоих случаях это получается (л-1)(л-2) „ из (—1) 2 у что можно найти, замечая, что отображение х »-> — х меняет порядок Ъп — {0} на противоположный. Отображение х ь->> х + 1 — цикл длины п, и его знак равен (—l)n_1. Отображение х у-¥ х + г — г-я степень отображения i^i + l,a потому его знак равен (—1)г(п-1). d. Первое свойство тривиально, второе следует из тгпп/>т = тгп>т о тгп/>т. Вычисление (—1|т) сводится к изучению отображения х ь->> — х. Наконец, если т = 2q + 1, то умножение на 2 в Zm дает подстановку: /0 12 gg+l? + 2 2? \ V0 2 4 2g 1 3 2q-l)y число инверсий которой равно 1 + 2 Н Ь 9 = ^^ = т8~1. Если р — простое, то формула е(кП)Р) = Yli<j *п*У)2* может быть вычислена в Ъ? (поскольку это поле, то можно делить на любой ненулевой элемент). По модулю р получаем е(пП)Р) = Yli<j ^гр = Yli<jn = п 2~ = п^~• Можно было также рассмотреть циклы при умножении на п. Докажите, что £(тгп>р) = (—1)^г"1^Ет~, где г — порядок п по модулю р, что дает (—1) г . Если г четно, то хз = — 1 и, следовательно, х з = (хз) 7 = (—1) 7 . Если г нечетно, то х = (хГ2 )2, а потому х 2 = 1 = (—1) 7 . e. Подстановка а оставляет на месте множество [0,п — 1] х {j}, a сужение сг, подстановки сг на [0, п — 1] х {j} — отображение г »-> mi + j группы Zn на себя. Поскольку знак сдвигов равен 1 (п и т нечетны), то £(<Tj) = £(тгт)П) = (т\п) и, следовательно, £(сг) = (m|n)m = (m|n). Доказательство для т аналогично. Если обозначим через Ch : [0, п — 1] х [0, m — 1] —¥ [0, пт — 1] китайский изоморфизм, то Ch(cr(i, j)) = mi 4- j и Ch(r(i, j)) = nj + i, что дает Ch о г = в о Ch о сг,
Решения упражнений 563 где в : [0,nm — 1] —> [0,nm — 1] — инволюция, которая изменяет нумерацию (0(mi + j) = nj + г). Отображение в сопряжено с отображением, которое переставляет две структуры лексикографического упорядочения множества [0,п — 1] х [0,т — 1], а потому его ранг равен / ,п(п-1) m(m-l) л-^1. m-1 n(n-l) m(m-l) (-1) 2 2= (—1) 2 2 . Отсюда е(т) = (—1) з 2 £(сг), что и требовалось доказать. f. (2|m) можно вычислить, используя соотношения (2|m+ 2) = (-m|m-f 2) = (-1)а£1(т|т + 2) = = (-l)^(m + 2|m) = (-l)^(2|m) и применяя индукцию по т. Мультипликативность символа Золотарева по второму аргументу следует из мультипликативности по первому и закона взаимности. Символ Золотарева (п\т) и символ Якоби (^) совпадают при простом т (благодаря критерию Эйлера), а значит, совпадают при любом т. 33. Некоторые простые числа, для которых 2 — примитивный корень Порядок элемента в группе U(bp) делит р — 1 = 4qy а так как q — простое, то этот порядок принадлежит множеству {2,4,g,2g,4g}. Но с другой стороны, не выполняется ни 24 = 1 (mod p) (в противном случае р = 3 или р = 5, что невозможно ввиду ограничений на р), ни 22q = 1 (mod p), поскольку 22* = 2^ = f-J = -1, ибо р = 5 (mod 8), а поэтому порядок элемента 2 не делит ни 4, ни 2<?, а значит, равен 4q. Аналогично, 2я = 2 з = (2) = _i? ибо р = 3 (mod 8). Порядок элемента 2 делит 2q и не делит q> а значит, этот порядок равен 2q. Имеем (-2)^ = -2* = -2^ =-(!)= -1, поскольку р = 7 (mod 8). Таким же образом делаем вывод относительно —2. 34. Вычисление длины периода: метод Флой да а. Очевидно, хп = х*т тогда и только тогда, когда п ^ /i и п = О (mod А) (/1 — индекс вхождения в период, А — длина периода), поэтому в качестве п достаточно взять первое число, кратное А и не меньшее /i. Если хт = Х2т, то m ^ /i и m Е 0 (mod А), а значит, п = т (mod A), откуда xn = xm. 36*
564 IV Некоторые методы алгебраической алгоритмики Ь. Пусть S — подгруппа всех функций из F в F, а Ф такая функция, которая элементу g E S ставит в соответствие функцию g о / £ S. Применим предыдущий результат к функции Ф с начальным членом последовательности Ыр: существует такое п, что Фп(1<1^р) = Ф2п(1<1^), т.е. fn = f2n. 36. Линейные генераторы: изучение частных случаев a. Имеем хп = (anxo + Sn(a)b) mod m, где Sn(a) = 1 + <Н han_1. Если п = supa,-, то an = 0 (mod m), a потому xn = xn+i- Индекс » вхождения меньше или равен max(a,). b. Очевидно, хп = Sn(a) и, следовательно, (а — 1)х„ = ап — 1. Поскольку а обратимо по модулю т, то существует такое п, что ап = 1, а это эквивалентно тому, что хп = 0 = £о (так как a — 1 обратимо по модулю т). Откуда и следует искомый результат (индекс вхождения в период равен 0). Для двух примеров соответственно выполняется А = 4 (порядок 8 в [/(Sis)) и А = 18 (2 порождает [/(^27))- d. Используя китайскую теорему об остатках, соответственно находим А = 6, А = 20, А = 10 и А = 6. 37. Линейные генераторы: частные случаи аффинных преобразований a. Из г/n+i = ауп +1 и ж. = ш/,+ /? получаем xn+i = axn+a+/?(l-a). Равенство t/o = 0 дает /? = хо, откуда a = 6 + хо(а — 1). b. Известно, что ау = 0 (mod m) <=> НОД(а,т)2/ = 0 (mod m) <=> 2/ = 0 (mod т/НОД(а,т)). Если т' = т/НОД(а,т), то у?(у) = ¥>{z) (mod m) тогда и только тогда, когда у = z (mod m'). Следовательно, последовательности (хп)п^о и (2/п)п^о имеют одну и ту же длину периода и одинаковые индексы вхождения в период. х„+1 = 12xn -f 7 mod 45, хо = 1 —У а = 18, т' = 5, г/n+i = 2t/n + 1 mod 5, xn+i = 12xn + 3 mod 45, xq = 2 —У а = 25, rri = 9, 2/„+i = 3t/„ + 1 mod 9, xn+i = llxn + 10 mod 45, xq = 1 —>• ct = 20, m' = 9, t/„+i = 2j/n + 1 mod 9.
Решения упражнений 565 38. Порядок элемента 1 + р в U(Zpr) Длина периода последовательности (хп)п^о не что иное, как порядок 1 + р в C/(Zpr). Но последовательность (2/п)п^о имеет ту же длину периода, что и х. Итак, а = р иу следовательно, т' = рг~1. Можно применить к последовательности (уп)п^о теорему 47: эта последовательность максимального периода (рг_1). То, что 1 + р имеет порядок рг_1 в C/(Zpr), связано с тем, что подстановка у ь-^ (1 + р)у + 1 является ЦИКЛОМ В Zpr-i. 39. Последовательности, порохе денные сравнениями Единственный случай, который представляет проблему, — это р = 2, а = 3 (mod 4); случай а = — 1 (mod 2n) прост, поскольку x^+i = —££ + 1, а значит, х*+2 = я*. Рассмотрим случай а ^ —1 (mod 2n). Поскольку х —>• ах + 1 — перестановка из Z2n, то индекс вхождения в период равен 0, а поэтому, длина периода — это наименьшее число А с х\ = хо. Напомним, что хк = Sk(a) и хо = 0. Итак, записывая ая — 1 = Sq(a)(a — 1), имеем: Sq{a) = 0 (mod2n) *=> а* = 1 (mod 2n+1), откуда А = q> где q — порядок а в C/(Z2n+i). Предположение а = 3 (mod 4)иа^-1 (mod 2n) приводит к тому, что q — удвоенный порядок а в C/(Z2«). 40. Линейные генераторы: синтез Изменяя модуль т при помощи аффинного преобразования (упражнение 37), можно считать, что 6 = 1 и хо = 0. Теперь можно использовать китайскую теорему об остатках, которая сводит модуль к степени простого числа, а затем — таблицу из упражнения 39. Для приведенного примера а = 130, т' = 315/НОД(130,315) = 63, 2/n+i = 16уп + 1 mod 63. Длина периода у по модулю 7 равна 3 (так как 16 = 2 в Z7 и 2 имеет порядок 3), длина периода у по модулю 9 равна 9 (16 = 1 (mod 3)), а значит, длина периода у (а потому и х) равна 9. 41. Многошаговые линейные генераторы а. Полезно рассмотреть отображение в : Fk —¥ Fk > заданное следующим образом: $(ai, а2,..., а*_1, ак) = (а2, а3,..., akyf{ax, а2,..., а*)).
566 IV Некоторые методы алгебраической алгоритмики Понятно, что существует биекция между последовательностями (яп)п^о, значения которых лежат в F (и которые определяются при помощи функций /), и последовательностями (Хп)п^о в Fk (определенными при помощи одношагового генератора в). Это доказывает, в частности, ограничения, касающиеся длины периода. Соображения, используемые в теории графов (эйлеровы циклы), позволяют доказать, что для всякой пары (kyq) существуют Аг-шаговый генератор на множестве [lyq]y имеющий период длины qk (см. [18]). Например, для q = 3, к = 4 это означает, что существует последовательность длины З4 = 81, т.е. (хо, х\у х2,..., xgo), такая, что 81 тройка (xi,£i+i,£i+2) (индексы по модулю 81) различны. Пусть 6 — фиксированный элемент, отличный от а. Определим g : Fk —¥ F следующим образом: #(6,а,а,... , а) = а, д(ауауау.. . ,а) = f(ayayay.. . ,а) и д = f в остальных случаях. Тогда д определяет последовательность, длина периода которой равна qk (группа символов (а,ауау..., а) появляется сразу после группы (6,ауау...,а)). Ь. Хотя матрицы А и В имеют те же самые алгебраические свойства (позже будет доказано, что они сопряжены в основном кольце), предпочтительнее выбрать В в виде циклической матрицы. Вычисление характеристического многочлена производится непосредственно (для А или В). Например, разлагая по последней строке матрицу ХЫк -А = ( X -1 0 0 \ : X : 0 0 -10 0 0 0-1 \—ао -ai -a/c-2 X — ak-i/ получим характеристический многочлен: (_l)*-i (_ao(_i)*-i + ai(-l)*-2X - а2(-1)*"3Х2 + + ...+ (_l)*-i(X_a,_jX*-i)) т.е. -а0 - ахХ - а2Х2 ак.хХк~1 + Хк = Р{Х). Теперь понятно, что вектор е\ порождает Ев, ибо е2 = Ве\ ..., ек = Вк~1 • ei. Ясно также, что Вк • е\ •=. а$е\ + Ь a^-ie^, что записывается как Р(В) • ei = 0, откуда Р(В)(В{ • ех) = 0, а потому Р(£) = 0: фактически мы доказали теорему Гамильтона — Кэли для матрицы Фробениуса (или транспонированной к ней). Легко установить, что Р является и минимальным многочленом.
Решения упражнений 567 То, что ек порождает Л, доказывается немного проще: Аек — еь-i + afc-ie*, откуда e*_i G A' • е* ф X • Л • е*, затем е*_2 G А • е* ф К • Л • е*ф#-Л2-е*. Нетрудно доказать, что {/ь/г,... ,Л} = {е*, Л • е*, Л2 • е*,..., Л*"1-^}— базис £. В этом базисе матрица Л является матрицей Фробениуса. В действительности это матрица В\ Достаточно, например, принять во внимание то, что Л и В — транспонированные одна к другой и имеют один и тот же характеристический многочлен. Но можно это увидеть, транспонируя соотношение Вк — ак-\Вк~1 + Ь ао, что дает Ак = ак-\Ак~х Н Ь ао и Bfk = Bkfx= afc-i Д-i + • • • + ао/i. Следует отметить, что мы не пользовались тем, что К — поле! c. Множество {R e K[X] \ R{A) ekeF} = {Re K[X] \ R(A) • х е Fy Vx G Е} является идеалом в А[Х], содержащим Р. Единственный унитарный порождающий его многочлен Q является решением задачи. d. Для Х{ = AxXq и Xj = А^Хо предположим, что X, = Xj. Матрица Л обратима (det Л = ±ао не равен нулю, так как Р(Х) неприводим), а значит, А^~%Хо = Х0. Множество таких X Е Kkу что А*~ХХ = X, — подпространство, инвариантное относительно действия Л и содержит ненулевой вектор Xq. Значит, оно равно Е> откуда Л-7-' = Id^ и, следовательно, минимальный многочлен матрицы Л делит Х*~х — 1: Р{Х) | Х*~% — 1. Обратное очевидно. Следовательно, длина периода равна наименьшему числу А с Р(Х) \ X* — 1, т. е. порядку X в К[Х]/Р. e. Если Q — некоторое расширение Ку в котором Р(Х) имеет корень уу то отображение К[Х] Е Q ь->- Q(y) Е Q —гомоморфизм, ядром которого является в точности идеал, порожденный многочленом Р (ибо Р неприводим), что дает изоморфизм К[Х]/Р в Q. Для любого к существует /^-расширение L степени к. Если Р обозначает минимальный многочлен порождающего элемента мультипликативной группы L*, то Р имеет (по построению) корень порядка qk — 1 и это, следовательно, примитивный многочлен. f. Пусть рк — степень простого числа р. Располагая Ar-шаговым линейным генератором с периодом рк — 1 и используя замечание вопроса а относительно (0,0,.. .,0), построим fc-шаговый генератор с периодом длины рк. Например, примитивный многочлен Х3 + 2Х2 + 1 порождает 3-шаговую последовательность с длиной периода 26: 00111021121010022201221202 00111021121010022201221202 в которую можно включить 0 для получения 3-шаговой последовательности с длиной периода 27.
568 IV Некоторые методы алгебраической алгоритмики Имея два Ar-шаговых генератора / : Fk -+ F и g : Gk -t G, можно определить их декартово произведение / х g : (F x G)k -+ F xG. Длина периода f x g равна НОК длин периодов множителей. Пусть F ~ F\ x • • • х Fry где порядок каждого Fi простой. Для каждого F, существует Ar-шаговый генератор длины \Fi\k. Их декартово произведение является искомым Л-шаговым генератором. 42. Псевдопростые числа a. Сравнения Sq(b) = q (mod 2) и Sq(b) = Sq(l) = q (mod 6—1) показывают, что Sq(b) нечетно и взаимно просто с 6 — 1. Сравнение Ья = 1 по модулю Sq(b) является прямым следствием определения Sb{q). Поскольку оно остается верным, если q заменить на кратное для qy то достаточно доказать, что 2q делит Sq(b) — 1. Итак, определение Sq(b) и сравнение Ья~х = 1 (mod q) приводят к (6 — l)Sq(b) = Ья — 1 = 6— 1 (mod q)y откуда, сокращая на 6 — 1, получаем Sq(b) = 1 (mod q). Число Sq(b) — 1 делится на q и на 2, а значит, и на 2д, что и требовалось доказать. Если q — составное, то имеется все то же Sq(b). Предыдущее свойство доказывает, что конструкция q -+ Sq(b) при итерировании производит бесконечно много псевдопростых чисел, если все-таки удастся ее осуществить. Для оснований 2, 3, 5 и 7 можно взять наименьшие псевдопростые числа, которыми являются соответственно 341 = 11 х 31, 91 = 7 х 13, 217 = 7 х 31 и 25 [148]. b. Пусть q — простое число, не делящее 6(62 — 1). Согласно малой теореме Ферма (б2)9-1 = 1 (mod q). Положим п = Sq(b2) и из предыдущего вопроса, примененного к q и б2, получим 6n_1 = 1 (mod n). Число п — составное, так как Sq(b2) = Sq(b)Sq(—b)y а значит, п — псевдопростое по основанию 6. 43. Числа Кармайкла а. Пусть п — число Кармайкла. Взяв 6 = — 1, получим, что п нечетно. Пусть р — простой делитель п. Существует такое 6, что 6 mod p — примитивный корень по модулю р и 6 mod q = 1 для всех других простых делителей q числа п (используйте китайскую теорему об остатках или поищите 6 в виде 1 + к^). Тогда 6 обратимо по модулю п и 6n_1 = 1 (mod п) означает, что р— 1 делит п — 1. Предположим, что р2 делит п. Пусть п = рат с НОД(р, т) = 1. Тогда получим изоморфизм и(Ъп) ^ U(ZpQ) х и{Ът)\ группа и{Ър*) порядка ра~1{р- 1) и,
Решения упражнений 569 поскольку а ^ 2, существует элемент 6 Е C/(Zpo) порядка р: этот элемент 6 не удовлетворяет сравнению 6n_1 = 1 (mod n), так как р делит п, а значит, не может делить п — 1 (впрочем можно взять 6=1 + - и применить формулу бинома Ньютона). Обратное очевидно. Для доказательства того, что к ^ 3, предположим, что п = pq. Тогда pq = 1 (mod p — 1), откуда q = 1 (mod р — 1). Меняя местами р и q> получим, что р= qy — противоречие. 44. Числа Кармаикла, являющиеся произведениями трех простых чисел Воспользуемся несколько раз тривиальным сравнением Pi = 1 (modp, - 1). a. Используя то, что р\Р2Рз = 1 (mod рз — 1), а также наше тривиальное сравнение, получаем рз — 1 | Р1Р2 — 1, а значит, г — целое число; гф1, так как pip2 ф рз и PlP2 ~ 1 . PlP2 . Pl(P3~ 1) г = Г~ < 7 ^ л— = Р1' Рз - 1 Рз - 1 Рз - 1 b. Оба сравнения очевидны. Рассмотрим первое по модулю ръ — 1 и получим, что р2 — 1 | (pi — 1 + r)pi — г = (pi — l)(pi -f г). c. Обратное утверждение формулируется так. Зафиксируем l<r<pi. Для каждого простого числа pi из интервала \р\ + 2, 1 + (Pi — l)(pi + **)] такого, что (pip2-l + r)pi = г (mod г(р2-1)), (piP2-l-fr)p2 = г (mod r(pi-l)), число рз = 1 + р1^~ целое, и если оно простое, то оно дополняет числа pi, p2 до тройки Кармаикла. Действительно, из первого сравнения следует (piP2 — l)pi = 0 (mod г), т.е. г | piP2 — 1, и число рз — целое. Кроме того, Рз = 1 4- > — > Р2- г pi - 1 Наконец, по определению, рз — 1 | Р1Р2 — 1, и используя то, что грз = PiP2 — 1 + г, а также два приведенных выше сравнения, получим рг — 1 | Р1Рз- 1 ир1 - 1 |р2рз- 1.
570 IV Некоторые методы алгебраической алгоритмики for r in 2 .. pi — 1 loop for p2 in pi + 2 .. (pi — l)(pi + r) + 1 such that рг простое loop x i— P1P2 — 1 + r; if xp\ — r = 0 (mod г(рг — 1)) and xp2 — r = 0 (mod r(pi — 1)) then pz <— x/r; ifp3 простое then output (р1,Р2,рз); end if; end if; end loop; end loop; Алгоритм 12. Определение чисел Кармайкла вида р\Рчръ d. Приведем числа Кармайкла вида rpq с г = 3,5,7 в порядке нахождения их алгоритмом 12: 561 = 31117, 10 585 = 5-29-73, 2465 = 5-17-29, 1105 = 5-13-17, 8911 = 7-19-67, 2821 = 7-13-31, 15841 = 7-31-73, 6601 = 7-23-41, 1 729 = 7 • 13 • 19, 52 633 = 7 • 73 • 103. Пусть п — число Кармайкла. Если оно содержит более трех простых множителей, то оно больше, чем 3x5x7x11 = 1155. Если п имеет 3 простых множителя, то либо разложение п на простые множители содержит 3 или 5 (таких чисел всего 4 и все они приведены выше), либоп ^7х 11 х 13= 1001. 45. Числа, достигающие границы ~ в тесте Рабина а. В общем, если п = 3 (mod 4), то Вп является подгруппой группы U(Zn)> состоящей из таких элементов 6, что Ь~*~ = ±1. Кроме того, (—1)~2~ = — 1, а значит, Вп — объединение непересекающихся множеств Ln U (-l)Ln, где Ln = {be U(Zn) | 6^ = 1}. Для первого семейства Ln равно CPl x QP2, где СР1 — подгруппа индекса 2 в C/(ZPl), образованная квадратами, a QP2 — подгруппа индекса 4 в C/(ZP2), образованная четвертыми степенями. Следовательно, Ln индекса 8, а Вп индекса 4. Чтобы получить такие числа п, достаточно найти такие простые числа р\, что р\ = 3 (mod 4) и рг = 2pi — 1 — простое. Приведем список таких (рьРг) с р\ < 500: (3,5), (7,13), (19,37), (31,61), (79,157), (139,277), (199,397), (211,421), (271,541), (307,613), (331,661), (367,733), (379,757), (439,877), (499,997).
Решения упражнений 571 Для второго семейства Ln — подгруппа квадратов в C/(Zn), индекс которой равен 8. Приведем несколько примеров: 7 х 19 х 67, 19 х 199 х 271, 31 х 151 х 1171, 43 х 127 х 2 731, 43 х 271 х 5 827, 43 х 631 х 13 567, 43 х 127 х 211. Ь. Имеем п-1 = (pi- l)(2pi +1) = 22f1(2p1-{-1), а потому б""1 mod р2 = (6 з" J2P1+1 = (А) Если мы хотим, чтобы п было псевдопростым по основанию 6, то 6 должно быть квадратичным вычетом по модулю Р2У что не выполняется при 6 = 2, так как рч = 5 (mod 8). 46. Равенство а~*~ = ±1 для любого а Е C/(Zn) a. Целое число п, удовлетворяющее приведенным условиям, является числом Кармаикла, а потому равно произведению различных простых нечетных чисел. Пусть р — простой делитель п, п = рт и выполнено а~2~ = — 1 (mod n). Согласно китайской теореме об остатках, существует такое у, что у = a (mod p) и у = 1 (mod m). Предположение у^з" = ±1 (mod п) и сравнения у~*~ = а~*~ = — 1 (mod p) доказыва- ют, что у з сравнимо с а — 1 по модулю n, a значит, и по модулю т. Но у = 1 (mod m); откуда ш=1ип — простое. b. Если п удовлетворяет равенству а~5~ = 1 для любого а Е C/(Zn), то оно также удовлетворяет равенству ап~1 = 1 и, следовательно, является числом Кармаикла. Кроме того, порядок любого элемента в C/(Zn) делит (п — 1)/2, а значит, р, — 1 делит (п — 1)/2. Обратное очевидно. Числа п = 1729 = 7 х 13 х 19 и п = 2465 = 5 х 17 х 29 дают такие примеры. 47. Нестабильность оснований в тесте Рабина — Миллера а. Сравнение х2 = 1 (mod pa) приводит к тому, что х = ±1 (modpa), а потому, если 6 удовлетворяет 6n_1 = 1, то п — сильно псевдопростое по основанию 6. Имеем НОД(п - 1,р(п)) = НОД(ра - 1, (р - l^"1) = р - 1. Следовательно, п — сильно псевдопростое по основанию 6 тогда и только тогда, когда 6я"1 = 1; существует ровно р— 1 таких оснований и отношение равно l/pa_1. c. Пусть р — простой делитель п и р = 3 (mod 4). Из сравнения Ь2'я = —1 (mod п) следует b2'q = —1 (mod р), откуда.; = 0, так как —1 не-квадрат по модулю р.
572 IV Некоторые методы алгебраической алгоритмики d. Если п — степень простого числа р, то 6 Е Вп тогда и только тогда, когда 6я-1 = 1, а потому Вп — подгруппа. Если п делится на простое число = 3 (mod 4), то Вп является подгруппой согласно предыдущему вопросу. Обратно, пусть п = р*1 .. .р?г — разложение на простые множители числа п и г ^ 2, р,* = 1 (mod 4). Покажем, что Вп не подгруппа. Заметим, что для 6, удовлетворяющего равенству б2 = 1, выполняется Ья = 6, b2q = 1, а значит, b <£ ВПу если 6 не равно ±1. Напротив, если б2 = — 1, то b2q — — 1, а потому 6 Е Вп. Следовательно, достаточно найти такие 6, 6', что б2 = 6/2 = —1 и 66' ф ±1. В циклической группе C/(Zp<»i) элемент —1 является квадратом (так как у>(р?>) (—1) 2 — 1) и существует такой элемент х,-, что х\ — — 1 (mod p?1). Достаточно взять следующие 6 и 6': 6 = 6' = х,- (mod р?•), г = 2,..., г, 6 = xi (modp*1), 6' = — х\ (modp*1). e. Пусть п = 5 х 13 = 65. Возьмем xi = 2, Х2 = 5, затем 6 = 18, V = 8. Тогда 66' = 14 (mod 65) и 182 = 82 = -1 (mod 65), но 142 = 1 (mod 65), 14 £±1 (mod 65). 48. Количество элементов множества {6 Е C/(Zn) | Ь~5~ = ±1} а. Для того, чтобы сосчитать число элементов Яп, сведем вопрос к циклическим группам. Если U^ обозначает множество {х Е C/(Zm) | хг = 1}, то по китайской теореме об остатках и поскольку и(Ър°ч) — циклическая группа (р, — простое число, отличное от 2), то: |t/pVl = НОД(п - IMpV)) = НОД(п - l.pf *-1(ft- - 1)) = = Н0Д(п-1,р,-1). Последнее равенство является следствием того, что р, делит п, а значит, не делит п — 1. Аналогичные рассуждения, примененные к ЬПу дают: |яп| = ПН°Д(П - i.w -1), |£»1 = ПноДС1^"^ -1). i=i i=i Отсюда легко выводится формула для [Нп : Ln]. Наиболее простыми примерами являются, конечно, п = р2т для t = 0 и п = p2m+1 для t = г.
Решения упражнений 573 Более общо, если pi,... ,рг, — г простых чисел и V2(pi — 1) = ^(pj — 1), то для п = р^1 .. .р*г выполняется t = О, если сц + • • • + аг четно, и * = г, если c*i -f V осг нечетно. Ь. Для х G и(Ъп) элемент х~5~ принимает значение —1 тогда и только тогда, когда х~*~ modp?* равно —1 для любого г. Согласно упражнению 25 это эквивалентно тому, что ^(п — 1) ^ v2(pi — 1) для любого г, т.е. t = г. В этом случае отображение Хп Э х »-> xiL2_ Е {—1,1} сюръективно и [/£„ : L„] = 2. В противном случае [Кп : Ln] = 1. 49. Оценка количества чисел 6 Е C/(Z„) таких, что 6n_1 = 1 Имеем: \Нп\ _yj 1 НОД(п-1,^-1) «ft 1 1 *>Н " й рГ * л - 1 " й рГ1 * рГ1 ' откуда и следует искомый результат (так как существует щ ^ 2). Граница достижима тогда и только тогда, когда п = 32р2-..рг с Pi - 1 | п — 1. Например, 9 = З2, 45 = З2 х 5, 13 833 = З2 х 29 х 53, 321201 = З2 х 89 х 401, 203 841 = З2 х 11 х 29 х 71. 50. Псевдопростые числа Эйлера по основанию 6 a. Эти включения очевидны и они являются строгими (см. упражнение 51, например). b. Для доказательства того, что j ^ V2(pi — 1), можно считать, что j ^ 1. Положим а = Ья. Тот факт, что п — сильно псевдопростое по основанию 6, приводит к а2' = 1 (mod п) и а2' = — 1 (mod n). Те же самые сравнения по модулям р, доказывают, что а имеет порядок 2J по модулям рь а в частности, V | р,- — 1. То, что п — сильно псевдопростое по основанию 6, дает 6~2~ = ±1. Следующие сравнения очевидны: Pi = 1 (mod 2-7+1), если j < v2{pi - 1), Pi = 1 + 2^' (mod 2-7+1), если j = v2{pi - 1), и доказывают, что n = p\ .. .pr = (1 4- V)* (mod 2-7+1). 1 4- 2J — элемент порядка 2 в группе [/(Z2;+i). Следовательно, 2-7+1 | n — 1 тогда и только тогда, когда t четно. С другой стороны, гЧр = 2k~lq, а потому 6^2~ = 1 тогда и только тогда, когда к — 1 ^ j, т.е. 2-7+1 | n — 1. Таким образом мы установили эквивалентность между тем, что t четно и тем, что 6~2~ = 1.
574 IV Некоторые методы алгебраической алгоритмики Мы видели, что 23 — порядок Ья по модулю р,- тогда и только тогда, когда j = v2(pi - 1), откуда ©-©'-©-©•••©-<-»■ Итак, доказано равенство (по модулю п) 6^ и (£). Обратное неверно (см., например, упражнение 51). с. Пусть п — эйлерово псевдопростое число по основанию п. Так как п — 1 = 2q с нечетным q> то б9 = (£) = ±1. В любом случае п — сильно псевдопростое по основанию 6. 51. Псевдопростые числа по основанию 2, не большие 104 Не считая простых чисел, имеется 22 псевдопростых числа по основанию 2. Среди этих 22-х эйлеровыми псевдопростыми по основанию 2 являются следующие 12: 561, 1105, 1729, 1905, 2 047, 2 465, 3277, 4033, 4681, 6601, 8321, 8481. 5 чисел являются сильно псевдопростыми по основанию 2: 2 047, 3 277, 4033, 4681, 8321. 52. Тест на простоту Соловея — Штрассена a. Множество Еп определяется как множество точек совпадения двух гомоморфизмов, а потому является подгруппой. b. Предположим, что Еп = U(Zn). Отсюда 6т = ±1, а значит 6n_1 = 1; это приводит к тому, что п — произведение различных простых чисел (другими словами, п — простое или п — число Кармайкла, см. упражнение 46). Поскольку п — не-квадрат, то символ Якоби равен — 1 и упражнение 46 позволяет сделать необходимый вывод. Оставшаяся часть упражнения не представляет сложностей. 53. Числа, достигающие границы ^ в тесте Соловея — Штрассена а. Согласно упражнению 20, сумма $^fc.=fc<*i нечетна. Докажем, что Ln С Еп. Если 6 е Lny т.е. 6^з~ = 1, или, по-другому, (Ья)2 = 1, то (б9) 2 =1, так как kj ^ к. По модулю pj это равенство дает
Решения упражнений 575 (—■) = 1, откуда (-£■) = 1 и, наконец, (£) = 1 и, следовательно, 6 G Еп. Докажем, что отображение Еп Э Ь »-> (£) Е {—1,1}, с ядром Ln, сюрьективно, т.е. [Еп : Ln] = 2. Для этого выберем 6 Е C/(Z„) такое, что 6 mod p"3 имеет порядок 2к для любого .; (это возможно, поскольку к ^ kj). Тогда б2 modp J = — 1, а значит, Ь~5~ = — 1. Далее, (Д) = —1, если kj = к и (-£■) = 1, если kj > к. Поэтому (£) = (_!)£*.**=* <*• = _1; 6 принадлежит £п и (£) = -1. Поскольку [Нп : L„] = 2Г и [Еп : Ln] = 2, то [Нп : £„] = 2Г_1. Если г ^ 3, то \Еп\ ^ L^- ^ <£^- и равенство выполняется тогда и только тогда, когда г = 3 и Яп = C/(Zn); в этом случае п — число Кармайкла Р1Р2РЗ с к\ = к2 = кз (например, п = 7 х 19 х 67). Если г = 1, то п = ра с нечетным а, а потому а ^ 3, i£n = Яп и $5} = ptr ^ 5- Если г = 2, то [Нп : Еп] = 2 и Нп ф U{Zn) (в противном случае п — число Кармайкла, откуда г ^ 3), что дает |i£n| ^ ^р. Граница достигается тогда и только тогда, когда [U(Zn) : Яп] = 2, т.е. для чисел п = pq с q — 1 = 2(р — 1). (Примеры см. в упражнении 45). Ь. Докажем, что Еп С Ln. Пусть 6 Е i£n, т.е. 6^з~ = (£). Для j, такого, что А: > kj (а такое j существует), сравнение b~5~ modpJJ не может принимать значение —1 (так как у2{11^-) ^ ^(Pj — 1)), а потому (£) = 1 и 6 G £n- [Ln • ^п] = 2 тогда и только тогда, когда отображение Ln Э Ь »-> (£) Е {—1,1}, ядро которого равно ЕПу принимает значение —1. Читатель может проверить, что это эквивалентно сформулированному условию. Напомним, что [Нп : Ln] = 2', где t — число таких индексов г, что к ^ к{. Если п имеет квадратный множитель, то \Еп\ ^ |Я„| ^ q^- Если п не имеет квадратного множителя, то [Ln : Еп] = 2, а потому [Яп : Яп] = 2t+1. Отсюда |Я„| ^ Ц^ ^ ^ и равенство достигается тогда и только тогда, когда t = 0 и Яп = C/(Z„). Речь идет, следовательно, о числах Кармайкла, для которых к > Л,- для любого г, т.е. 6~2~ — 1 для любого 6, обратимого по модулю п (например, 1 729 = 7 х 13 х 19, 2465 = 5 х 17 х 29). 54. Построение п, 6 с б^а" = ±1, но б^з- ф (£) Положим А: = v2(p — 1) = v2(q — 1). Тогда р, (7=1 + 2* (mod2fc+1) => n = pg = l (mod2fc+1) =► 2k | ^-^.
576 IV Некоторые методы алгебраической алгоритмики Пусть 6 таково, что порядок 6 по модулю р равен 2 и 6 mod q = 1. Тогда 6 обратимо по модулю п и удовлетворяет сравнению 6"з~ = 1 (mod р) (так как 2к | ГЧ^), а также Ь~з~ = 1 (mod q)y откуда 6"з~ = 1 (mod n). Конечно, (так как 2-^~ не делится на 2^). Например: {pyqyb) = (3,7,8) или (5,13,27). 55. Факторизации «а 1а Ферма» а. Очевидно, п = (1^1) — i^1) и, поскольку р и q являются очень близкими числами, то р — q мало. Следовательно, если удастся найти такое х (= (p + <j)/2), что х2 — п — квадрат у2 (достаточно маленький), то можно факторизовать п = (х + у)(х — у). Для того чтобы реализовать этот алгоритм, нужно каким-то образом выбрать начальное значение х. Но х2 > п, а потому х > [у/п\, и поиск можно начинать с [у/п \ + 1. I х <— IV**J +!; у <— \/я2 - я; while t/ £ N loop х i— x + 1; у «— v^2 — n; | end loop; Из этого алгоритма получаем п = (х + у)(х — у). Конечно, можно оптимизировать этот алгоритм и исключить почти все вычисления квадратных корней, заставляя измениться у в соответствии с множеством возможных значений. Идея алгоритма состоит в вычислении величины х2 — у2 у на каждом шаге проверяя при этом, что х и у не превосходят максимальных значений ^^ и £^ и используя то, что хиу обязательно имеют противоположные четности. Объясним некоторые изменения, произошедшие с алгоритмом. Первое присваивание переменной уу кроме придания ей значения 0 или 1, обеспечивает то, что у и х имеют противоположные четности, При входе во внутренний цикл г > п и, принимая во внимание неравенства для х и уу нетрудно доказать, что у < £^, а это говорит о правомочности условия, фигурирующего при выходе из цикла. Наконец, понятно, что ^^ и £^ имеют противоположные четности. Следовательно, если у = ^^ 4-1, то х ф Е^3-. Поэтому, если мы находимся в основном цикле после выполнения условия г = п, то имеются две возможности:
Решения упражнений 577 х <— [у/п J + 1; у <— 1-х mod 2; г «— х2 — у2; loop * < *$* «. £ <.^ НМИНГ* *ф#ТЯ»0^^ ЧеШ0#т,# Г *»•#* while г > п loop у <— у -h 2; г <— г - 4у - 4; end loop; # < *|* й 1? «£ *f* +1 шюю |^о^||1В1Ш<>лазрсшй« «дешевя* * г.* exit when г = п; *<<$*ж$<)*$**1 ютю щттютотяж тът&т ш г » х «— я + 1; у «— у - 1; г «— г + 2а: - 2у; end loop; -V ***- «ж3- ^ V Алгоритм 13. Факторизация «а 1а Ферма» 1) у = Е^З- + 1 и, согласно предыдущему свойству, х < £^, 2) у ^ £^ и тогда неравенство х2 — у2 < п приводит к х < ^1. В любом случае последующие действия восстанавливают инварианты. Этот алгоритм требует в общем случае ^^ итерации на внутреннем цикле (чтобы найти хорошее значение у) и ^^ — \у/п] итераций на внешнем цикле (во время которых у может опуститься до 1). Однако, поскольку фактически значения у возрастают (от 1 или 2), то эти сложности не перемножаются и алгоритм имеет сложность порядка р- IV** li те- порядка (р- q)/2. sir-[у/п [+1; for t in 1 .. r loop Res(i) i— x mod n,; end loop; Факторизация_n : loop Итерация-х : loop for t in 1 .. r loop exit Итерация-x when not Carre (Res(t), t); end loop; y<— [л/x2 -nj; exit Факторизация_n when y2 = x2 — n\ end loop Итерация-х; x i— x + 1; for t in 1 .. r loop Res(i) <— Res(i) + 1 mod nr, end loop; end loop Факторизация_n; Алгоритм 14. Факторизация по Ферма с решетом Ь. Разумеется, простые числа щ, ..., пг, которые используются в решете, взаимно просты с п. Булева матрица Carre с двумя входами, 37-1017
578 IV Некоторые методы алгебраической алгоритмам которая определяется в начале алгоритма, имеет следующее определение: Carre(xyi) истинно, если х2 — п — квадрат по модулю щ. Алгоритм 14 тогда очевиден. Он использует вспомогательную матрицу,: содержащую вычеты х по модулю п,-, чтобы модулярные вычисления1 не требовали обращения к арифметике повышенной точности (за исключением инициализации). 56. Матрица Смита, формула Чезаро a. Имеем (5М)0- = J2sikmkj = J2JWti{k/j). Если j { г, то (SM)ij = 0, в противном случае, осуществляя замену переменной d = k/jy получим (SM)ij = J2d\i/j А*(^)- Это доказывает, что SM = Idn. Аналогичные вычисления доказывают, что MS = Idn (замена переменной d = i/k). Эти матричные тождества эквивалентны формуле обращения Мёбиуса, поскольку g = Sh означает, что g — прямая трансформанта Л, вто время как h = Mg означает, что h — обратная трансформанта д. b. Имеем: Я^ = МНОД(г,;))= £ h(d) = <*|нод(1,я = 2 h№ = И Sikh(k)Sjk = (SHtS)ij. d\ind\j l^k^n Равенство Y^d\n ф(4) = п доказывает, что единичная функция — это трансформанта функции у?. Следовательно, А = SDlSy а отсюда выж> дится формула Чезаро. Поскольку MS = Idn, то det5 = ±1, откуда получаем формулу Смита. 57. Определение степеней множителей многочлена над Fg а. Множество Вр{ — это множество неподвижных точек гомоморфизма г', а потому подалгебра в К[Х]/Р. Если п = degP, то алгебра К[Х]/Р есть Zf-алгебра размерности п с базисом {1,Х>Х ,.. .X }. Зная многочлен Р, можно вычислить матрицу В эндоморфизма г: для этого, например, можно использовать равенство т(Х ) = XpJ modP,! что дает j-и столбец В. Классические методы линейной алгебры (приведение к треугольному виду) позволяют вычислить размерность ядра матриц Вг — Id.
Решения упражнений 579 Если Р неприводим, то алгебра К[Х]/Р — надполе К размерности п. Следовательно, Вр\ = К и ВруП = К[Х]/Р. Согласно упражнению о конечных полях в II, алгебра Bpyi имеет размерность НОД(г, п). b. Согласно цитированному упражнению, каноническая проекция К[Х]/Ра —> К[Х]/Р сужается до изоморфизма Вр<* t на Bpj, откуда следует утверждение, касающееся размерности. c. Вытекает из китайской теоремы об остатках. Если Р*1 ... Р£к — разложение на простые множители многочлена Р, то dimBpi = dimBp<*i x + bdimBp"* x = 1 + Ь 1 = к. d. В предыдущих обозначениях имеем: dim Bpyi = dim BP<*i { + h dim Вр°к { = = KOAfategPx) + • • • + Hcfaftdeg ft) = = НОД(г, l)dx + НОД(г, 2)d2 + • • • + НОД(г, n)dn = = i-й коэффициент A(di>..., dn). 58. Неприводимые множители Хп — 1 над конечными полями a. Исследование производной Р'{Х) = пХп~1 при ненулевом п над полем Fq доказывает, что многочлен Р(Х) = Хп — 1 не имеет квадратных множителей. Имеем т(Хх) — Xqx modn. Оставшаяся часть упражнения вытекает из этого равенства. b. Предположим сначала, что а — цикл. Если х — вектор с компонентами (xt), то <т(х) = х означает, что Х{ = ха^ для любого г, а поскольку а — цикл, то xt = Xj для любых г и j. Отсюда выводим, что Ker(cr — ld) = K-(ei + ... + ed), а потому dimKer(cr — Id) = 1. Если <т произвольно, то dimKer(cr — Id) равна числу циклов в сг. c. Пусть для 1 ^ 2i ^ п число 6, — количество орбит умножения на qx в Z„. Тогда 6i — число неприводимых множителей многочлена Хп — 1. Более общо, если А обозначает матрицу Смита с элементами НОД(г, j), то A(di}d2}.. . ,dn) = (&i,62,.. • ,М> где di — число множителей степени г. Обращая это равенство, можно вычислить di через bj. В частности, если q = 1 (mod n), то многочлен Хп — 1 является произведением многочленов простой степени — это легко доказать (поскольку п | q — 1, группа F* содержит п корней n-й степени из 1). Вышесказанное означает, что Фп(^) неприводим над Fg, если умножение на q имеет две орбиты на Zn. Это эквивалентно тому, что q порождает U(Zn). 37*
580 IV Некоторые методы алгебраической алгоритмики Имеем U(Z\2) = {1,5,7,11} и квадрат каждого элемента равен 1. Ниже приведены орбиты умножений на различные q: q mod 12 = 1 q mod 12 = 5 q mod 12 = 7 q mod 12 = 11 {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {0}, {1,5}, {2,10}, {3}, {4,8}, {6}, {7,11}, {9}, {0}, {1,7}, {2}, {3,9}, {4}, {5,11}, {6}, {8}, {10}, {0}, {1,11}, {2,10}, {3,9}, {4,8}, {5,7}, {6}. Сосчитав орбиты, можно сказать, чему равно число неприводимых множителей X12 — 1 в зависимости от значений q по модулю 12: 12, если q mod 12 = 1; 8, если q mod 12 = 5; 9, если q mod 12 = 7; 7, если q mod 12 = 11. Вектор (&i,..., 612), где 6,- — число орбит умножения на qx в Zi2, равен: q mod 12=1 q mod 12 = 5 q mod 12 = 7 q mod 12=11 6= (12,12,12,...,12,12), 6= (8,12,8,12,..., 8,12), 6=(9,12,9,12,...,9,12), 6 = (7,12,7,12,..., 7,12). Равенство A(di,.. .,^12) = (61,...,^12) дает вектор d, где di — число множителей степени i: q mod 12=1 q mod 12 = 5 q mod 12=7 gmod 12=11 d= (12,0,0,0,. d= (4,4,0,0,.. d= (6,3,0,0,.. d=(2,5,0,0,. .,0,0), ,0,0), ,0,0), .,0,0). Приведем разложения X12 — 1 над F5, F7, Fn и Fi3 соответственно: F5 F7 Fn F13 (X + 1) (X + 2) (X + 3) {X + 4) (X2+X + 1) (X2 + 2X + 4) (X2 + 3X + 4) {X2 +4X + 1), {X + 1) (X + 2) (X + 3) {X + 4) (X + 5) {X + 6) (X2 + l)(X2 + 2)(X2 + 4), (X + 1) (X + 10) (X2 + 1) (X2 + X + 1) (X2 + 5X + 1) (X2 + 6X + 1) (X2 + 10X + 1), (X + 1) (X + 2) (X + 3) (X + 4)... (X + 7) (X + 8) (X + 9) (X + 10) (X + 11) (X + 12).
Глава V Дискретное преобразование Фурье Во все времена большие числа и, особенно, простые числа, завораживали людей — математиков и нематематиков. Одной из первых теорем теории чисел является, конечно же, теорема Евклида, утверждающая, что множество простых чисел бесконечно. В 1772 г. Эйлер решил проблему Мерсенна, доказав, что гигантское для той эпохи число 231 — 1 = 2147483 647 является простым. В настоящее время благодаря использованию тестов простоты числа и развитию вычислительной техники, число Мерсенна с показателем степени 31 не доставляет особых затруднений. Об огромном прогрессе в этом направлении можно судить по следующему факту: в 1979 г. Нельсон и Словинский с использованием CRAY-I доказали простоту числа 244497 — 1 (имеющего в своей записи 13 395 десятичных цифр). С того времени было открыто много других простых чисел Мерсенна. Этот прогресс был достигнут не только благодаря возрастающей мощи вычислительных машин. Многие проблемы теории чисел могут рассматриваться с точки зрения их решения на компьютерах1, с одной стороны, благодаря быстрому выполнению элементарных операций (умножению и делению больших чисел), а с другой стороны, — благодаря открытию эффективных алгебраических алгоритмов (тест простоты простых чисел Мерсенна, принадлежащий Лукасу и Леме- ру, вероятностный тест Рабина, «недавний» тест Адлемана и Румли, улучшенный Коэном и Ленстрой...). Приведем, к примеру, критерий Лукаса — Лемера, лежащий в основе *Это весьма существенно. Например, наивный тест простоты при помощи последовательных делений числа с 200 десятичными цифрами требует (при использовании машины, работающей со скоростью миллион операций в секунду) примерно 1086 лет вычислений!
582 V-1 Сложность умножения двух многочленов проверки простоты чисел Мерсенна Mq = 2я — 1, где q — нечетное простое число. Этот критерий предполагает вычисление последовательности (Lt)i^Oi определенной следующим образом: Lo = 4, L,-+i = L2 — 2 (mod Mq). Он утверждает, что число Мя простое тогда и только тогда, когда Lq-2 = 0. Для того, чтобы доказать простоту числа М132049 (имеющего 39 751 десятичных цифр), при использовании теста Лукаса — Лемера необходимо уметь оперировать с числами, имеющими приблизительно 40 000 десятичных цифр. Другой пример той же природы — тест простоты чисел Ферма Fn = 22 + 1. Это тест Пепина, утверждающий, что Fn простое тогда Fn — \ и только тогда, когда 3 з = — 1 (mod Fn). Этот тест (с возможной заменой 3 на 5) предполагает построение последовательности: Ро = 3, Pi+i = Р? mod Fn; он определяет простоту числа Fn с помощью условия P2»-i = -1 (mod Fn). Разработка эффективных алгоритмов стала возможной благодаря работам многих математиков: Кули и Тьюки, Полларда, Винограда, Шёнхаге и Штрассена, Рейдера, Фидуччиа и других. Дискретное преобразование Фурье, основы которого будут представлены в этой главе, является ведущей темой большинства этих работ. Мы начнем с задачи перемножения двух многочленов. Действительно, каждое число является многочленом в подходящей базе счисления. Поэтому можно использовать алгоритм вычисления произведения многочленов, а затем реализовать накопленные переносы. 1 Сложность умножения двух многочленов Над произвольным кольцом А традиционный метод вычисления произведения двух многочленов степени п — 1 требует в точности п2 умножений и (п — I)2 сложений. Такой результат можно сформулировать в следующем виде: традиционное умножение двух многочленов степени п — \ требует 0(п2) операций. Идея, лежащая в основе преобразования Фурье, состоит в замене многочлена степени ниже п его значениями в п хорошо выбранных точках. Приведем различные классические результаты по вычислению значений в точке и интерполяции. 1.1 Интерполяция многочленов над полем и над кольцом Хорошо известно, что над М или С многочлен степени, строго меньшей п, полностью определяется своими значениями в п различных точках
V-1.1 Интерполяция многочленов над полем и над кольцом 583 хо, si, • • •, ^п-1 (в действительности можно заменить М или С любым коммутативным полем). Более точно, отображение Кп[Х] ЭРН( Р(х0), Р(хг),..., P(*„-i)) € Ап является А'-изоморфизмом из пространства АП[Х] (состоящего из полиномов степени, меньшей п, с коэффициентами из К) на пространство Кпу однако, при условии, что точки хо, х\у ..., xn_i различны. Первый подход состоит в рассмотрении матрицы этого линейного отображения в стандартном базисе с порождающими элементами х\. Эта матрица, как известно, является матрицей Вандермонда, определитель которой есть П|<;(х^ ~~ х»)- Другой метод, более эффективный, состоит в использовании интерполяционных полиномов Лагранжа Li(X)y определенных для О ^ г<^ п — 1 как Li{x) = (X - х0)(Х - хг)... (X - х^г)(Х - хц.г) ...(Х- xn_Q (Х{ - X0)(Xi - Xi) . . . (Xi - Xi-i)(Xi - X, + i) . . . (X{ - Xn-i) и удовлетворяющих свойству L{(xj) = 6{j. Эти полиномы позволяют определить Р по его значениям j/o, J/i, • •., Уп-i в точках х0, х\> ..., xn_i согласно равенству: Р(Х) = ^yiLi(X). Можно видеть, что этот метод вычисления (интерполяции) применим к произвольному кольцу, в котором элементы я,- — Xjy для г ф jy обратимы в этом кольце. Пусть Т — преобразование, ставящее в соответствие многочлену Р его значения в п точках хо, xi, ..., xn_i. Это преобразование позволяет перейти от представления многочленов, заданных с помощью коэффициентов, к представлению через их значения. В другом смысле преобразование этих представлений есть интерполяция. Использование указанного метода для вычисления произведения многочленов основано на следующем равенстве: Р * Q = Jr~1(T(P) x T(Q)), где deg(P*Q) < п. Умножение слева — умножение многочленов, умножение справа — умножение функций из [0,п[ в А. Первое требует п2 операций в основном поле, второе — п. Оставшиеся операции, необходимые для вычисления, сводятся к вычислению значений многочлена в точках и интерполяции многочлена по значениям в п точках. Для вычисления значений обычно используют метод Горнера, который требует 0(п2) операций для вычисления значений многочлена степени, меньшей п, в п точках. Интерполяция имеет аналогичную сложность. Поясним вкратце основную идею метода Горнера вычисления в 1 точке. Например, для многочлена Р(Х) = а^Х3 + а^Х2 + а\Х1 + ао степени
584 V-1 Сложность умножения двух многочленов ^ 3 запишем: Р(х) = ((аз хх + 02) хх + ai) хх + ао, и по методу Горнера имеем: У аз; 2/ 2/хх + а2; у <—у х х-f аг, у 2/ х х + а0. Поэтому вычисление у = Р(х) использует 3 умножения и 3 сложения. Для многочленов степени п — 1 необходимо (для одной точки) п — 1 умножений и п — 1 сложений. Даже если последовательность {х^х2,... , х"""1} раз и навсегда за- табулирована, то обычный метод вычисления значений многочлена требует п — 1 сложений и п — 1 умножений. Короче, наивный способ вычисления значений многочлена степени, строго меньшей п, в п точках требует п х (п — 1) умножений и п х (п - 1) сложений. Особенность быстрого преобразования Фурье, которое является ничем иным, как быстрым методом вычисления/интерполяции многочлена, основана на разумном выборе точек вычисления значений: корнях n-й степени из единицы. Таким образом, его сложность понижается до 0(n\ogn) операций базового кольца А вместо 0(п2) операций, неизбежных в классическом методе. 1.2 Вычисление значений многочленов в корнях из единицы Выбор корней n-й степени из единицы как точек для вычисления значений многочленов играет фундаментальную роль для вычисления их произведения по следующим двум причинам: • он сводит интерполяцию многочлена в корнях из единицы, к вычислению значений многочлена в тех же корнях из единицы, • он позволяет, если п — сильно составное число (например, степень двойки или степень тройки), реализовать быстрое вычисление (и, следовательно, быстрее выполнить интерполяцию). Пусть и — корень n-й степени из единицы. Вычисление значений многочлена степени < п в п точках и>°, ш1. и>2 ..., ип 1 связано с линейным отображением, матрица которого Уш состоит из порождающих элементов о;*-7. Если Р(Х) = YlajX* — многочлен степени меньшей п, то вычисление а,- = Р(их) эквивалентно вычислению произведения следующих матриц: / ai / =УШ ао , где Vw = \а„_1, \а„_1. /1 1 Vi 1 ш1 ш 1 (п-1) \ (1) и п-1 w(n-l)(n-l)/
V-1.2 Вычисление значений многочленов в корнях из единицы 585 Приведем пример, который позволит читателю убедиться, что использование корней из единицы приводит к ускорению вычислений. Рассмотрим задачу вычисления значений многочлена степени 14 в степенях и>, корня 15 степени из единицы. A priori, наивный подход (как в случае горнеровской схемы, так и в случае вычисления для затабу- лированных значений степеней и) для множества из 15 вычислений по формуле (1) требует 15 х 15 = 225 умножений и14х15 = 210 сложений. Эти 15 вычислений (1) соответствуют матричному произведению /о0\ oi 02 012 013 Он \014/ /1 1 1 1 1 м 1 а;1 а,2 1 иг и 12 ,13 ОТ и 14 1 и,12 а;9 ш* ы" 1 а,13 а;14 ,и 1 \ / оо \ 01 02 ,13 аг ш' ы" иг I 012 013 014 \014/ Если не считать умножения на 1 этой матрицы за операцию умножения, то их число уменьшается до 180. Но как можно учесть в программировании эти единицы? Тестировать перед умножением каждый из элементов (значит, реализовать 225 проверок и 180 умножений) может оказаться менее выгодным, чем осуществить 225 умножений. Однако, можно «без поиска единиц внутри» рассмотреть те из них, которые расположены по краям, как в алгоритме слева. Несмотря на это, полученный алгоритм всегда имеет сложность 0(п2): он использует в точности (п — I)2 умножений и п(п — 1) сложений, так что при п = 15 имеем 196 умножений и 210 сложений. Другой метод, в справедливости которого читатель может убедиться, реализующий вычисление значений многочлена в тех же точках, с гораздо меньшим числом умножений. Он реализует вычисления в 2 этапа, осуществляя вначале частичные суммирования, дающие 15 членов 6^: ао <— ао; for I in 1 .. п — 1 loop ао <— ао + <*i\ end loop; for j in 1 .. n — 1 loop clj i— ао; for i in 1 .. n — 1 loop uj i— olj +wl'ai\ end loop; end loop; W = w /ao\ аз Об 09 ai2 \ai2/ /b5\ h \bsl \bj = W /ai\ a4 a7 1 «10 V013 /6io\ 611 &12 »13 U14/ = W /a2\ 05 08 .«11 \Ol4
586 V-1 Сложность умножения двух многочленов где W — матрица Вандермонда, V^3, порожденная корнем и3. Эти 15 членов интерпретируются как вычисления значений многочленов Po(Y) = а0 + a3Y + a6Y2 + a9Y3 + a12Y\ PX(Y) = <ц + a4Y + a7Y2 + aioY3 + a13Y4y и P2(Y) = a2 + abY + asY2 + anY3 + щ4У4 в следующих точках: 1, u>3, u>6, и9 и u>12. В этих обозначениях, Р(Х) = Ро(-^3) + ХР1(Х3) + Х2Р2{Х3) и, значит, ц = Рб(ш3>)+и>Р1(ш3>)+шЪр2(ш3>). Поэтому для вычисления элементов dj можно использовать следующие явные формулы: а0 =6о + Ьб +Ью, oi = fei 4- бб^1 + Ьцш2, а5 =Ь0 + Ьъшъ +6i0w10, аб = 6i + 6ба>6 + 6ца;12, ою = Ьо + Ьъи10 + biow5, йп = &i + беи;11 + бца;7, а2 = b2 + b7u2 -fbi2^4, 67 = b2 + b7u7 -fbi2^14, ai2 = ^2 4- b7u12 + 6i2o;9, аз =6з + &8^3 +6i3^6, а4 =644-Ьэ^4 + 6i4^8, <*8 =Ьз4-Ьв^8 H-biaw1, а9 = 64 + &9u>9 + бна;3, ai3 = 63 + bgw13 + b13wn, an = 64 + bg^14 + bi4^13. Значит этот метод требует 90 сложений и 76 умножений. Его основной характеристикой является то, что число выражений Ро(ш3*)у Pi(u3J)y P2(u3:>) равно 15 (а не 45, как можно было бы думать а priori) благодаря тому, что и>15 = 1. Это пример, который наглядно показывает эффективные методы вычисления значений, представленные в следующих разделах, позволяет читателю проникнуться идеей использования корней из единицы. Вернемся теперь к тому, что нас здесь интересует, а именно, к обратимости Vw. Эта матрица Вандермонда Vw имеет определитель ГЬо'О^* —^)- Откуда получаем: (1) Свойство. Если и — корень п-й степени из единицы, то матрица Уш обратима тогда и только тогда, когда элементы 1 — ш* обратимы в А. В некотором поле, если и — корень n-й степени из единицы, Уш обратима тогда и только тогда, когда и — корень порядка п. Однако это свойство не переносится на произвольные кольца. Например, в Z/12Z 5 — корень второй степени из единицы, но матрица V$ = (\\) имеет определитель 4 и потому необратима. В следующем разделе будет установлено, для каких корней и матрица Вандермонда Уш обратима.
V-1.3 Примитивные корни из единицы 587 1.3 Примитивные корни из единицы (2) Определение. Элемент и кольца А называется примитивным * корнем n-й степени из единицы, если ип = 1 и если для г — 1,2,... п — 1 элемент 1 — ш* обратим. В частности, и имеет порядок п в группе U(A) обратимых элементов А. Установим теперь некоторые простые характеристические свойства примитивных корней из единицы, возможные в различных частных случаях. Раздел заканчивается установлением критерия, позволяющего находить кольца, в которых существуют такие корни. (3) Лемма. Пусть ш — корень n-й степени из единицы, такой, что 1 — ы* не являются делителями нуля для г = 1,2,...,п — 1. Тогда Уш * Vw-1 = n • Id; где обозначение Id используется для единичной матрицы размеров пхп. Доказательство. Обозначим через S{j элементы матрицы Уш * Уш-\. п-1 п-1 / По определению: S{j = У^о^ы /<7 = У_] {и% "О /=0 /=0 п-1 Классическое тождество (1 — Х)(2_]Х1) = 1 — Хп дает при /=о X = о;'""-7 следующее соотношение (1 — о;*--7) * S{j = 1 — (u;1--7) = 0. Если г ф j, то 1 — а/'--7 не является делителем нуля и, следовательно, S{j = 0. В противном случае, при г = j непосредственно имеем ^Sij = n, что доказывает лемму. (4) Предложение. Пусть и — корень из единицы порядка п в коммутативном кольце А. (г) Следующие два свойства эквивалентны: a) и является примитивным корнем n-й степени из единицы; b) для г = 1,2,..., п — 1 ни один из элементов 1 — ы* не является делителем нуля в А, и п — обратим в кольце А. 1В русской учебной литературе (по алгебре) употребляется термин первообразный корень из единицы. Однако все руководства прикладного плана (теория кодирования, криптография и т.д.) используют понятие примитивного корня, что несколько короче и, пожалуй, удачнее. — Прим. перев.
588 V-1 Сложность умножения двух многочленов (И) Если А — область целостности, то ш — примитивный корень п-й степени из единицы тогда и только тогда, когда п обратим в А. (iii) Если А — поле, то и — примитивный корень (следовательно, п не делится на характеристику поля). Доказательство. I Пусть и — корень n-й степени из единицы. Предположим, что 1 — ш% для 1 ^ 2 < п не является делителем нуля. Тогда по предыдущей лемме Vw * Vw-i = n • Id, откуда получаем: det(K,) -det^-i) = nn => Ц(ы* -J) Ц(ш'{ -ш~*) = i<j i<j = ±П(ш*-и>) = ±пп. Это доказывает, что п обратим тогда и только тогда, когда 1 — ш% обратим. Два других пункта (гг), (ггг) — непосредственные следствия (г). Другое (прямое) доказательство пункта (ггг) состоит в замечании, что в поле А характеристики р хтр — 1 = (хт — 1)р, и потому хтр _ ^ => хт = 1. Следовательно, элементы поля характеристики р не могут иметь порядок тр. Существует характеризация примитивных корней через циклотоми- ческие многочлены. Напомним вкратце определение и некоторые основные свойства этих многочленов (которые понадобятся в дальнейших исследованиях). (5) Определение и элементарные свойства. (г) Для n G N* обозначим через С/псС мультипликативную группу, состоящую из корней n-й степени из единицы, а через Рп С Un подмножество в Un, состоящее из корней из единицы порядка п. (гг) п-й циклотомический многочлен — это многочлен, определяемый формулой: ФП{Х) = ПгеРп(Х — С)- (ггг) Рекуррентное соотношение Хп-1 = Цфа(Х) = ФП(Х) П МП (2) d\n d\n d?n с одной стороны, позволяет вычислять многочлен ФП(Х), а с другой, показывает, что Фп(^0 является унитарным многочленом с целы-
V-1.3 Примитивные корни из единицы 589 ми коэффициентами. В частности, если р — простое число, то ФР(Х) = ХР-1 4- Х*>-2 4- ... 4- X2 4- X 4- 1. Упражнение 10 в конце главы позволяет найти таблицу из 12 первых циклотомических многочленов: Фг(Х) = X - 1, Ф5(Х) = X4 4- X3 4- X2 4- X 4- 1, Ф2(Х) = X 4-1, Ф6(Х) = X2 - X 4-1, Ф3(Х) = X2 4- X 4-1, Ф7(Х) = X6 4- X5 4- • • • 4- X 4-1, Ф4(Х) = X2 4-1, Ф8(Х) = X4 4- 1, Ф9(Х) = Х64-Х34-1, Фю(Х) = X4 - X3 4- X2 - X 4-1, Фц(Х)=Х104-Х94----4-Х4-1, Ф12(Х)=Х4-Х24-1. (6) Теорема. Для элемента, и коммутативного кольца А следующие условия эквивалентны: (г) и — примитивный корень n-й степени из единицы; (гг) Ф„(и>) = 0, и п обратим в кольце А. Доказательство. • Докажем сперва импликацию (г) =>> (гг). Для любого целого d многочлен Ф<*(Х) — делитель в ЩХ] для Xd — 1. Фл(^>), следовательно, делит ud — 1, и, если d — собственный делитель п, то, поскольку и примитивен, ud — 1 обратим в Л, и тоже самое верно для Ф<*(и>). Формула (2), примененная к X = о>, позволяет тогда заключить, что Фп(и) = 0. Тем самым доказано, что п обратим. • Докажем обратное. Равенство многочленов Хп — 1 = Фп(Х)ф(Х) показывает, что ип = 1. Дифференцируя его, находим пХ"-1 = Ф^(Х)д(Х) 4- Ф„(Х)д/(Х). Применяя это равенство к X = о>, получаем пшп~1 = Ф'п(и>)(2(и>)у что доказывает обратимость Q(w). Следовательно, так как Q(X) = ]~[Ф^(Х), где d — собственный делитель п, то Ф<*(и>) — обратим. Кроме того, для такого d равенство Xd — 1 = ПеЫ^е(Х) показывает, что wd — 1 обратим. В завершение доказательства пусть i удовлетворяет условию 1 ^ г < п. Если d = НОД(г,п), то существуют такие целые и и vy что d = ui 4- vny причем u ^ 0 (достаточно заменить и на г/4-kn и v на v — fci). Многочлен X* — 1 является делителем (в ЩХ]) многочлена Хи% — 1 и, следовательно, о>* — 1 делит о>ш — 1 = u>d — 1, что доказывает обратимость ш% — 1.
590 V-1 Сложность умножения двух многочленов Приложение : кольца, содержащие примитивные корни фиксированного порядка Пусть q — целое четное число. По упражнению 10 Ф4Я(Х) = ФЯ(Х4) (так как q четно) и, в частности, <$4g(l + 0 = Фд((1 + г)4) = Фд((2г)2) = Фя{—4). Следовательно, если m — делитель Фд(-4), юаимно простой с <7, то Ц-г — примитивный корень порядка 4д в 2£[г]/(т). Действительно, в этом кольце <$4g(l + i) = 0 и 4д обратим по модулю m (m — юаимно простое с q и с 4, так как m | Фд(—4) | (—4)^ — 1). 1. Для q = 18 имеем Ф^Х) = X6 - X3 + 1 и Ф18(-4) = 4 161 = 3 х 19 х 73. Следовательно, 1 + г — примитивный корень порядка 72 в кольце Z[i]/(19) (которое, кстати говоря, является полем, так как 19 = 3 (mod 4)). 2. Для q = 24 имеем Ф24(*) = Xs - ХА + 1 и Ф24(-4) = 65281 = 97 х 673. 1 + i является примитивным корнем порядка 96 по модулю 97. Имеется также примитивный корень порядка 96 в Z/97Z, равный 5. Первый из двух примеров показывает, что в Щг\ иногда можно найти примитивный корень по модулю т, большего порядка, чем т — 1 (поле Z/(19) дает только корни из единицы, порядок которых делит 18). Второй пример показывает, что можно легко найти примитивные корни, даже если рассматриваемое кольцо, не является полем (97 = 1 (mod 4), и справедлива факторизация 97 = 42 + 92 = (4 + 9г)(4 — 9г)). 1.4 Дискретное преобразование Фурье и циклическая свертка Фундаментальное свойство примитивных корней, которое нас здесь интересует, состоит в следующем: если и — примитивный корень n-й степени из единицы, то Vw * Vu-i = n - Id, что означает, что Vw-i = n~l - Уш (так как по теореме б п обратим в А). Это свойство весьма существенно. В нем, по сути, утверждается, что интерполяция, являющаяся обратной к вычислению значений, в действительности сводится к вычислению многочлена. Точнее: (7) Предложение. Пусть и — примитивный корень n-й степени из единицы в кольце А. Для интерполяции многочлена Р = £^а;Х' по значениям hj = P(u>i) при j = 0,l,...,n — 1 достаточно найти значения многочлена Р} определенного соотношением Р = J^OjX-7 в точках ш~х, где г = 0,1,...п— 1. Тогда коэффициенты а,- многочлена Р определяются по формулам а, = п-1 • Р(и~%) при г = 0,1,..., п — 1.
V-1.4 Дискретное преобразование Фурье и циклическая свертка 591 Пример Проиллюстрируем это последнее утверждение с помощью корня 6-й степени из единицы. Циклотомический многочлен Фб(^0 = X2 — X + 1, и, например, Фб(Ю) = 102 — 10 + 1 = 91. Поэтому б обратимо по модулю 91, ш = 10 — примитивный корень 6-й степени из единицы в Z/91Z. Обратный к 6 по модулю 91 элемент есть — 15. Поэтому для вектора с коэффициентами из Z9i имеем: 1 10 9 -1 -10 -9 тогда и только тогда, когда /6о\ ы ь2 Ьз 64 \bj f1 \1 /о0\ 01 02 а3 а4 = -15 fl \1 1 -9 -10 -1 9 10 1 9 -10 1 9 -10 1 -10 9 1 -10 9 1 -10 9 1 -10 9 1\ -9 -10 -1 9 10/ /а°\ 01 02 аз а4 \а5/ 1 9 -10 1 9 -10 1\ 10 9 -1 -10 -9/ /6о\ h 62 63 64 \bj (8) Определение. Пусть и — примитивный корень n-й степени из единицы. Дискретное преобразование Фурье ТШ1 ассоциированное с о>, есть по определению преобразование из пространства АП[Х\ в пространство Ап, определенное по правилу: ГШ{Р) = (Р(ы°), Р^1), Р(ш2),..., Piw"-1)), (3) где в рассматриваемом равенстве для Тш : Ап Э a —У а Е Ап, hj = Yl aiш%^ - Для краткости используется аббревиатура Dft на п точках (от английской фразы discrete Fourier transform,), или DFTn, либо DFTnu,. В дальнейшем будем также рассматривать преобразование Фурье как автоморфизм на пространства функций из [0, п[ в А. С этой функциональной точки зрения результат преобразования Фурье F = Fuif) некоторой функции /:[0,п[ —У А есть также функция F:[0yn[—> Ау заданная соотношением F(j) = J2f{i)uj^ для 0 ^ j < n и обратным преобразованию Фурье Тш является, с точностью до мультипликативной константы п, преобразование Фурье Тш-\.
592 V-1 Сложность умножения двух многочленов Отступление. Обозначим через U С С* подгруппу, состоящую из всех комплексных чисел, имеющих модуль 1, а через Un подгруппу всех корней п-й степени из единицы. Любая локально компактная группа G обладает положительной мерой, инвариантной относительно трансляций и единственной с точностью до мультипликативного множителя: это так называемая мера Хаара. Обозначим через G — группу характеров <3, т.е. множество непрерывных морфизмов \ из G в U. G наделена структурой мультипликативной группы, индуцированной той же операцией, что и U. Если / € Ll(G), т.е. / : G —► С интегрируема на <3, то можно определить функцию / на G следующим образом: fix) = [ f(*M*)dx, xeGy Jg и отображение Ll{G) Э / i—>• / со значениями во множестве функций из G в С является преобразованием Фурье. В частности, пусть G — аддитивная группа Zn целых чисел по модулю п (в этом случае мера Хаара является мерой, со значением 1 в каждой точке). Если а € U есть корень п-й степени из единицы, то отображение Ха, определенное для j € Zn с помощью Xa{j) = crJ, задает элемент из Zn, т.е. характер на Zn, и нетрудно убедиться, что Un Э a i—)■ \а € Ъп является каноническим изоморфизмом групп. Если / : Zn —> С является функцией, то преобразование Фурье функции / можно отождествить с функцией / из Un в О /(а)= Y. «'ЛО. «^„. Если, кроме того, и> — фиксированный примитивный корень п-й степени из единицы, то любой элемент а записывается единственным способом в виде ш3, где j — класс вычетов по модулю п, что дает изоморфизм (не естественный, так как он зависит от выбора ш) групп Un и Zn. Преобразование Фурье функции / дает тогда f(j) = J^u/-7/(i) для j £ Zn, что объясняет используемый термин «преобразования Фурье». Причиной рассмотрения преобразования Фурье в этой книге является его применение к произведению многочленов. Если / и g — две функции из [0, п[ в Л, представляющие два многочлена, произведение / * g которых имеет степень, меньшую п, то ?М*9)=Гш(Л х^Ы,
V-1.4 Дискретное преобразование Фурье и циклическая свертка 593 где слева стоит произведение многочленов, а справа — обычное произведение функций. Но если условие deg(/ * д) < п не выполняется, то и в этом случае существует одна и только одна функция h : [0, п[ч Л такая, что ТШ{К) = Tw(f) x Тш{д). Как выразить h через / и д? Что же такое h по отношению к / и д? (9) Определение и свойство. Для любых двух функций f и g из [0, п[ в Л циклической сверткой h = f-kg называется функция той же природы, определенная по правилу h(k)= У2 /(г)#0)> удовлетворяющая i+j=k (mod n) соотношению Тш(/*g) = Тш(/) х Тш(д). (4) Другое определение состоит в том, что функция f * g представляет произведение многочленов J2 /(г)^' и ^2яЦ)^ по модулю многочлена Хп — 1. В этом случае говорят о циклической свертке на п точках, которую обозначают Ссп. Доказательство формулы (4). Формула Тш(} *g) — Fwif) x ?ш(д) получается с помощью элементарных вычислений, использующих соотношение ип = 1 (а не то, что ш — примитивный корень n-й степени из единицы). В действительности хороший способ понять преобразование Фурье состоит в том, чтобы определить его на любом А[Х] с помощью ТШ(Р) = ( Р(и>°), Р(шг),..., Р(а;п_1)), учитывая, что свойство ТШ(Р * Q) = ТШ(Р) х Fu>(Q), очевидно, и перейти к фактору по модулю Хп — 1 (так как ТШ(ХП — 1) = 0). При этом можно сразу |_определять Тш на факторкольце А[Х]/(ХП — 1). Пример Циклическая свертка / • д на матричном языке может быть также получена различными способами как произведение циркулянтной матрицы, на вектор; например, при п = 4: f*9 = //о f/l ,/а \/з /з /о /i /2 h /з /о /l h\ h\ /з /о/ /</о\ [л 1 92 \дг) (h _[/» " /з \/о //о -(Л " Л \л /2 /з /о /1 /l /2 /з /о /з /о /l /2 /2 /з /о /l /о\ л| л /з/ /з\ /о л л/ /9з 92 91 \до /9о 9з 92 \щ 38- 1017
594 V-2 Быстрое преобразование Фурье 1.5 Обзор различных понятий Три объекта: произведение многочленов, циклическая свертка и преобразование Фурье — тесно связаны уже по своим определениям. Но они также связаны и алгоритмически. В дальнейшем мы уточним, как алгоритм, позволяющий вычислить один из этих объектов, может быть использован для вычисления другого. Ясно, что быстрое вычисление дискретного преобразования Фурье, как следствие, позволяет быстро вычислить свертку, произведение многочленов и произведение целых чисел. Обратно, способ быстрого вычисления свертки P*Q для фиксированного Р в некоторых случаях может быть применен к дискретному преобразованию Фурье. Вот достаточно простой пример этого. Формула хо хЛ (уо\ _ fa(2/o + 2/1) + Р(уо -yi) х\ x0J\yiJ \а{уо + 2/i) -Р(Уо + 2/i) Я0 + Я1 „ хо - х\ где а= - и /? = - » позволяет осуществить для данных фиксированных xq и х\ свертку на двух точках с помощью 4 сложений и 2 умножений (вместо 2 сложений и 4 умножений). Можно применить этот результат к 2 х 2-подматрице, участвующей в дискретном преобразовании 1 1 1 \ /ао\ Фурье (Dft) на трех точках, представленном 1 и и2 I I а\ I слева. Это позволяет реализовать DFT3 с помо- и>2 ш ) \02 / щью 6 сложений и двух умножений (вместо 6 сложений и 4 умножений). Данный метод рассматривается в упражнениях 22 и 24 в конце главы. В этом смысле реализация СС2 — основная часть в вычислении DFT3. В действительности это является частным случаем результата Рейдера, показавшего, что: для простого числа р реализация Ccp_i — основная часть для вычисления Fftp. Читатель может поставить законный вопрос: «каков интерес в выигрыше двух умножений на Dft3, тогда как изначальная цель — быстрое вычисление DFTn для больших числа п?» В следующем разделе будет показано, как можно свести одно Dft на большом числе точек к нескольким Dft на небольшом числе точек. 2 Быстрое преобразование Фурье В предыдущем разделе показана важность корней n-й степени из единицы для исследования задачи интерполяции многочлена, как частного
V-2.1 Случай, когда порядок есть степень двойки 595 случая вычисления значений. Но не только этим они интересны. Предметом данного раздела являются описание и оценка сложности одного метода вычисления значений, известного под названием метода Кули — Тъюки, который позволяет осуществить вычисление значений многочлена в случае, когда число п «сильно составное». Эффективная реализация этого метода будет получена в следующих разделах. С исторической и методической точек зрения удобно рассмотреть сначала случай, когда п есть степень двойки, затем случай, когда п — произвольная степень какого-либо числа и, наконец, когда п просто составное. Читатель может узнать подробности в статьях Иейтса «The Design and Analysis of Factorial Experiments* и Кули и Тьюки «An algorithm for the Machine Calculation of Complex Fourier Series*. Напомним, что метод, который будет далее излагаться, предназначен для вычисления и интерполяции многочленов степени, строго меньшей п, в п точках, являющихся степенями корня n-й степени из единицы. 2.1 Случай, когда порядок есть степень двойки Покажем теперь, что для вычисления значений многочлена степени < п в точках о>°, ы1, и>2, ... шп~1} где и — корень n-й степени из единицы, достаточно C?(nlogп) операций кольца (умножений, сложений), если п — степень двойки. Пусть Р = Y^aiXx — многочлен степени < п, который запишем, разделив на две части слагаемые, содержащие X в четных и нечетных степенях: Р(Х) = а0Х°+а2Х2 + ...+ап-2Хп~2+X{aiX°+a3X2 +...+an_iXn"2), или же: Р(Х) = Р0(Х2)+ХР1(Х2), гдеР0(Х)= £ а*Х* 0^t<n/2 ИР1(Х)= J2 а2,-+1^. 0^t<n/2 Сразу заметим, что многочлены Ро и Pi имеют степени < п/2. Теперь важно убедиться, что для нахождения значений Р в п точках Х{ = ш*, г = 0,1,2,...,п — 1, где и — корень n-й степени из единицы, необходимо вычислить значения Ро и Pi, но только в п/2 точках. Это следствие равенства Р(х;) = Ро{х2) + Х{Р\(х2) и того, что, ввиду ип = 1, для п/2 ^ г < п, имеем х2 = х\_{. 38*
596 V-2 Быстрое преобразование Фурье (10) Теорема (Кули и Тьюки, 1965). Пусть ш — корень п-й степени из единицы в кольце Ау степени которого ш°', и1 у и2 у ... u>n-1 затабулированы. Если п — степень двойки, то для вычисления многочлена Р степени < п во всех этих точках достаточно О(n log n) операций. Доказательство. I Пусть Тп — число операций, необходимых для вычисления многочлена степени < п в точках о>°, о;1, о>2, ..., ип~1. Равенство Р(х{) = Ро(я2) + XiP\(x?) для 0 ^ г < п, в котором имеется одно сложение и одно умножение, может использоваться рекурсивно, так как, с одной стороны, полиномы Ро и Pi имеют степени < п/2, а с другой стороны, новые точки, в которых необходимо производить вычисления, х2 — о>2', являются степенями о>2, корня степени (п/2) из единицы, чьи значения уже затабулированы. Это равенство приводит к рекуррентному соотношению Тп = 2Тп/2 + 2п, где слагаемое 2Тп/2 получается из вычислений значений многочленов Ро, Pi степеней < п/2, а слагаемое 2п — дополнительные п сложений и п умножений. Так как Т\ = 0, то по индукции легко доказать, что Т2к = 2к+1к = 2fc+1 log2 2к, что дает возможность выразить как функцию от n = 2k: Tn = 2nlog2 n. Числа умножений можно еще уменьшить наполовину. Сначала нужно заметить, что u>n/2 — корень квадратный из единицы, и значит, в частности, если и — примитивный корень п-й степени из единицы, ип12 = — 1. В этом случае х,+п/2 = u>,+n/2 = — ш% = — £,, и удобно совместить вычисления Р(х,) и Р(х|+п/2)* Р(х{) = Р0(х2) + x,Pi(x2), Р(*,+„/2) = Р0(х2) - x,Pi(x2). Если Tnadd (соответственно, Tnmult) обозначает число сложений (соответственно, умножений), необходимых для вычисления значений многочлена степени < п в точках о>°, ш1, о>2, ..., u>n-1, то получаем следующие два рекуррентных соотношения: Tnadd = 2T£f$ + n и Tnmult = 2T^lt + n/2, что дает Tnadd = n log2 n и Tnmult = ±n log2 n. Следует заметить, что это незначительное улучшение не меняет |_порядка величины, который составляет 0(n log n). (11) Определение («быстрое преобразование Фурье»). Быстрым преобразованием Фурье (коротко Fftj называется принцип вычисления дискретного преобразования Фурьеу описанный выше.
V-2.2 Случай, когда порядок — произвольная степень 597 Чтобы выделить целое число п, говорят о быстром преобразовании Фурье на п точках или, сокращенно, FFTn. Замечание. Существуют другие эффективные методы вычисления (Гуда, Винограда), но лишь метод Кули — Тыоки называют быстрым преобразованием Фурье, вероятно, по историческим соображениям. Впрочем, увидим в дальнейшем, что обозначение FFTn применяется и в более общем случае, когда п не обязательно степень двойки. 2.2 Случай, когда порядок — произвольная степень Предположим теперь, что п является степенью целого числа q ^ 2: п = qk. Тогда в многочлене Р(Х) группировка одночленов от одного и того же показателя по модулю q приводит к записи: Р{Х) = Р0{Х<>) + ХРг(Х*) + Х2Р2{Х<>) + ... + X^'lPq^{X% где degPi<qk-\ и позволяет установить, аналогичным способом, результат, доказательство которого содержится в упражнении 16. (12) Предложение. В кольце А пусть и является корнем п-й степени из единицы, степени которого и0, и1, и2, ..., wn~l затабулированы. Если п — степень q, то вычисление значений многочлена Р степени < п во всех точках, являющихся степенями и, требует не более 2(q — l)n logg n операций. Замечание. Если положить Eq = 2(q — l)nlogqn, что является числом необходимых операций для предыдущего метода при п, равном степени q, то можно увидеть, что jf- = Л и это выражение принимает наименьшее значение при q = 2. 2.3 Пример итеративного алгоритма В этом разделе мы изучим более подробно рекурсивные соотношения из предыдущего раздела для получения рекуррентных соотношений, позволяющих реализовать преобразование Фурье в итеративной форме. Действительно, рекурсивная реализация требует больше памяти и времени, что выражается формально в увеличении константы, входящей в обозначение 0(n log n). Будем двигаться в двух направлениях:
598 V-2 Быстрое преобразование Фурье • проиллюстрируем дерекурсивизацию метода Кули — Тьюки на примере п = 23, следуя доказательству теоремы из предыдущего раздела; это позволит нам выявить важность записи индексов в двоичной системе счисления (по основанию 2); • наметим другой подход с помощью более общего метода дере- курсивизации: это метод Йейтса, который легко преобразуется в итеративную схему и, таким образом, более близок к реализации, которую мы хотим осуществить. 2.3.1 От рекурсии к итерации Мы должны вычислить значения dj = Р(и^) многочлена Р = а о + а\Х + <*ъХ2 + с*зХ3 + оцХА + а$Хъ + а6Х6 + а^Х7 в последовательных степенях и. Следование доказательству теоремы 10 приводит к представлению многочлена Р(Х) в виде Pq(X2) + ХР\(Х2). Значит, вычисление значений Р в точках, являющихся степенями о>, приводит к последовательному вычислению значений Ро и Pi в точках 1, о>2, и>4 и ш6. Обозначим через Cj числа, получаемые на этом этапе (от со до с± для Ро и от С4 до С7 для Pi), и запишем для удобства читателя: dj = P(uj) ДЛЯ j = 0, 1, . . .,7, Cj = P0(LJ2J) и cj+4 = P1(uj2j) для j = 0,1,2,3. Применяя основную идею теоремы 10, разложим многочлены Ро и Pi на четную и нечетную части: P0(X) = Poo(X2) + XPoi(X2) и Р1(Х) = Р10(Х2) + ХР11(Х2). Для вычисления Cj достаточно вычислить значения bj полученных четырех многочленов в точках 1 и и4: Роо = &о 4- ot\X Ьо *i Poi = "2 + <*бХ h 63 Р\о = оц + (*ьХ 64 Ьъ Рп = «з + а7Х be h Значения bj очень просто зависят от а^, что дает возможность пе-
V-2.3.1 От рекурсии к итерации 599 реписать цепочку вычислений до dj следующим образом: 6о = С*0 +<*4, 64 = Ctl +C*5, Со = Ьо + &2, са =Ьа + &6, do = со + с а , d4 = со 4- С4 • и;4, bi = с*о + «4 • и>4, 65 =c*i +а5 • и;4, ci = 61 Н- Ьз • и>2, с5 = 65 4- bj • и;2, di = c\ + с5 -и;1, d5 = ci + с5 -и;5, &2 = ot2 +ае, h =ctz +at7y С2 = Ьо 4- &2 • и;4, с6 = &4 4- 66 • и>4, ^2 = С2 4- се • и>2, de = с2 4- се • и>6, Ьз = «2 4- <*в • и;4, 67 = аз 4- <*7 • и*, сз = Ъ\ + 6з • и>6, С7 = 6з 4- &7 * ^6» ^3 =С3 -I-C7 • U>3, ^7 = сз 4- С7 • и;7. Заметим, что число сложений 3 х 8 = 24, что лучше, чем 7 х 8 = 56 операций, необходимых в наивном методе (аналогичный результат для умножений). Можно также отметить, что имеется важное свойство, присущее алгоритмам типа Fft, помогающее в их реализации, — это зависимость между вычисляемыми элементами: пара элементов d вычисляется в качестве функции, определяемой однозначно парой элементов с с теми же индексами (например, (do, d±) вычисляется при помощи (со, С4)), причем это свойство еще сохраняется, когда происходит переход от с к 6. Однако, оно не выполняется, при вычислении 6, что заставляет нас ввести элементы aj, полученные простой перенумерацией элементов ctj: а0 = а0, а\ — а4, а2 = а2, <*з = «6, a4 = c*i, а5=а5, аб = а3, а7 = а7, откуда выводятся формулы перехода от Qj к bj, которые будут подчиняться уже подмеченной общей закономерности: &о = яо + аь 61 = ао 4-fli-tJ4, 62 = 02 + 03, 63 = <*2 4-<*з *^4, &4 = сц + аб, &5 = а4 + а5-и4, Ь6 = а6 + а7, b7 = a6 + a7-w4. Наконец, чтобы сделать вычисления явными, осталось записать правила, которые управляют образованием пар на каждом этапе: • для перехода от а к 6 рассматриваются пары элементов с последовательными индексами и степени величины и4. Получаем: b2i = <*2i + a2*+i • (о;4)2' и 62,>i = a2i + a2i+\ • (w4)2i+1, • для перехода от 6 к с образуютя пары элементов с индексами г и j = i 4- 2 и используются степени величины и2: Cj = bi + &j; • (u>2)' ис,- = &; + &^(и;2У, • наконец, для перехода от с к d необходимо построить пары элементов с индексами г и j = г 4- 4 и использовать степени величины о>: dj = cj 4- Cj • и1 и dj = Ci 4- Cj • a;-7.
600 V-2 Быстрое преобразование Фурье В заключение отметим, что решены не все проблемы реализации. Не определен еще полностью метод, который необходимо использовать, чтобы заставить индексы г, появляющиеся в приведенных выше формулах, пробегать множество нужных значений, когда хотят представить каждую последовательность а, 6, с и d единым массивом. 2.3.2 Суммы Иеитса Цель этого метода — выразить наиболее простым образом объект некоторого этапа как функцию объекта предыдущего этапа: вместе с подходом «вычисление многочленов в точке» рекурсивность применяется к одному многочлену данной степени, превращая его в два многочлена меньшей степени. По этой причине более удобны функциональные обозначения: на данном этапе объект является функцией, которая просто выражается через объект в точности той же природы и вычисленного заранее. Проиллюстрируем этот метод с помощью того же примера п = 23. Возьмем функцию / : [0,23[—У А и вычислим преобразование Фурье / : [0,23[—> Л, определенное, как обычно, с помощью f(j) = Х)о<*<23 /(0 ' u;,J* Для 0 ^ j < 23. Обозначим F$ = f преобразование Фурье /, вводя обозначения таким образом, что Fs выражается с помощью другой функции i<2, которая в свою очередь выражается через... и, наконец, функция Fo выражается просто через /, причем, все эти функции являются функциями из [0,23[ в А. Теперь опишем различные этапы, позволяющие переходить от Fo к i<\, от F\ к F<i и от F<i к F3, где Fo используется в качестве начального; очевидно, что указанные объекты соответствуют объектам а, 6, с, d предыдущего раздела. Начнем с того, что представим индексы г и j в системе счисления по основанию 2: г = («2*1 *о) = *222 + i\2 + г0 и j = (J2JiJo)=J222+Ji2 + Jo Для 0^i,j<23. Так как и2* = 1, то имеем равенство uij = wMiaiiio) *w2»i(iijo) J|tW22»a(io)j которое позволяет переписать сумму £^t. /(г)и;*-7 в виде £w.'o<i2iiio) £w2H<iiio) ^u;23,^0>/(i2iii0>. »0 »1 »2 Можно определить частичные суммы i<\, F2, F3 следующим образом: Fi(i0iijo> =DX'''U°>/(i2iiio>, *2<*оji Jo) = En E„ • • • = Ем wM,(,,jl,fi(io iiio), F3(J2iiio) = E,„ Em E,-3 • • • = E«o wloUa j,jo>^(io Jiio).
V-3 Точное вычисление FFT: произведение многочленов 601 Чтобы сделать формулу, определяющую i<\, похожей на формулы, определяющие ^2,^з, естественно ввести функцию Fo, удовлетворяющую соотношению Fi(ioiijo) = Yli ш2 l3^°^o(*o*i Ь)> Для него предполагается Fo(ioiii2) = /(«2*1*0)» и, таким образом, как бы заново получаем результаты предыдущего абзаца, но в более общей форме. 3 Точное вычисление FFT : произведение многочленов В дальнейшем мы докажем формулы, позволяющие вычислять Fft в общем случае. А пока обратимся к формулам, позволяющим вычислять дискретное преобразование Фурье, когда число точек интерполяции (точек, в которых вычисляются значения) является степенью двойки. Это позволяет реализовать Fft в указанном частном случае и применить метод вычисления произведения многочленов, рассмотренный в начале этой главы. 3.1 Реализация FFT, когда число точек есть степень 2 Итак, приведем явные формулы для вычисления Fft, полученные при условии п = 2к из следствия 28, доказанного в разделе 4.2.2. (13) Лемма. Пусть п = 2к. Обозначим через (wm-i • • -hio) = im2m-Mm-i2m"1 + • • • + ii2 + г'о представления целого числа г в системе счисления с основанием 2. Пусть a — инволюция на интервале [0, п[, инвертирующая двоичную запись числа: (т{1^-\.. .iiio) = (ioh • • -**-i). Пусть f — последовательность элементов из А, индексированная числами из интервала [0,п[. Определим последовательность из к +1 массива Fo, F\,..., Fk с индексами на интервале [0, п[ посредством следующего рекуррентного соотношения, применимого для 0 <Z.m < k: Fm+l(to • • Лк-т-2*>к-т-\1>к-т • • -*/c-l) = = Fm(t0 • • .tk-m-2Qtk-m • • .tk-l) + + Fm(Ml • • .**-m-2l<*-m • • .<*-l) W2fc"m"1<tfc- —1'"tfc-1>, где массив F0 определен по формуле Fo(i) = f(<r(i)). Последний массив Fk дает преобразование Фурье f для /, Fk(j) = f(j) при 0 ^ j < п.
602 V-3 Точное вычисление FFT: произведение многочленов Эти несколько сложные формулы могут выражаться различным образом (и, возможно, даже проще), если исключить ссылки на бинарную нумерацию, прямое обращение к которой может представлять трудность для языков программирования высокого уровня. function Fast-Fourier-Transform (/ £ А2 begin for s in 0 .. 2k loop F(s) <— /Ms)); end loop; Loop-On-m : for m in for t in 0 .. 2k-m~1 so <—2*t*2m; for>in0..2m- i-0-j i— to + i; Go *— F(iJ).j) F(LO.j) <— Go end loop; end loop; end loop Loop-On-m; 0 .. k- 1 loop — 1 loop t'l <— 1 loop •-W ; df + Gi; end Fast-Fourier-Transform\ io + 2m; <— и + з\ — F(Ll.j F(LIJ) i ) return F £ A2 is ) * a,'*2* — Go- -m-l 1 Gi; Алгоритм 1. Быстрое преобразование Фурье в кольце А (14) Следствие. Пусть и — примитивный корень 2к-степени из единицы. Используя предыдущие обозначения, для m < к, массив Fm+i может быть вычислен, исходя из Fm по следующим формулам: (5) Fm+1(2m+4 + j) = Fm(2m+4 + j)+ + Fm(1m+4 + 2m+j)xw^k-m-\ Fm+1(2m+4 + 2m + j) = Fm(2m+4 + j)- -Fm(2m+1i + 2m+j)xw^'"m-1, при ограничениях 0 ^ i < 2fc-m_1 и 0 ^ j < 2m. Доказательство. ПОЛОЖИМ i = (t0.. .tfc_m_2>, j = (tk-m ■ ■ -<*-l) И Г = tk-m-l- ЭтИ числа удовлетворяют неравенствам О ^ i < 2k~m~1 и 0 ^ j < 2m. Естественно, можно записать
V-3.2 Как реализовать FFT? 603 (t0 . . .*/c-m-2 Г tk.m . . .**_!> = 2m+1i + 2тГ + j и 2/c"m"1(r**_m .. .tk-i) = 2k-m-l(2mr + j) = 2k~lr + 2/c-m-1j. В этих формулах можно заметить, что все эти последовательные массивы могут вычисляться сразу: действительно, в формуле 5 появляются только элементы с индексами 2т+1г + j и 2т+1г + 2т + j массивов Fm и Fm+i образуют такие пары, и больше они не встречаются нигде при переходе от Fm к Fm+i. Теперь можно сформулировать полный алгоритм 1 вычисления быстрого преобразования Фурье, когда число точек есть степень двойки (аналогичный алгоритм для числа точек qk с произвольным д, менее предпочтительный, можно увидеть в упражнениях 16 и 17). 3.2 Как реализовать FFT? Какие средства необходимы для реализации Fft? Из предыдущего видно, что нужно работать в некотором кольце Л, содержащем примитивные корни степени п из единицы, где п — степень 2, которое будет порядком используемого преобразования Фурье. (15) Лемма. Пусть р — простое число. Алгоритм Fft позволяет вычислить дискретное преобразование Фурье на п точках в Z/pZ за 0(n\ogn) модулярных операций, если выполнены следующие условия: п — степень числа 2 и п делит р — 1. Доказательство. I Группа U(Z/pZ) обратимых элементов в Z/pZ является циклической порядка р — 1. Если £ — образующий элемент этой группы, то ш = f * — элемент порядка п, являющийся корнем n-и степени из единицы. То, что сложность ранее полученного метода есть O(nlogn), следует из теоремы 10 и свойств, которые будут доказаны в ходе общего исследования метода Кули — Тьюки (см. разодел 4.2.1). Второй вопрос: какие средства должен предоставлять пакет вычисления Fft? Для ответа на этот вопрос надо вспомнить, что в интересующем нас случае произведения многочленов, наряду с преобразованием Фурье необходимо использовать его обратное для интерполяции произведения многочленов. Поэтому нужно больше, чем можно было
604 V-3 Точное вычисление FFT: произведение многочленов предположить: когда применяют преобразование Фурье часто бывает полезно осуществить обратные преобразования. (16) Лемма (произведение двух многочленов по модулю р). Пусть р — простое число. Для существования алгоритма cO(n log п) модулярными операциями перемножения посредством Fft двух многочленов R и S над Ъ1р1\Х\, степени которых удовлетворяют соотношениям 2 • deg R < п и 2 • deg S < п, достаточно выполнения следующих условий: п является степенью двойки и п делит р — 1. Доказательство. I Пусть и — корень порядка п из предыдущего доказательства. Если Тш обозначает преобразование Фурье, связанное с этим корнем о;, то можно вычислить произведение многочленов R и S следующим образом: R x S = n~1Tu,-i(Jru,(R) * TW(S)), где п"1 — обратный элемент к п по модулю р, который, очевидно, можно представить в |_этом случае в виде целого р — (р — 1)/п. С точки зрения умножения многочленов с целыми коэффициентами, а не модулярными, не все так просто. Действительно, необходимо учитывать размер коэффициентов произведения, которые могут оказаться существенно больше, чем коэффициенты исходных многочленов. Однако, благодаря китайской теореме об остатках, можно всегда вычислить произведение многочленов с целыми коэффициентами, используя произведения модулярных многочленов. (17) Лемма. Для многочлена Р = ^2чР%Хх Е ЩХ] положим \\Р\\ = тах{|р,|}. Тогда для R, S eZ[X] имеем \\RS\\ ^ ||fl||x||S||xmin(l+deg Л, 1+degS). (18) Предложение (произведение многочленов с целыми коэффициентами). Для быстрого вычисления произведения двух многочленов степени, не превосходящей D, и коэффициентами, по модулю, не превосходящими М, при помощи простого числа р и целого п, являющегося степенью двойки, где п делит р — 1, достаточно выполнения неравенств 2(D+l)<n и (D+l)x М2 < р. Пакет вычисления Fft должен содержать функцию, вычисляющую прямое произведение Фурье, и функцию, вычисляющую обратное преобразование Фурье.
V-3.2 Как реализовать FFT? 605 Спецификация пакета вычисления FFT generic type Index-Type is range <>; type Used-Integer is range <>; type Sequence is array (Index-Type range <>) of Used-Integer; The-Prime-Number : Used-Integer; The-Primitive-Root : Used-Integer; k-Max : Natural; package Fast-Fourier-Transform is function FFT (} : Sequence) return Sequence; function FFT-Inverse (f : Sequence) return Sequence; end Fast-Fourier-Transform; Этот пакет является настраиваемым и имеет в качестве параметров настройки используемые целые типы: Index-Type (индексы), Used-Integer (элементы рассматриваемых последовательностей) и тип Sequence, представляющий последовательности, к которым применяется Fft (тип, который будет определен пользователем). Затем идет целое The-Prime-Number, по модулю которого ведутся все вычисления, The-PrimitiveMoot, примитивный корень (образующий группы обратимых элементов) по модулю рассматриваемого простого числа и k-Max, показатель наибольшей степени двойки, делящий порядок элемента The-PrimitiveJioot. Пакет Fast-Fourier.Trans form содержит две функции FFT и FFT-Inverse, которые применяются к последовательностям, длина которых есть степень двойки с показателем, меньшим k-Max, равная количеству точек, в которых вычисляется соответствующее преобразование Фурье или его обратное. Очевидно, что пользование этим пакетом предполагает совместное и согласованное использование функций FFT и FFTJnverse. В частности, (г) если р есть значение параметра The-Prime-Number, а £ — значение The-Primitive-Root и Armax — значение k-Max, то 2кшлх \ р — 1 и £ имеет порядок р — 1, (гг) если, кроме того, / — последовательность целых чисел по модулю р и длина / есть 2к, то v = f з*~ — корень из единицы степени 2к и: • функция FFT, примененная к /, вычисляет Тш(/), • функция FFT-Inverse, примененная к /, вычисляет T~l{f). В принципе надо бы также предусмотреть предвидимые в этой спецификации исключение, которое бы возбуждалось, когда передаваемые
606 V-3 Точное вычисление FFT: произведение многочленов параметры несовместны: например, корень не примитивный, длина последовательности — не степень 2 или слишком велика... 3.3 Умножение многочленов Теперь необходимо выбрать простое число р, по модулю которого будет вычисляться преобразование Фурье и произведение многочленов. В предыдущем разделе мы рассмотрели несколько формальных свойств, связывающих это целое число, являющееся порядком преобразования Фурье, и корень из единицы. Речь идет теперь о том, чтобы практически применить эти свойства для реализации произведения многочленов. Какие практические ограничения обусловливают выбор р? Во-первых, р — 1 должно быть составным, делящимся на возможно большую степень двойки, чтобы иметь возможность вычислять многочлены большой степени. Кроме того, необходимо легко осуществлять вычисления по модулю р, в частности, умножение. Точнее говоря, самая крупная операция, осуществляемая в агоритме Fft, имеет вид: Fm+i(. • •) <— (Fm{...) +or- x Fm{...)) mod p. Следовательно, машинное умножение для вычисления таких больших выражений, как (р — 1) + (р — 1)2= р(р — 1), должно осуществляться без ошибок; другими словами, это последнее выражение должно быть меньше, чем самое большое положительное целое число, представимое в машине. Если имеем дело с машинными словами в 32 бита, то самое большое положительное целое число, которое можно записать, равно, вообще говоря, 231 — 1. Простые числа, приведенные в таблице 1, отвечают приведенным выше ограничениям и «содержат» большие степени двойки. р~~ 13 313 15 361 19457 25 601 € 3 7 3 3 Г1 4438 4389 6486 8534 р-1 13 х 210 15 х 210 19 х 210 25 х 210 Р 39937 18433 12 289 40961 € 5 5 11 3 Г1 15 975 11060 5 586 13654 Р-1 39 х 210 9 x2й Зх212 5 х 213 1 Таблица 1. Простые числа, удобные для вычисления преобразования Фурье, и примитивные корни Дадим теперь спецификацию пакета умножения двух многочленов по простому модулю р.
V-3.3 Умножение многочленов 607 Пакет вычисления произведения двух многочленов package Polynomial-Product is subtype Index-Type is Natural; type Coefficient is range 0 .. 2**16 - 1; for Coefficient9Size use Jtf; p : constant Coefficient := 40-961; type Polynomial is array (Index-Type RANGE <>) of Coefficient; function Fast-Product (}, g : Polynomial) return Polynomial; function Slow-Product (f, g : Polynomial) return Polynomial; end Polynomial-Product; Кроме различных определений типов, он содержит две функции умножения. Первую, «сложную», использующую Fft, и вторую, реализующую наивный алгоритм умножения. Простое число р также является видимым в этой спецификации, так как оно должно быть известно из процедур пользователей. Два многочлена, являющиеся параметрами функций Fast-Product и SlowJ'roduct, должны обязательно иметь степень, строго меньшую, чем 212 = 4096, ввиду выбора/?. Наконец, важно уточнить, что этот пакет нужен только для того, чтобы сопоставить различие во времени вычисления произведения многочленов с помощью быстрого умножения и с помощью наивного метода. Теперь представим программу для измерения времени выполнения. Сравнение алгоритмов вычисления произведения многочленов . with Polynomial-Product; use Polynomial-Product; with Calendar; use Calendar; with Text-IO; use Text-IO; procedure Test-Product is package Duration-IO is new Fixed-IO (Duration); use Duration-IO; package Index-Type-IO is new IntegerJO (Index-Type); use Index-Type-IO; к : Index-Type; Begin-Time : Time; begin Put-Line (^"Умножвнив|_цногочлвнов1_длинЫ(_|2**к|_|(к <= 12)"); loop Get (k); exit when к = 0; declare f, g : Polynomial (0 .. 2**k-l) := ("others => 1); fg : Polynomial (0 .. f'Last + g'Last); begin Put (к, 3);
608 V-3 Точное вычисление FFT: произведение многочленов (Продолжение) . Begin-Time := Clock; fg := Fast.Product (f, g); Put (Clock - Begin-Time, Aft => 2); Begin-Time := Clock; fg := Slow-Product (f, g); Put (Clock - Begin-Time, Aft => 2); New-Line; end; end loop; end Test-Product; Для обеспечения честности предусмотрено исключение сообщений, предназначенных пользователю, а также серия тестов, позволяющих проверить, что вычисленные произведения дают одинаковый результат независимо от использованного метода, а также различные аксессуары, необходимые с точки зрения программирования. Рассмотрим результаты выполнения программы в наивысших точках диапазона использования. к п = 2к Fft «Наивный ал г.» 5 32 0.11 0.11 6 64 0.22 0.50 7 128 0.60 1.98 8 256 1.26 7.91 9 512 2.75 31.69 10 1024 5.93 126.83 И 2048 12.74 507.18 12 | 4096 27.41 2028.62 Рассматривая время вычислений, можно легко установить, что сложность умножения многочленов имеет порядок 0(п2) для обычного алгоритма и O(nlogn) для быстрого алгоритма, использующего Fft. 3.4 Реализация произведения многочленов Это вычисление использует преобразование Фурье и обратное преобразование Фурье для корня из единицы, который предстоит определить. В Z/40 96 YL элемент 3 является примитивным корнем из единицы и может быть использован для вычисления преобразования Фурье на 213 = 8192 точках, что уже не так плохо. Тело пакета Polynomial-Product начинается с конкретизации Fast-Fourier-Transform с его частными параметрами. Затем осуществляется вычисление произведения для каждого из этих двух методов. Реализация пакета Polynomial-Product with Fast-Fourier-Transform; package body Polynomial-Product is
V-3.4 Реализация произведения многочленов 609 Реализация пакета Polynomial-Product (Продолжение) package FFT-p is new Fast-Fourier. Transform ( Index-Type => Index-Type, Used-Integer => Coefficient, Sequence => Polynomial, The-Prime-Number => p, The-Primitive-Root => 3, k-Max => IS); use FFT-p; type Large-Integer is range -(2**31 - ^ .. (2**81 - 1); p-Large : constant Large-Integer := Large-Integer (p); function Fast-Product (F, G : Polynomial) return Polynomial is Result-Length : Large-Integer := 2; begin while Result-Length < F'Length or Result-Length < G'Length loop Result-Length := 2 * Result-Length; end loop; Result-Length := 2 * Result-Length; declare Result-Last : constant Index-Type := Index-Type (Result-Length - 1); Hat-F, Hat-G, Result : Polynomial (0 .. Result-Last); begin Hat-F (F'Last .. Result-Last) :=f ("others => 0); Hat-F (F'Range) := F; Hat-G (G'Last .. Result-Last) := (others => 0); Hat-G (G'Range) := G; Hat-F := FFT (Hat-F); Hat-G := FFT (Hat-G); for t in Result Range loop Result (i) := Coefficient ((Large-Integer (Hat-F (i)) * Large-Integer (Hat-G (i))) mod p-Large); end loop; Result := FFT-Inverse (Result); return Result (0 .. F'Last + G'Last); end; end Fast-Product; function Slow-Product (F, G : Polynomial) return Polynomial is FG : Polynomial (0 .. F'Last + G'Last) := (others => 0); begin for i in F'Range loop for j in G 'Range loop FG(i-hj) := Used-Integer ((Large-Integer (FG(i+j)) + Large-Integer (F(i)) * Large-Integer (G(i))) mod p-Large); end loop; end loop; return FG; end Slow-Product; end Polynomial-Product; Функция FastJProduct должна начинаться с подгонки длины аргументов под степень двойки, превышающей потенциальную длину про- 39 1017
610 V-3 Точное вычисление FFT: произведение многочленов изведения двух многочленов. Эту роль выполняет цикл, которым начинается тело функции и который вычисляет значение Result-Length. Затем остается лишь инициализировать аргументы функции FFT, a потом применить принцип вычисления умножения посредством вычисления значений в точке и интерполяции. Арифметические вычисления должны осуществляться в достаточно большом типе, как это было показано в предыдущем разделе. Тип Large .Integer, определенный в начале тела пакета, позволяет уверенно выпонять все вычисления целых чисел, могущие вызвать переполнение, в типе Coefficient до приведения по модулю р. Этот тип в принципе может применяться на машинах, допускающих 32-битовые слова. Очевидно, что необходимые преобразования типов несколько утяжеляют запись пакета. 3.5 Вычисление преобразования Фурье Для вычисления преобразования Фурье и его обратного необходимо знать корень 2к-степени из единицы, все его степени и инволюцию интервала [0,2fe[, обращающую двоичную запись целых чисел. Среди настраиваемых параметров пакета Fast-Fourier.Transform находится £ (The.PrimitiveJtoot) — примитивный корень по модулю р. Одна из первых операций для вычисления Fft состоит в получении из этого параметра примитивного корня 2*шах-й степени из единицы по модулю р, а = ^2^mlx . Этот корень обозначается в программе через Alpha и его вычисление производится в процедуре Alpha .Determination. Далее необходимо записать степени Alpha в виде массива под именем AlphaJ^ower, конструируемого в процедуре AlphaJ>owers .Computation. Наконец, нужно еще затабулировать инволюцию, необходимую для вычисления Fft, когда число точек есть степень 2. Разумеется при настройке этого пакета не всегда будем вычислять преобразования Фурье на 2ктлх точках. Иногда число точек не столь важно. В этом случае достаточно пробежать массивы Alpha J>ower или BinaryMeverse с хорошо выбранным инкрементом, чтобы почти немедленно получить степени рассматриваемого корня или образ под действием инволюции. Быстрое преобразование Фурье package body Fast-Fourier-Transform is p : Used-Integer renames The-Prime-Number; n : constant Index-Type := 2 ** k-Max; type Large -Integer is range -(2**31-1) .. 2**31-1;
V-3.5 Вычисление преобразования Фурье 611 Быстрое преобразование Фурье (Продолжение) 5 : p-Large : constant Large-Integer := Large-Integer (p); 6 : 7 : Alpha : Large-Integer; 8 : Alpha-Power : array (Index-Type range 0 .. n) of Used-Integer; 9 : Binary-Reverse : array (Index-Type range 0 .. n - 1) of Index-Type; 10 : 11 : procedure j4/pAa_.De*ermi'na*i'on is separate; 12 : procedure Alpha-Powers-Computation is separate; 13 : procedure Binary-Reverse-Tabulation is separate; 14 : 15 : 16 : function FFT (F : Sequence) return Sequence is 17 : F-Hat : Sequence (F'Range); 18 : m : Natural := 0; 19 : TwoJ>ower-k-m-l : Index-Type := F'Length / 2; 20 : Two-Power-k-Max-m-1 : Index-Type := n / 2; 21 : Two-Power-m : Index-Type := 1; 22 : LO, LI, LO-j, Ll-j : Index-Type; 23 : F-Hat-0, F-Hat-1 : Large-Integer; 24 : 25 : begin 26 : for i in F-Hat'Range loop 27 : F-Hat(i) := F (Binary-Reverse (i * (n / F'Length))); 28 : end loop; 29 : 30 : Loop-On-m : loop 31 : for i in 0 .. Two-Power-k-m-1 - 1 loop 32 : LO := 2 * i * Two-Power-m; Ll := LO + Two-Power-m; 33 : for j in 0 .. TwoJ>ower-m - 1 loop 34 : LO-j := LO + j; Ll-j := Ll + j; 35 : F-Hat-0 := Large-Integer (F-Hat (LO-j)); 36 : F-Hat-1 := Large-Integer (F-Hat (Ll-j)) 37 : * Large-Integer (Alpha-Power ((j * Two-Power-k-Max-m-1))); 38 : F-Hat (LO-j) := Used-Integer ((F-Hat-0 + F-Hat-1) mod p-Large) ; 39 : F-Hat (Ll-j) := Used-Integer ((F-Hat-0 - F-Hat-1) mod p-Large) ; 40 : end loop; 41 : end loop; 42 : 43 : exit when Two-Power-k-m-1 = 1; 44 : 45 : m := m + 1; 46 : Two-Power-m := 2 * Two-Power-m; 47 : Two-Power-k-m-1 := Two-Power-k-m-1 / 2; 48 : Two-Power-k-Max-m-1 := Two-PowerJk-Max-m-1 / 2; 49 : end loop Loop-On-m; 50 : 39*
612 V-3 Точное вычисление FFT: произведение многочленов Быстрое преобразование Фурье (Продолжение) 51 : return F-Hat; 52 : end FFT; 53 : 54 : 55 : function FFT-Inverse (F : Sequence) return Sequence is 56 : Inverse-Of-Length : constant Large-Integer 57 : := p-Large - (p-Large - 1) / F'Length; 58 : F-Hat : Sequence (F'Range); 59 : m : Natural := 0; 60 : Two-Power-k.m-1 : Index-Type := F'Length / 2; 61 : Two-Power-k-Max-m-1 : Index-Type := n / 2; 62 : Two-Power_m : Index-Type := 1; 63 : i_0, LI, LOj, LlJ : Index-Type; 64 : F-Hat.O, FJiat.l : Large.Integer; 65 : 66 : begin 67 : for i in FJIaVRange loop 68 : FJIat(i) := F (Binary.Reverae (i * (n / F'Length))); 69 : end loop; 70 : 71 : Loop-On.m : loop 72 : for i in 0 .. Two-PowerJt-m.l - 1 loop 73 : i_0 := 2 * i * Two-Power-m; Ll := LO + Two-Power.m; 74 : for j in 0 .. Two-Power.m - 1 loop 75 : i-0-j := LO -/- j; LlJ := Ll -/- j; 76 : FJIat.O := Large-Integer (F.Hat (LO-j)); 77 : F-Hat.l := Large-Integer (F-Hat (LlJ)) 78 : * Large-Integer (Alpha-Power ((n - j*Two-Power-k-Max-m-l))); 79 : F-Hat (LO-j) := UaedJnteger ((F-Hat-0 + F-Eat-l) mod p-Largt) ; 80 : F-Hat (Ll-j) := Uaed-Integer ((F-Hat-0 - F-Hat-1) mod p-Large) ; 81 : end loop; 82 : end loop; 83 : 84 : exit when Two-Power-k-m-1 = 1; 85 : 86 : m := m + 1; 87 : Two-Power-m := 2 * Two-Power-m; 88 : Two-Power-k-m-1 := Two-Power-k-m-1 / 2; 89 : Two-Power-k-Max-m-1 := Two-Power-k-Max-m-1 / 2; 90 : end loop Loop-Onjm; 91 : 92 : for i in F-Hat'Range loop 93 : F-Hat (i) := Uaed-Integer ((Large-Integer (F-Hat (%)) 94 : * Inverae-Oj-Length) mod p-Large); 95 : end loop; 96 :
V-3.5 Вычисление преобразования Фурье 613 Быстрое преобразование Фурье (Продолжение) return F-Hat; end FFT-Inverae; 97 98 99 100: 101 : begin 102 : Alpha-Determination; 103 : Alpha-Powers-Computation; 104 : Binary-Reverae-Tabulation; 105 : end Fast-Fourier-Transform; В начале тела пакета находится определение (строка 4) типа Large-Integer, используемого для осуществления промежуточных вычислений без риска переполнения. Константа р-Large, фигурирующая после этого определения типа, используется с целью облегчения необходимых взаимных преобразований типов Used-Integer и Large-Integer. Далее идет определение функции FFT, программирование которой требует некоторых уточнений. К этому моменту уже вычислены значения a = £^~ и n = 2*mex, что позволяет вычислить преобразование Фурье на п точках; но то, что можно вычислить с помощью функции FFT, и есть преобразование Фурье на 2к точках при к ^ ктлх: достаточно заменить пару (а, п) на (w, q) = (а я, 2к). Получить степени корня из единицы и = a« очень легко с помощью массива Alpha-Power степеней а. Нужно также уметь вычислять двоичную инволюцию на интервале [0, q[ исходя из инволюции на интервале [0,п[ (уже затабулированной). Пусть <гя : [0,д[—> [0,д[ — двоичная инволюция. Тогда для г Е [0, q[ имеем <rq(i) = 02q(2i). Действительно, если г = (iq-i .. -hio), то получаем: <Tq{i) = (i0ii • • .*'g-i)> 2г = (ig_i.. .iiio0), a2q(2i) = (0ioii.. .ig-i) = crq(i), откуда легко можно вывести, что <rq{i) = <T2q{2i) = ^4g(4i) = ... = <r2fcme,( i), где всегда предполагается, что i находится в интервале [0, q[. Чтобы закончить рассмотрение этого пакета, дадим некоторые комментарии по поводу реализации алгоритма FFT. Если заметить, что переменная Two-Power-m представляет 2т, а переменная Two-Po- werJc-TU-l представляет значение 2*~т-1, и что переменная Two-Po-
614 V-3 Точное вычисление FFT: произведение многочленов werJc.Max.m-l представляет значение 2ктлх~т~1 почти немедленно получаем алгоритм, представленный в конце раздела 3.1. Главное различие заключается в цикле по т, который в алгоритме был циклом for, а теперь является общей итерацией. Это объясняется последовательным вычислением необходимых степеней двойки. В алгоритме это вычисление осуществляется неявно, что может создать впечетление, что выражения 2т и 2к~т~1 вычислялись на каждой итерации. Для реализации обратного преобразования Фурье достаточно продублировать код функции FFT и модифицировать инструкции, записанные в строках 36 и 37. Так, вместо а-72 швх надо использовать в действительности a~j2 ш*х . Во избежание возможных проблем с ограничениями при возведении а в отрицательную степень, когда тип индексов в массиве степеней не обязательно имеет отрицательную часть, можно заменить показатель — j2*max-m-1 на — j2k™**-m~l mod n и использовать выражение ап JZ , что и записано в строках 77 и 78. Такое упрощение возможно, если предварительно затабулировать ап в массиве степеней а. Исходя из этого, можно выразить в явном виде интервал индексов, используемых в объявление массива Alpha-Power. Наконец, другое различие между преобразованием Фурье и его обратным заключается в том, что для получения результата для обратного преобразования Фурье необходимо деление на 2к (это деление производится в строчках 92-95). Так как 2к делит р— 1, то обратный элемент к 2к по модулю р представим в виде р — (р — \)/2к и содержится в интервале [0,р— 1[. Чтобы закончить с этой программой, остается детализировать три отдельные процедуры пакета. . Прекомпиляция данных separate (Fast-Fourier-Transform) procedure Alpha-Determination is Xi-Large : constant Large-Integer := Large-Integer (The-Primitive-Root); begin Alpha := 1; for j in 1 .. (p-1) / Used-Integer (n) loop Alpha := (Alpha * Xi-Large) mod p-Large; end loop; end Alpha-Determination; separate (Fast-Fourier-Transform) procedure Alpha-Powers-Computation is Current-Power : Large-Integer := 1; begin for j in 0 .. Alpha-Power*Last/2 loop Alpha-Power (j) := Used-Integer (Current-Power);
V-4 Подробное рассмотрение метода Кули и Тьюки 615 Прекомпиляция данных (Продолжение) Alpha-Power (j + n/2) := р - Used-Integer (Current-Power); Current-Power := (Current-Power * Alpha) mod p-Large; end loop; end Alpha-Powers-Computation; separate (Fast-Fourier-Trans}orm) procedure Binary-Reverse-Tabulation is Reversed : Index-Type := 0; Digits-Of-Reverse-i : array (0 .. k-Max-1) of Natural := ^others => 0); begin for i in Binary-Reverse 'Range loop Binary-Reverse (i) := Reverse-i; for j in reverse Digits-Of-Reverse-i'Range loop if Digits-Of.Reverse-i (j) = 0 then Digits-Of-Reverse-i (j) := 1; Reverse-i := 2++j + Reverse-i mod 2 ** (j-rl)i exit; else Digits-Of-Reverse-i (j) := 0; end if; end loop; end loop; end Binary-Reverse- Tabulation; Процедура Alpha-Determination требует единственного пояснения: как уже говорилось, £ — примитивный корень по модулю р, переданный как настраеваемыи параметр, не представляет самостоятельного интереса. Нам нужен корень из единицы порядка п. Величина a = f £^~ как раз и есть такой корень. Пояснения к процедуре Binary-Reverse.Tabulation: отправляясь от <т(г), представляемой переменной ReverseJ, и ее массива битов (переменная Digits-Of-ReverseJ), вычисляем массив битов для <т(г + 1). С этой целью достаточно прибавить 1 «в обратном порядке». При проходе массива Digits.Of-ReverseJ обращение порядка достигается тем, что 1 заменяется на 0, пока не встретится первый 0. В этом случае 0 заменяется на 1 и после небольшого модулярного вычисления получается <т(г + 1). 4 Подробное рассмотрение метода Кули и Тьюки Для реализации Fft, как это только что было сделано, нужно заранее иметь в распоряжении явные формулы, определяющие производимые
616 V-4 Подробное рассмотрение метода Кули и Тъюки вычисления. До настоящего времени предполагалось, что такие формулы существуют, а теперь пришло время, получить их. Для этого рассмотрим более общую ситуацию, чем в предыдущих разделах: уже не предполагается, что число точек для вычисления есть степень двойки, но лишь, как в случае Кули и Тьюки, что это число — составное. Использование степеней двойки для реализации очень удобно и утешительно с точки зрения информатики... В этом разделе мы изучим метод Fft, принадлежащий Кули, Тьюки и Иейтсу. Рассмотрим его сначала для частного случая, когда порядок преобразования Фурье есть произведение двух чисел, затем обобщим на случай, когда этот порядок есть произвольные произведения. Это приведет к необходимости использовать смешанную систему счисления (упражнения 33, 34, 35 и 36 дают более абстрактное представление преобразования Фурье на конечных абелевых группах). 4.1 Метод Кули — Тьюки для произведения двух множителей Напомним функциональные обозначения, введенные определением 8. Многочлен Р, значения которого хотим вычислить, представляется функцией / : [0, п[—У А, где /(г) — коэффициент при Xх в обычной записи Р. Теперь для 0 ^ j < п нужно вычислить суммы m= £ /(*')•«"'• (19) Предложение. Пусть п — целое составное число: п = pq, функция f : [О, п[—> А и f — преобразование Фурье /. Функцию f : [0, п[—)• А можно вычислить с помощью промежуточной функции g : [0, п[—у А по следующим формулам: р-1 fUi9+Jo) = £ 9(ioq + jo) ' <><*«+*> t'o=0 q-1 и g{m + jo) = J2 f(w + г'о) * u;,UoP- В этих формулах целые j\ и г'о пробегают интервал [0,р[, а целые jo и i\ — интервал [0, q[. Вычисление f требует n(p + q — 2) сложений и n(p + q - 3) + 1 умножений.
V-4.1 Метод Кули — Тьюки для произведения двух множителей 617 Доказательство. Для вычисления f(j) = J^ /(0 * и%* применим евклидовы деления г = iip + г'о и j = j\q + jo- Целые числа, получающиеся в этих выражениях, удовлетворяют соотношениям 0 ^ г'о, ji < р и 0 ^ jo, Ч < Я- Процедура Кули и Тьюки состоит в переписывании формулы для вычисления значения в точке в виде: Hii4+Jo) = ^f{iiP+ioWoi^ilpi = »0,»1 =£«,w(Efl*>+i°)-w''lw')- (6) »0 »1 В последнем члене равенства суммы (6) множитель cj,iPJ внутренней суммы зависит лишь от остатка jo (числа j) по модулю q. В самом деле, pj = pjo (mod n) и потому u>,lR7 = cj,UoP. Следовательно, если положитьg(ioq+jo) = 5^/(*iP+*o)* ^,UoP, то окончательно получим fUi9 + Jo) = ^29{ioq+jo)uiQJ = £</Ы + jo)>(jl9+io). Что касается сложности, то, для того, чтобы доказать анонсированный результат, достаточно заметить, что вычисление g(ioq+ jo) и f{jiq + jo) требует, соответственно, q — 1 и р— 1 умножений (кроме #(0)) <7(<?)) •••» д{{р — 1)я) и /(О))» И что существует п таких |_вычислений. Интерпретация метода Кули — Тьюки для п = 12 Для изложения этого примера выберем р = 3 и q = 4. Пусть Р(Х) = ^2a,iX% — многочлен степени < 12, вычисляемый в степенях cj, корня 12-й степени из единицы: &j = P(u*) для j = 0,1, 2,..., 10,11. Следуя предыдущему доказательству, введем числа bj = <7(j), определенные явным образом формулой &4ji+j0 = /Oi) + /(л + 3)сс>3-7о + /(ji + б)^6-70 + /(ji + Э)^9-70, что дает следующие промежуточные значения: bo = ao + as + as + ад, 64 = ai + 0,4 + а7 + аю, 6i = а0 + аз^3 + аб^6 + а^9, &5 = <*i + a4u>3 + aju6 + ai0u>9, 62 = a0 + a3cj6 + a6 + a9w6, b6 = ai + a^6 + 07 + aio^6, 63 = a0 + a3cj9 + a6cj6 + a9u3, 67 = ai + a4cj9 + a7^6 + aio^3,
618 V-4 Подробное рассмотрение метода Кули и Тьюки Ьь = а>2 + <*>5 + а>8 + an, &9 = а2 + аъи3 + a8cj6 + ana;9, &ю = а2 + a5cj6 + a8 + anw6, &n = 0,2 + a5^9 + aeo6 + ana;3. Можно тогда вычислить числа hj = /(i), которые получаются по порождающим формулам a4j1+j0 = bjo + bj0+4U4jl+jo + bj0+sw2(4jl+jo\ которые дают нам еще 12 явных формул: а0 = 6о + Ьа + бе, 04 а\ = 6i + 65U/1 + 69U/2, 05 02 = &2 + &6^> + бюО/ , Об аз = 6з + 67U/3 + 6ци/6, 07 Легко убедиться, что число необходимых сложений для этого метода (2 + 3) х 12 = 60 (в общем случае п(р + q — 2)) в сравнении с 11 х 12 = 132 сложениями в наивном методе. Аналогичные оценки можно получить для мультипликативной сложности: наивный метод требует 121 умножение, а полученные сейчас формулы лишь 49 (исключая умножения на 1, стоящие выше или слева; для исключения других умножений на 1 требуется несколько более детальное изучение). Если, кроме того, и;6 = —1, то можно сэкономить еще несколько операций. (20) Теорема (Кули и Тьюки [55], 1965). Пусть lj — корень п-й степени из единицы в кольце А, степени которого uj°,lj1, uj2, .. ., u>n_1 — затабулированы. Предположим, что n — pq, и обозначим корень q-й степени из единицы через ц — шр. Предположим далее, что существует метод, позволяющий вычислить любой многочлен степени, меньшей q, во всех точках 1, rj, rj2,..., rjq~l с помощью Mq умножений. Тогда для любого многочлена степени меньшей п, можно вычислить его значения в точках 1,uj1,uj2, .. .ujn~l, используя только рМя + (п — 1)(р — 1) умножений и рАя + п(р — 1) сложений. Пример Предположим, что для вычисления значений многочлена степени < q, используется обычный наивный метод, который требует q — 1 умножений (на одну степень из г) данных). В этом предположении Мя = (q — 1)2 для q степеней rj = ljp . Если применить теорему для вычисления значений многочлена степени < п в точках 1,cj,cj2, ... ,u>n_1, то получится n((p— l)+(q—1)) умножений вместо Мп = (п—I)2 умножений в наивном методе. Эффективность метода Кули — Тьюки по отношению к наивному методу измеряется отношением pq№?~L_l w -^-, и = 6о + 64U/ + 6eU/ , 08 = Ьо + 64U/ + 6вО/ , = 61 + 65U/5 + бди/10, Og = 61 + 65U/9 + 69U/6, = 62 + 66u/6 + 6ю, ою = 62 + беи;10 + бюи/8, = 6з + bjJ7 + 6ци/2, оц = 6з + bju;11 + 6ци/10
V-4.1 Метод Кули — Тьюки для произведения двух множителей 619 это приблизительное значение будет лежать в основе дальнейших вычислений. Например, применение метода Кули — Тьюки к п = 2 000 с р = 40 и q = 50 требует 176 000 умножений, в то время как наивный метод требует 3 998 000. Метод Кули — Тьюки в 22 раза быстрее наивного метода, и это в том случае, если последний применяется только один раз, т.е. если вычисляется наивным методом значение многочлена степени < 50. Лучшего результата можно добиться, если итерировать метод Кули — Тьюки дальше на множитель q или по другому разложить п. Доказательство теоремы 20 Пусть Р(Х) = an_iXn-1 + .. . + Q2X2 + aiX + ao — многочлен. Перегруппировывая коэффициенты, индексы которых совпадают по модулю р, запишем Р(Х) = Р0(Х*)+ХР1(Х*) + - • - + Х^1РР^(Х% где любой Рг при 0 ^ г < р является многочленом степени < q\ Pr(Y) = 2 aip+rY\ что влечет РГ(Х') = £ а,Х'"г. 0^i<q i=r (mod p) Так как rf = 1, величина if зависит только от выбора представителя j по модулю q и, следовательно, Р(ы>) = Po(f)j modq)+(JP1{fij modq) + Вычисления значений любого из многочленов Рт в q степенях г\ требует по предположению Мя умножений. Поэтому для вычисления значений р многочленов Ро, Рь Рг, • • • Рр-i в этих точках требуется pMq умножений. После реализации этих вычислений остается вычислить по формуле (7) п вычислений, каждое из которых требует р— 1 умножений. Эти п вычислений в общей сложности требуют (п — 1)(р — 1) умножений, исключая умножения на 1 (для j = 0). Таким образом, всего получаем рМя+(п — 1)(р— 1) умножений, что завершает доказательство теоремы. Интерпретация метода Кули — Тьюки при п = 12 (продолжение) Вернемся к предыдущему примеру для р=3ид = 4в свете проведенного доказательства и введем многочлены Po{Y) = ao + азУ + clqY2-\- a9Y3, Pi (У) = ai+a4Y+a7Y2+ai0Y3 и P2(Y) = a?+abY+asY2+anY3. В этих обозначениях dj = Po(u>3j)+u^P\(w3j')+w2j'P2 0*>3). Такая организация вычисления P(u>J) требует введения выражений Po(w3j'), Pi(w3j'), Рз(^3,7)- Так как и; — корень 12 степени из единицы, что является принципиальным моментом этого преобразования, то и получим 12 таких
620 V-4 Подробное рассмотрение метода Кули и Тъюки выражений (а не 36, как можно было бы предположить). Если занумеровать эти выражения следующим образом: Ьо = Ро{1) &i = Po("3) Ь2 = Р0{и>6) &з = Ро("9) 64 = Pi(l) 65 = Pi (u,3) b6 = Pi(u>6) Ь7 = Р1(и9) 68 = P2(1) &9 = P2(u,3) 610 = P2(u;6) &n = P2(u,9) то получим формулы, установленные в результате комбинаторных исследований для этого примера в самом начале. (21) Резюме. Суммируя результаты теоремы Кули — Тьюки и проведенных исследований, получаем, что вычисление одного преобразования Фурье на n = pq точках требует р вычислений преобразования Фурье порядка q, одного вычисления преобразования Фурье порядка р и p(q — 1) вычислений значений многочленов степени, меньшей р; символически: Cooley - Tuckeypx<7(w) = p В¥ТЯ)ШР 0 0 1 DftP)U,« 0 p(q - 1) Evaluation. Перемещая некоторые степени и в коэффициентах 6,, используемые для окончательных вычислений значений, можно сразу же получить q — 1 преобразований Фурье порядка р, отсутствующих в предыдущем выражении (рассмотреть, например, преобразования bf5 = 65w, 69 = bgu2, ... для примера 3x4), но тогда появляются дополнительные умножения: Cooley -Tuckeypxg(и) = рВ¥ТЯ)ШР 0 0 q DftP)U,* 0 (р - l)(q - 1) Produit. Все эти результаты, разумеется, не предвосхищают способа, которым будут вычисляться вводимые таким образом дискретные преобразования Фурье. Обоснование. I Напомним формулу (7) из доказательства теоремы 20: Р{иР) = Ро(^то<1д) + ^Р1(^то<1«)+ ,. В этой формуле, как видим, вычисление значений в точках о;-7 требует сначала вычисления значений р многочленов Р, в q степенях rj: это дает р дискретных преобразований Фурье порядка q. Затем
V-4.2 Итерация метода Кули — Тьюки 621 I надо вычислить значения q многочленов, зависящих от.; mod g, имеющих в качестве коэффициентов P,(t7j mod9), в точках о;-7, которые не обязательно являются корнями степени р из единицы, за исключением случая, когда j = О (mod g), для которого получаем дискретное преобразование Фурье порядка р, указанное в исходной формуле, и остается только п — р — p(q — 1) вычислений значений в |_точках для того, чтобы завершить вычисления. 4.2 Итерация метода Кули — Тьюки В этом разделе обобщим результаты, установленные в предыдущем разделе, на случай, когда число п точек, в которых вычисляются значения, является сильно составным: п = n0ni .. .п*. (22) Обозначения. Если п = попхпг ... n/с, то обозначим: жх = П0П1П2 .. .n,_i — произведение первых г сомножителей числа, п (так что 7Г0 = 1), 7Г, = nk-i+iTik-i+2 • • n>k — произведение последних г сомножителей. Как видно из предыдущего раз- pFTn Cooiey-Tuckey > nQ pFT7r дела, вычисление дискретного Fft* Cooiey-Tuckey ) ni pFT?r преобразования Фурье по мето- ррт Cooiey-Tuckey > ррт ду КуЛИ — ТьЮКИ, КОГДа ЧИСЛО точек для вычисления есть произведение двух целых рид, Fft*, Cooiey-Tuckey ) Пк_1 pFTwi помимо всего прочего требует вычисления р преобразований Фурье на q точках. Кроме того, к этим вычислениям преобразований Фурье следует добавить вычисления многочленов, необходимых для синтеза окончательного результата. Метод, традиционно называемый Fft, является нечем иным, как итерацией метода Кули — Тьюки, когда число точек для вычисления сильно составное. В наиболее интересном здесь для нас случае, п = щих.. . п/с, применение метода Кули — Тьюки для вычисления значений в п точках потребует, к примеру, по вычислений преобразований Фурье на, ж к = п\... Пк точках. Эти преобразования Фурье, в свою очередь, могут быть вычислены применением принципа Кули — Тьюки к разложению тг/с на п\ и п^ .. . п*, что требует вычисления п\ преобразований Фурье в Жк-i точках и т.д. Схема слева хорошо иллюстрирует этот процесс. Для начала изучим сложность вычисления Fft, что сравнительно просто, а потом мы перейдем к выводу явных формул, необходимых для реализации Fft.
622 V-4 Подробное рассмотрение метода Кули и Тъюки 4.2.1 Сложность итерационного метода Кули — Тьюки (23) Предложение. Рекурсивное применение метода Кули — Тьюки для целого п, пред- ставимого в виде п = по .. .п*, дает метод, требующий Мп умножений с выражением ^2. = (По - 1) + (П! - 1) + ...+ (nk- 1) - —, п п которое упрощается, когда п является степенью q, до Мп = (q — ljnlog^n — п+ 1. Доказательство. По теореме 20 имеем соотношение Мп = поМП1п2...Пк + {п — 1) (по — 1), а так как М.\ — 0, простая индукция показывает: мп Л, „rij=,"j-i = >(п,- — 1)— fc > что переписывается как п ,=о П;=, пз п ,=о ,=ollj=.nj Рассмотрим вторую сумму, входящую в это выражение, и после умножения ее на п. Получим к i-l 2_\ini — 1) П ni> что в точности равно п — 1. i=o i=o Преобразование Фурье на 2000 точках (продолжение) Вместо разложения 2 000 в произведение 40 х 50 рассмотрим 24 х 53. Применяя рекурсивно метод Кули — Тьюки к множителям 2 и 5, получим 24 000 умножений. Если сравнить этот результат с полученными ранее, то можно увидеть, что произошло' увеличение эффективности примерно в 7 раз. Округленно число умножений уменьшилось в 166 раз по отношению к наивному методу. (24) Следствие. Пусть п — целое число, представимое в виде n = q^q^2 • • Як*> гДе qi не обязательно простые. Число Мп необходимых умножений при
V-4.2.2 Формулы для итераций по методу Кули — Тьюки 623 вычислении преобразования Фурье по методу Кули — Тьюки дается выражением Mn/n = c*i(gi - 1) + <*2(?2 - 1) + Ь otk (qk - 1) + (n - l)/n, что можно переписать в виде к —:—r—r « > fit x -—7—7-, где m = - // и у щ = 1. nlog(n) ^Pl log(tt)' л Р* log(n) ^* Выражение слева — средневзвешенное слагаемых (д,- — l)/log(gt), где веса fi{ представляют вклад множителей q?% в п. Вот таблица некоторых значений (д — l)/logg для целого д. Из нее видно, что это значение минимально при д = 2. я 9-1 bg(g) 2 1.44 3 1.82 4 2.16 5 2.48 6 2.79 7 3.08 8 3.36 9 3.64 10 3.90 Например, для п, имеющего вид п = 2аЗ/?57, получим nlog(n) log(2) log(3) log(5)' и тогда —-——- « 2,16. nlog(n) Интуитивно ясно, что метод Кули — Тьюки тем эффективнее, чем меньше простые числа, входящие в разложение п. 4.2.2 Формулы для итераций по методу Кули — Тьюки Метод Кули — Тьюки для произведения двух чисел р и q приводит к разложению двух индексов i и j, взаимодействующих в сумме /О) - ]£Л0 W*J'> гДе г = *iP + *о и j = jo + jig. Если теперь рассмотреть случай, когда п — произведение к + 1 целых чисел, то получим начальное разложение i = апо + г'о согласно евклидову делению на по, удовлетворяющему условиям 0 ^ г0 < п0 и 0 ^ а < тг*. Продолжив процесс разложения а с помощью евклидова деления на п\..., получим в результате i = г0 + iiTTi + г2тг2 Н Ь г/стт*, где 0 ^ гх < пх для 0 ^ х ^ к. Аналогичным образом, индекс j может быть разложен при помощи евклидова деления на тг1 и далее, итеративным образом, на тг2... до получения j = jo + Jitt1 + j27r2 -\ h jknk, где 0 ^ jx < nk_x. И теперь видно появление смешанной системы счисления из главы IV.
624 V-4 Подробное рассмотрение метода Кули и Тьюки Замечание. Напомним опять, что если целые пх в этом равенстве все равны 6, то приходим к обычному понятию позиционной нумерации: тгх = тг* = Ъх. Это оправдывает индексацию составляющих п, начиная с 0. Также замечаем, что смешанная система счисления, в которой разлагается индекс t, связана с представлением п в виде произведения n = non\ ...п*, тогда как относительно j она связана с обратным порядком п = nkfik-i ... по. В выражении и;'-7, встречающемся в сумме Х)/(г) ^ * можно заменить ij на любое число, сравнимое с ij по модулю п (поскольку lj — корень п-й степени из единицы). Это мы и будем делать, пользуясь тем, что когда х + у ^ А; + 1, то жхжу = 0 (mod n). Следовательно, величина ij эквивалентна по модулю п следующим двум выражениям треугольной формы: + 0*-17Г*-1+-"+Л7Г1+.707Г0)-»17Г1 + (jif1+jof°)-»'fc-iffc-i + 0'07r°)-»fc7rfc, ij = (»07ro)jfc7rfc + (io'*o+ii'K\)-3k-i'Kk~1 + (»07rO+»l7ri+"+U-l7Tfc-l)jl7r1 + (»07r0+»l7ri+---+lfc7rfc)-J07r° (8) Используем теперь левое представление произведения ij (для использования выражения справа см. упражнение 18). Благодаря такому представлению ij по модулю п, покажем, как сумма f(j) может быть разложена в подсуммы f(j) = ^2io ]T]ti ... ^2ik ... Для этого введем обозначение, относящееся к смешанной системе счисления с базой {тг°, тг1,... тг*}. В виду нашего выбора левого представления, эта база будет использоваться чаще другой. (25) Обозначение. Пусть дана последовательность jo, ji, • • •, jm, удовлетворяющая соотношениям 0 ^ jo < n>k, 0 ^ ji < Пк-i, ..., 0 ^ jm < Пк-m- Обозначим (jmjm-1 • • • J0> = jm*™ + jm-l^"1 + • • . + jo^°- (26) Теорема. Определим последовательность функций [0,п[—у A, (Fm)o^m^/c+i следующим образом: def Fo{t0ir+tiir'l + -- - + */с7г°) = F0(Mi.. -tk) = f{tk*k + -- -+ti*i+to*o)
V-4.2.2 Формулы для итераций по методу Кули — Тьюки 625 а для О ^ m < k + 1 положим: Fm+l(Ml • • -J/c-m-lt/c-mJ/c-m+l • • -*/с-1*/с) = nfc_m—1 £ F™('°'l ' ' ■«fc-m-ie^-m+i • • .**-!**> ' W-** — <** — '" —+l-••'*>■ 8=0 Яри этих обозначениях функция F/c+i является преобразованием Фурье f Для /. Доказательство. Используем явное разложение г j с помощью треугольного выра- х Zltjи;,1?Г "7*"1 "7U° жения в левой части форму- : лы (8) для записи суммы /(j), Е,-. л-. /7о\ как указано слева. Преобразуем r/.* , . , , . ч теперь выражение /(готгоН ) в v i^ov^on • • -*k) и обозначим через Fi самую внутреннюю подсумму в выражении для f(j) (с индексом г*), через F2 следующую подсумму (с индексом ik-i) и т.д... Заметим, что первая подсумма, обозначенная через Fi, зависит от индексов г'о, г*1, ..., г^_i и jo, следующая подсумма F2 зависит от индексов г0, п, ..., %k-2 и jo и j\. Продолжая прослеживать эти зависимости, обнаруживаем, что число слагаемых индекса г уменьшается, тогда как число составляющих j увеличивается при продвижении от Fi до F/c+i. Это дает возможность записать явные формулы в формулировке теоремы, вводя их теперь для г и j вместо безымянного индекса t. Fi(i0ii • • .г/c-i jo) = ^F0(i0h .. .ik-iik)uikWk{}o), F2(гoгЧ..л•л_2jljo>=XlFl(г,oг,l•••i^-l^)wifc"lWfc"1<jlio>' Fm+i(i0ii.. Ak-m-i jm • • -Jo)= 2Z ^т(г°г 1 • • • Ik — m— ll/c — m Jm • • • Jo) ifc-m X ^U-mTfc-m(jm-.ilio) 40-1017
626 V-4 Подробное рассмотрение метода Кули и Тьюки Fk(ioik-i • • -Лjo) = Y^ F*-i(2'o Ь i*-2 • • iiio> »1 x yh*i{}k-i jk-2—jo) /0") = Fk+i(ik jk-i.. -jijo) = ^2Fk(ioJk-iJk-2 • • -iiio) to x UJio*o(}kjk-i--jo) Можно также доказать для m G [0, A: + 1] следующее инвариантное соотношение (полезное для доказательства корректности алгоритма, реализующего Fft): Fm(io4 • • -ik-mjm-ljm-2 • • Jljo) = Y] Fo(ioh • • л'/с_1г/с)и;^-т+1<,'*,'*-1--,'*-т+1>'<-7'т-1-7'т-3--11^' ik,ik-i,-,ik-m из которого легко усматривается смысл обозначений (.. .\ и (.. .)*. (27) Определение. С данными Л + 1 целыми числами no, п\,..., Пк и их произведением п = попх... Пк связана инволюция интервала [О, п[, обозначаемая s *-У s и определенная формулами: S = SoTTo + SlTTi + h S/c-iTT/c-i + S/сТГ/с I У I У S = SkK° + Sk-lK1 + 1" SiTT^"1 + So7Tk. Инволюция переводит число в системах счисления {жя} или {жя} в целое число, имеющее инверсное представление в этом же интервале в дуальной системе счисления. В свете этих новых обозначений можно переформулировать теорему 26: (28) Следствие («формулы» для программирования). Пусть f : [0, п[—у А. Определим последовательность к+ 2 массивов Fo, Fi,... F/c+i с индексами в интервале [О, п[ рекуррентным соотношением, которое применяется при О ^ m < k + 1: Fm+i(Ml • • -tf/c-m-lt/c-mJ/c-m+l • • -*/с) = = 5Z Fm(t0t1...tk.m.1stk.m+1...tk)w'1"-^tk-—tk'>, e=0
V-5 Метод Гуда 627 массив Fo имеет начальное значение Fo[t] = /(f). Тогда последний массив F/c+i дает преобразование Фурье f для /, Fk+i(j) = f(j) при О ^ j < п. Напомним, что эта формулировка, частный случай которой для п = 2к дан в лемме 13, была использована в разделе 3.1 для реализации Fft. 5 Метод Гуда Тогда как метод Кули и Тьюки применим, когда число точек, в которых происходит вычисление значений/число точек интерполяции, является сильно составным (как в случае, когда оно является степенью простого числа), метод Гуда применяется лишь тогда, когда это число разлагается в произведение попарно взаимно простых множителей. Этот метод, опубликованный Гудом в 1958 г. в статье: The interaction of algorithm and practical Fourier series, опережает по времени метод Кули — Тьюки (1965). Он еще более сокращает количество умножений, необходимых для вычисления дискретного преобразования Фурье, и делает разложение Dft весьма однородным. 5.1 Исследование примера 15 = 3 х 5 а13 «14 *13 *1 i &* i а13 а3 а9 а13 а4 а11 а2 ав Ч«14/ Пусть и — корень 15 степени из единицы, £ = а;5 — корень кубический из единицы, a rj = и3 — корень пятой степени из единицы. Тогда можно записать DFTis указанным выше образом (здесь нужно обратить внимание на перестановки, произведенные вначале на элементах а,, а в конце — на элементах а,). Далее покажем, что это равенство есть ничто иное, как применение китайской теоремы об остатках, которая утверждает, что аддитивные группы Zi5 и Z3 х Z5 изоморфны. Если рассмотреть две матрицы
628 V-5 Метод Гуда Вандермонда Уз и Vs, ассоциированные, соответственно, с корнями из единицы £ и г/, то метод Гуда реализует вычисление преобразования Фурье в два этапа. Первый состоит из 3 преобразований Фурье на 5 точках: /h 61 ь2 63 w = V5 /а0\ вб 012 а3 UJ ) /Ь5\ Ьб h , 68 W = Vb /а10\ ai а7 013 \ а4 / > /JlO\ Ьи &12 &13 U14/ = ^5 /oe\ ап 02 а8 \fll4/ Второй этап состоит из 5 преобразований Фурье на 3 точках: «5 Это означает, что вычисления по методу Гуда дискретного преобразования Фурье на 15 точках сводится к 3 вычислениям преобразований Фурье порядка 5 плюс 5 вычислений преобразований Фурье порядка 3: Goodi5)U; = 3 Dft5)U;3 0 5 Dft3)U;6 • Сложность этого вычисления — 90 сложений и 68 умножений (вместо 90 сложений и 76 умножений в методе Кули — Тьюки). Первое обоснование предыдущего разложения дается следующим полиномиальным тождеством (справедливым в факторкольце Л[Х]/ (*15-1)): £ aiXi = (ао + а6Х6 + а12Х12 + а3Х3 + а9Х9)+ + Х10(а10 + сцХ6 + а7Х12 + а13Х3 + а4Х9)+ + Х5(а5 + апХ6 + а2Х12 + авХ3 + амХ9). Полагая (как в начале изучения метода Кули — Т^юки) Ро(Х) = ао + а6Х6+а12Х12 + а3Х3+а9Х9, Рг(Х) = а10+а1Х9+а7Х17+а1аХа+а4Х9 и Р2(Х) = as + ацХ6 + а2Х12 + а%Х3 + а\4Х9, определим bj следующим образом: Ь0 = Ро(1), bi = Po(w3), 62 = Po(w1), b3 = P0(w4), Ь4 = Р0(ш2), be = Pi(l), Ь6 = Р1(ч>3), Ь7 = Р1(ы1), be = Pi(u>4), Ь9 = Рг(и>2), 6ю = Р2(1), Ьп = Р2(ш3), Ь12 = Р2(^), Ь13 = Р2(ш4), Ьы = Р2(ш2).
V-5.2 Теорема Гуда 629 5.2 Теорема Гуда Прежде, чем говорить о теореме Гуда, введем сначала некоторые определения, необходимые впоследствии. Такой способ позволит, в свое время, быстрее сконцентрироваться на основной идее Гуда, не спотыкаясь о незнакомые понятия. В этом разделе индексы используемых матриц начинаются с нуля, а не с 1, так как в конце мы применим полученные результаты к матрицам Вандермонда. Но это не относится к следующему определению. (29) Определение. Для любой п х т-матрицы А и р х q-матрицы В тензорное произведение А ® В есть пр х mq-матрица, имеющая следующую блочную запись: anB a12B ... almB\ CL21B аъъВ ... aimB А®В = = С, ^niB аП2В ... аптВ / это можно записать для матрицы, индексы которой начинаются с нуля, следующим образом: ср|-1+|-а,ад-1+(,-а = ailtilbi2ti2. (30) Определение и свойства. (г) Пусть a — перестановки интервала [0,п[. Перестановочная матрица Ра — это матрица, определенная по правилу: Pa(ej) = eo(j)i если ео, ег,..., en_i — канонический базис. (П) Для a = (ao,.. .,an_i) обозначим через aa n-ку (a^oj,..., a<r(n-i)); заметим, что aa = Pa-i(a). (Hi) Умножение слева матрицы порядка п на матрицу Ра соответствует перестановке строк матрицы под действием перестановки а. Аналогичным образом, умножение справа матрицы порядка п на матрицу Ра-\ соответствует перестановке столбцов матрицы под действием перестановки а. (iv) Более формально: пусть дана квадратная матрица V порядка п, тогда матрица W = PaVPr-\ — матрица, полученная из V перестановкой строк и столбцов, отвечающих перестановкам а и т, соответственно, эти две матрицы связаны соотношением И^(,-)гу) = Vij. (31) Свойство (тензорного произведения матриц). Пусть А и В — две квадратные матрицы произвольных порядков. Тогда А® В и В® А — подобные матрицы, связанные соотношением
630 V-5 Метод Гуда А® В = Pt{B <g> A)Pt, где l — известная инволюция, переставляющая представление целого числа в двух смешанных дуальных системах счисления, определенных через размерности матриц (см. определение 27). На протяжении всего этого раздела рассматривается целое число п, представимое в виде произведения n = pq, где р и q взаимно просты. Часто будет использоваться соотношение Безу up + vq = 1. Матрица V является матрицей Вандермонда, ассоциированной с и, корнем п-й степени из 1, т.е. V = (wIJ'). Как видно из примера DfTi5, можно ввести в вычисление дискретного преобразования Фурье тензорные произведения преобразований Фурье. Следующая лемма является лишь одним из этапов этого построения. (32) Лемма. Пусть т — перестановка интервала [0, п[, определенная по правилу т{х) = vqx\ + upx2 mod п, где {x\,xi) — запись х в смешанной системе счисления (р, q): x = x\q + x^. Важно заметить, что эта перестановка зависит лишь от р и q, и не зависит от и и v, и тесно связана с китайской теоремой об остатках в следующем смысле: т(х) — единственное целое число в интервале [0, п[, для которого т(х) = х\ mod q и т(х) = Х2 mod p. При этих условиях V — PT{Vp <g> Vq)PT-1 — выражение, где V£ — матрица Вандермонда, ассоциированная с корнем р-й степени из единицы u>vq, aVq — матрица Вандермонда, ассоциированная с корнем q-й степени из единицы иир. Доказательство. I В выражении преобразования Фурье clj = ^щи^ представим i и j как функции вычетов ip, iq, jp, jq по модулям р и q (используя явные формулы китайской теоремы об остатках). Тогда получим: t t так как up и vq — ортогональные идемпотенты по модулю п. Следовательно, матрица V имеет в качестве своего общего элемента с координатами (г, j) произведение (11*э*г)1*э*), где f = uvq и fj = wup. Здесь уже можно видеть, как появляется тензорное произведение, к которому мы стремимся. Если обозначим через V£ = (f,J) матрицу порядка р, а через V~ = {fj1*) — матрицу порядка q, то (по определению 29) можно заметить, что элементы с индексами (г,.;) матрицы V^.®V^ суть
V-5.2 Теорема Гуда 631 I (£,1"7177,3"7з)) где ii, г2, л, J2 — цифры чисел г,.; в базисе (р,д), т.е. i\ и г'2 — соответственно частное и остаток от евклидова деления г на д, то же самое для j... Объединяя предыдущие два абзаца, обнаруживаем, что выражение £x*3ifp2*2 совпадает с элементом матрицы V, расположенным в позиции (vqi\ + upi2,vqj\ + upj2), и с элементом матрицы Vp <g> Vq, расположенным в позиции (qi\ + г'2, qj\ + Зг)- Положив г = qii + г2 и .; = дл + j2, получаем (VJ ® Уд%- = Уг(.-)гу), другими словами, V = PT(Vp ® Ъ^')Рг-1, равенство, содержащееся в |_формулировке леммы. Итак, нам удалось представить дискретное преобразование Фурье порядка pq как тензорное произведение двух дискретных преобразований Фурье порядка р и порядка q, но корни из единицы, используемые в этих вторичных преобразованиях, не вполне нас устраивают. Действительно, они не являются каноническими корнями порядков р и д, ия иир. Наша цель теперь состоит в том, чтобы распространить полученный в предыдущей лемме результат на хорошие корни порядка р и q с помощью небольшого дополнительного изменения... (33) Лемма. Пусть £ =и>я, г) = и>р, Vp nVq — матрицы Вандермонда, ассоциированные с корнями £ порядка р и tj порядка q} соответственно. Обозначим через а перестановку интервала [0,п[, определенную следующим образом: (r(qx\ + х2) = qx\ +px2 mod n с обычными соглашениями. Тогда можно записать: V = PT(VP ® Vq)P„-i = Pa{Vp ® Vq)Pr-i, где т — перестановка, введенная в предыдущей лемме. Доказательство. I Если i = i\q + г'2 и j = j\q + J2> то имеем (Vp ® Vq)ij = {uq)iljl{"P)hh = K*)*1'4"up)p'aia> так как vq2 = q (mod n) и up2 = p (mod n). Введя матрицы Vp и Vgy можно переписать это выражение двумя разными способами: ig+«3,g(gji mod p)+(pj3 mod q) — = (Vp ® Vq)ij = (Vp <g> Vq)q^qi1 modp)+(p«3 mod q),jiq+h' Эти два выражения, симметричные относительно г и j, появляются I (либо то, либо другое) в зависимости от того, куда решают отнести
632 V-5 Метод Гуда I изменения показателя — в г или в j. Если положить а(х) = q{qx\ mod p) + (ртг mod q), то получим, что (vP ® vq)pa-> = v; ® v' = pa(vp ® vq). В заключение остается лишь вычислить произведение а и г. ra(gzi + z2) = т(ч(Чх\ mod p) + (p^2 mod g)) = = ^g(gzi mod p) + up(px2 mod g). Используя тот факт, что b(a mod c) = a (mod 6c), последнее выражение переписывается в виде qx\ +р#2, что в точности есть а(х) в Обозначениях леммы. Пример Для р = 3, q = 5, п = 15 выбираем « = 2hv = -1, что дает г/р = б и vq = —5. Тогда определим перестановки а : г = 5г*1 + г*2 •->• <т(г) = 5г*1 + Зг*2 mod 15 и г : j = 5ji + J2 «-^ t(j) = —5ji + 6J2 mod 15, что позволяет проиллюстрировать метод Гуда на примере 3x5, используя соотношение аа = Vp <g> Vq(aT). Теперь совсем просто получить теорему Гуда, резюмирующую предыдущие рассуждения. (34) Теорема (Гуда). Рассмотрим два взаимно простых числа р и q и тождество Безу up + vq = 1. Пусть Vp = (uqt^) и Vq = (upt^) — матрицы Вандермонда, ассоциированные, соответственно, с корнями uq порядка р иир порядка q. Обозначим через а и т перестановки интервала [0,п[, определенные, соответственно, через <т(х) = qx\ + рх2 и т(х) = vqx\ + upx^, где х = x\q + Х2 — евклидово деление х на q. (г) При этих условиях вычисление преобразования Фурье порядка pq последовательности а задается любым из следующих двух выражений: aT = Vp®Vq(aa) или aa = Vp ® Vq(aT). (it) Метод Гуда для взаимно простых р и q схематически может быть представлен в виде: Goodpxq(u>) = pDFTq>u,p 0 qDFTPiW4. (Hi) Вычислительная сложность метода Гуда — n(p+q~2) сложений и n(p-\-q— 4)+p+q умножений (сравнительно с n(p+q—S) + l в алгоритме Кули — Тьюки), при вычислении внутренних Dft наивным методом.
V-6 Вычисление семейства билинейных форм 633 6 Вычисление семейства билинейных форм Теперь изучим некоторые свойства билинейных форм над кольцом, в частности, их выражения в виде произведения линейных форм. Этим способом удастся еще уменьшить количество элементарных умножений в вычислениях Dft. Ш. Виноград опубликовал несколько важных работ в этой области: On the number of multiplications necessary to compute certain function, Some bilinear forms whose multiplicative complesity depends on the field of constants и On Multiplication of Polynomials Modulo a Polynomial. Доказательства некоторых результатов Винограда можно найти у Кнута [99], Нуссбаумера: Fast Fourier transform and convolution algorithms или еще у Ауслендера и Толимиери: Is copmuting with the finite Fourier transform pure or applied mathematics?. Виноград дал применения вычислений значений билинейных форм к эффективному вычислению дискретного преобразования Фурье: On Computing the Discrete Fourier Transform, On the Multiplicative Complexity of the Discrete Fourier Transform. Приведем достаточно простой результат, полученный применением методов Винограда для произведения многочленов. Произведение двух многочленов степени 1 Х(Т) = х{Г + х0 и Y(T) = у\Т + у0 задает три билинейные формы z<i, *\ и zo от х и у: X(T)Y(T) = z2T2 + z\T + z0 = ziyiT2 + (xoyi +х\уо)Т+хоуо. Это выражение заставляет думать, что 4 произведения коэффициентов необходимы для того, чтобы вычислить произведение XY. Однако это не так! Если ввести 3 билинейные формы и>2(я,у) = £1Уь wi(z,y) = (xi + x0)(y0 + yi) и wo(x,y) = яоУо, то можно выразить произведение XY через W2T2+ (w\ — W2 — wq)T+wq, что доказывает: 3 умножений вполне достаточно для вычисления произведения двух многочленов степени 1 (итерируя этот принцип, можно получить метод Карацубы умножения произвольных многочленов, см. упражнения из главы I). Это преобразование, увеличивающее число сложений, полезно, если в базовом кольце стоимость умножения много выше, чем сложения, как, например, для кольца многочленов. Естественный вопрос, который при этом возникает, — каково минимальное число умножений, требующихся для вычисления произведения двух многочленов? Важно понимать, что вычисление значений для семейства билинейных форм не эквивалентно с точки зрения сложности вычислению значений отдельных форм из этого семейства. В действительности, необходимо уметь вычислять значения целого множества билинейных форм, что дает возможность определенной оптимизации, аналогично тому, что происходит при вычислении значений многочлена: при вычислении
634 V-6 Вычисление семейства билинейных форм дискретного преобразования Фурье последовательности целых чисел оптимизация получается за счет вычисления значений многочлена на множестве хорошо подобранных точек. Вот примеры семейств билинейных форм, часто встречающиеся в математике: • умножение многочлена степени п на многочлен степени т индуцирует семейство n+m+1 билинейных форм типа (n+1) x (m+1) (эти билинейные формы определяют коэффициенты произведения), • произведение п х m-матрицы на т х р-матрицу дает семейство из пр билинейных форм типа пт х тр (элемент с индексами (i,j) в произведении матриц есть скалярное произведение г-й строки первой матрицы на j-и столбец второй), • циклическая свертка на п точках, т.е. умножение по модулю Т*1 — 1, дает семейство п билинейных форм типа п х п, • если Е — алгебра размерности п над телом, то ее умножение дает семейство п билинейных форм типа п х п, которые вычисляют компоненты произведения: если (ei,...,en) — базис Е и для х,у Е Е произведения ху записываются в виде ху = Yl*i=i(xy)ieii TO это семейство билинейных форм состоит из форм типа: {(ху)и (ху)2,..., (ху)п). 6.1 Некоторые напоминания, определения и основные свойства Е и F — свободные модули конечного типа над коммутативным и унитарным кольцом. (35) Напоминания. (г) Билинейная форма h над ExF имеет тип nxm, когда dim Е = п и dimF = m. (И) Если (ei,e2,...,e„) — базис Е} а (/ь/2,..., /m) — базис F} то h представляется матрицей Н = (Л,^) l^.^n , такой, что h (я, у) = (Hi) Пространство билинейных форм над ExF снабжено естественной структурой свободного модуля размерности dimi? x dim F. (36) Определение. Если а иЬ — две линейные формы над Е и Ff соответственно, то их тензорное произведение а ® Ь является билинейной формой над Е х F} определенной равенством a <S> b (х, у) = а(х) Ь(у). Ее матрица в базах Е и F имеет порождающие элементы hij = a,6j, где (a,-) — матрица a,
V-6.1 Некоторые напоминания, определения и основные свойства 635 a (bj) — матрица 6. Такая билинейная форма, являющаяся тензорным произведением двух линейных форм, называется элементарной. Билинейная форма h(x,y) = £^ hijXiyj является элементарной тогда и только тогда, когда существует п элементов кольца ai, аг,..., ап и m других элементов 61,62,.. .,6т таких, что fttj = a,-6j для 1 ^ i ^ n и 1 ^ j <£ т. (37) Предложение. (г) Элементарные билинейные формы порождают пространство билинейных форм над Е х F. (И) Пусть h — билинейная форма. Если г — наименьшее натуральное число, такое, что h = a\ 0 6i + а 2 062 H V ar 0 К является суммой г элементарных билинейных форм, то г является рангом матрицы h относительно базисов Е и F. Доказательство этого предложения содержится в упражнении 25, находящемся в конце главы. (38) Определение. Тензорным рангом семейства s билинейных форм fti, Л2,..., hs над Е х F называется наименьшее целое число г, для которого существуют такие г элементарных билинейных форм а2 0 62, ..., аг 0 6Г, что {fti,/i2,.. .,Л*} С Vect (ai 061,02062, • • ,аг0бг). Этот ранг обозначается rang0, чтобы избежать путаницы с обычным рангом вектора. Разумеется, когда семейство сводится к одному элементу, то тензорный ранг этого семейства равен рангу матрицы единственной формы, из которой состоит семейство (другими словами, для одной билинейной формы понятия матричного ранга и тензорного ранга совпадают). (39) Предложение. Пусть (hi)i^i^s — семейство билинейных форм тензорного ранга г. Пусть D — матрица, явно выражающая зависимость между семейством (hi) и семейством элементарных билинейных форм (aj 0 bj): (hi)i&$s = D • (aj 0 6j)i^r. Тогда, в этих обозначениях, rang® (ftb..., ft,) ^ rangD ^ dim(fti,.. .,ft,).
636 V-6 Вычисление семейства билинейных форм Доказательство. Пусть AiZ>i)# H Ь A,D,)# =0 — соотношение зависимости между строками матрицы D. Это соотношение равносильно матричному равенству (Ai Аг ... A,) Z) = 0, откуда Aifti Н \- А, Л, = 0. Последнее равенство выражает тот факт, что векторный ранг семейства (Л,) не превосходит векторного ранга матрицы D размера s х г, |_ранг которой не превосходит г. Замечание. На этой стадии изложения не лишне уточнить природу операций, число которых мы будем минимизировать. Обычно эти операции называются порождающими или общими умножениями. Они представляют собой умножения между элементами базового кольца, а не внешние умножения элементов кольца на целые числа. Это число умножений дается здесь через тензорный ранг: порождающие произведения в действительности получаются через вычисления значений билинейных форм. Сопутствующая этому рассуждению идея, которая может показаться излишне специальной, заключается в том, что для вычислений произведений многочленов или матриц, или даже преобразования Фурье, можно выделить часть вычислений, которые называются предвычисле- ниями, куда можно запрятать сложность вычисления констант. Подтвердим эти идеи примером. Рассматривая произведение многочлена второй степени на многочлен первой степени, предположим, что первый из них раз и навсегда зафиксирован, тогда как второй может меняться. Как лучше всего организовать вычисления? Бели выбрать наивный подход, исходя из вида первого многочлена, то потребуется 6 умножений и 2 сложения коэффициентов. Применяя же технику, развитую в доказательстве теоремы 40, можно также доказать, что, если W0=aobo, ^1 = а*+°2'+°>1+М, щ = аа-аг+ао{Ьо_Ь1)> W3=a2bi< то произведение двух многочленов а2Х2+а\Х+ао h6iX+6o равно W3X3 + (W1+W2-W0)X2^ + (^1-^2-^3)X + Wo. Если предположить, что первый многочлен фиксирован, то можно использовать предвычисления выражений, содержащих си, и включить в пред- вычисления деления на 2. Такой способ вычисления произведения многочленов потребует 4 умножения (и 6 сложений, от которых никуда не денешься).
V-6.2 Тензорный ранг произведения двух многочленов 637 6.2 Тензорный ранг произведения двух многочленов Установим теперь некоторые результаты относительно сложности (в только что уточненном смысле) умножения двух многочленов. Начнем с наименьшего числа умножений, необходимых для вычисления произведения многочленов. Если работать в теле, имеющем достаточно элементов, можно воспроизвести многочлен n-й степени по его вычислениям вп+1 точках. Это выражается следующим результатом: (40) Предложение. Для тела мощности ^ п + m тензорный ранг произведения многочлена степени п и многочлена степени m равен n + m + 1. Доказательство. I Изложим идею доказательства, оставив детали до упражнения 26. Пусть Х(Т) = хпТп + ... + х\Т + хо — многочлен степени п, Y(T) = утТ™ + ... + yiT + уо — многочлен степени m и Z(T) = zn+mTri+m + ... + z\T + zq — их произведение. Выразим двумя существенно различными способами {zo, zi,..., zn+m} при помощи линейных комбинаций n + m + 1 элементарных произведений. • Первый способ предполагает, что мощность тела ^ n + m + 1. Выберем n + m+1 различных точек *о, *ь • • •, in+m и вычислим значения Х(Т) и Y(T) в *о,*ь • • -lin+m- Это дает n + m+1 пар линейных форм, и вычислим Zk с помощью интерполяции посредством матрицы Вандермонда порядка (n + m + 1). Следует заметить, что процесс интерполяции не требует порождающих умножений. Все необходимые порождающие умножения содержатся среди произведений значений многочленов. • Второй метод предполагает лишь, что мощность тела ^ п + т. Он использует многочлен W{T) = X(T)Y(T) - xnym(T - tx) (T-t2)... (T-*n+m) = u;n+m_iTfl+m-1 + • • - + w0, где ^i,..., tn+m — n + m различных точек. Этот многочлен степени, строго меньшей п + т, может, очевидно, интерполироваться по точкам *,-: билинейные формы гу/с, являющиеся коэффициентами W(T), получаются с помощью линейных комбинаций n + m элементарных билинейных форм X(tk)<8>Y(tk). Так как при 0 ^ к < n + m, Zk = Wk + c* *xnym, Ск — константа кольца, и так как zn+m = xnymi то получим n+m+1 билинейных форм г* в виде линейных комбинаций n + m + 1 элементарных билинейных форм {X(tk)<8>Y(tk) | 1 ^ к ^ n + m}U{xnym}. Ш. Виноград в «Some bilinea forms whose multiplicative complexity depends on the feld of constants» показал, что оба этих метода, дета-
638 V-6 Вычисление семейства билинейных форм лизированные в предыдущем доказательстве, являются единственными методами, позволяющими получить z* в виде линейных комбинаций п + т + 1 элементарных билинейных форм. Непосредственные применения Проиллюстрируем только что обсуждавшееся доказательство на знаменитом примере: произведение z2T2 + z\T + zq двух многочленов степени 1, (xiT + x0) и (yiT + yo): • первый метод доказательства дает при использовании точек (0,1, — 1) для вычисления значений: zq = яоУо, *1 = §(*i + *о)(У1 + Уо) - §(*i - *o)(yi - Уо), *2 = ^(ж1 + Хо){У1 + Уо) + \{Х1 - Х0){У1 - Уо) - *0, • второй метод дает при использовании точек (0,1): <*о = яоУо, zi = (xo + xi)(yo + yi)-x0y0-xiyi и z2 = siyi, • тот же метод при использовании точек (0,-1): *о = яоУо, *1 = x0yo + xiyi-(x0-xi)(yo-yi) и z2 = xiyx. Оставшуюся часть раздела посвятим исследованию тензорного ранга алгебры К[Т]/Р, где Р — унитарный многочлен. (41) Свойство. Пусть Р — унитарный многочлен степени п с коэффициентами в теле К мощности ^ 2(п — 1) (например, в теле характеристики 0 или просто в бесконечном теле). Тогда тензорный ранг алгебры К[Т]/Р, т.е. тензорный ранг семейства п билинейных форм, определяющих произведения алгебры, не превосходит 2п — 1. Доказательство. I Элемент из К[Т]/Р представляется в виде многочлена из К[Т] степени ^ п — 1 (лучше: семейство {jir>-1jj,n~2,.. .,Т, 1} образует /С-базис алгебры К[Т]/Р). Умножение многочлена степени п — 1 на многочлен степени п — 1 требует (п — 1) + (п — 1) + 1 = 2п — 1 «общих» умножений; остается лишь взять результат по модулю Р, [_что является линейной операцией. Пример Проиллюстрируем доказательство на примере Р(Т) = Т2 + Т + 1. Пусть Х(Т) = xiT +х0и У (Г) = yiT + у0 — два элемента из К[Т]/Р. Вычисляя их произведение в i£[T], используем три умножения. Если W(T) = X(T)Y(T) = w2T2 + wiT + w0, то можно использовать, например, w0 = х0уо, wi = х0уо + xiyi - (xi - x0){yi - Уо) и w2 = xiyi. Для вычисления z\T + z0 = X(T)Y(T) (mod T2 + T + 1) используется
V-6.2 Тензорный ранг произведения двух многочленов 639 соотношение Т2 = —Т — 1, что дает окончательно zq = яоУо — х\у\ и z\ = х0уо - (xi - x0)(yi - у0). Можно улучшить этот результат, разлагая Р в произведение простых сомножителей и применяя китайскую теорему об остатках. Для начала установим следующий элементарный результат: (42) Предложение. Пусть Е и F — две свободные К-алгебры конечного типа над К. Тогда справедливо следующее неравенство для тензорного ранга: rang® (Я 0 F) ^ rang® (Я) + rang0(F). Доказательство. I Положим n = dimE, m = dimF и обозначим {/ь/г,... ,/п} и {<7ь<72> •. -,9т] билинейные формы, определяющие произведения на Е и F (аксиома алгебры, касающаяся произведения в алгебре, утверждает, что это билинейные отображения). Пусть ai, 6i,..., ar, br и с\, d\,..., cs, ds — линейные формы, выражающие тензорные ранги Е и F: {fu-Jn} С Vect(ai<g>6i,...,ar<g>6r) и {gu...,gm} С Vect(ci®di,...,c,®d,). Билинейные формы, связанные с произведением алгебры Е 0 F, являются расширениями на эту последнюю алгебру // и g'j форм fi и 9j {flixiy) = fi{xiV)i если х и У принадлежит Е, в противном случае //(ж, у) = 0, то же самое для g'j). Аналогичные расширения линейных форм ai и 6,-, а( и 6J- позволяют утверждать, что {fi,8j\Q^i^n,Q^j^m}C С Vect {a{ <g> 6{,cJ ® dj | 0 ^ i < r,0 О' < «}, [_что и доказывает, что rang0(.E 0 F) ^ r + s. (43) Следствие. Пусть Р = Р\Рч .. .Ря — разложение многочлена степени п в произведение взаимно простых многочленов. Если основное кольцо К имеет мощность не меньше 2(n — q), то тензорный ранг алгебры К[Т]/Р не превосходит 2n — q.
640 V-6 Вычисление семейства билинейных форм Доказательство. I Китайская теорема об остатках дает изоморфизм алгебр: К[Т]/Р ~ К[Т]/Рг х К[Т]/Р2 х ... х K[T)/Pq, и, применяя предыдущее предложение при deg(Pf) ^ п — (q — 1), [_получим требуемое. (44) Следствие. Пусть в(п) — число делителей п (включал 1 и п). Если К — тело характеристики р} не делящей п, имеющее более 2(п — 0{п)) элементов, то тензорный ранг алгебры циклической свертки на п точках, К[Т]/{Тп - 1), не превосходит 2п - 0(п). Доказательство. I Рассматриваемая алгебра есть К[%п] ~ К[Т]/(ТП — 1). Многочлен Тп — 1 представляется в виде Т" — 1 = Yld\n &d(T), где Ф<*(Т) есть d-и циклотомический многочлен. Если d и d' — два различных делителя п, то многочлены Ф^(Т) и Ф^(Т) взаимно просты. Действительно, Ф<*(Т)Ф<*/(Т) делит Т41 — 1, который не имеет сомножителей, являющихся полными квадратами, — у него нет общих делителей с его [_производной, так как n ^ 0 (mod p). В действительности Виноград вычислил точно значение тензорного ранга алгебры К[Т]/Р. Его доказательство можно найти в статье «Some bilinear forms whose multiplicative complexity depends on the field of constants» или в книге Кнута «Получисленные алгоритмы» [99], либо у Ауслендера и Толимиери [12]. (45) Теорема (Виноград). Пусть Р — многочлен степени п, представимый в виде произведения неприводимых многочленов: Р = Р"1Р%2.. .Pqq. Если основное тело бесконечно, то тензорный ранг алгебры К[Т]/Р равен в точности 2n — q. Как было сказано в начале этого раздела, алгоритмы, оптимальные с точки зрения тензорного ранга, обладают, однако, определенной сложностью, ввиду того, что некоторые операции игнорировались, в частности, умножения на скаляр и сложения-вычитания (см. упражнения в конце главы и следующий раздел). Но Виноград имеет еще кое-что в запасе! Симметризировав некоторые ситуации, он получает из теоретически эффективных алгоритмов алгоритмы, эффективные с практической точки зрения. Позднее мы еще вернемся к этому.
V-6.3 Пример: циклическая свертка порядка 4 641 6.3 Пример: циклическая свертка порядка 4 Согласно предыдущим результатам, умножение по модулю Тп — 1 может быть реализовано с помощью 2п — в(п) порождающих умножений, где в(п) — число делителей п. Проиллюстрируем этот факт для случая п = 4. Рассмотрим два многочлена X(Т) = хо+х\Т+х2Т2+хзТ3 и Y(T) = уо + у\Т + у2Т2 + узТ3. Нужно вычислить, используя только 2 х 4 — 0(4) = 5 умножений, билинейные формы z*, определенные соотношением z0 + 21Т + z2T2 + 23Т3 = Х(Т) х Y(T) (mod T4 - 1). В матричном виде (в котором обычно описывается Dft) это тождество можно записать: *о\ /х0уо + Х1уз + х2у2 + хзУ1\ /х0 xi х2 х3\ /у0\ Z1 I = I Х°У1 + Х1У0 + Х2УЗ + ЖЗУ2 I = I Х1 Х2 хз х° I I уз I *2 I I ^0У2 + ^1У1 + Я2У0 + ^ЗУЗ I I Х2 Х3 Х0 Х\ I I у2 I ' *3/ \^0УЗ + ^1У2 + ^2У1 + ХзУо/ \х3 Х0 Х\ Х21 \ У\ I (Заметим, что прямое вычисление, использующее эти формулы, требует 16 порождающих умножений и 12 сложений). Предположим, что элемент 2 обратим в базовом кольце К. Применим китайскую теорему об остатках к многочлену Т4 — 1 = (Т — 1)(Т + 1)(Т2 + 1), что дает нам изоморфизм колец К[Т\/(Т- 1) х К[Т]/{Т+ 1) х К[Т]/(Т2 + 1) на К[Т]/{Т4-1). Вычислим сначала X(T)Y(T) по модулю Т— 1. Вычисление значений в точке 1 вводит элементарную билинейную форму mi = (хо + х\ + х2+ +Яз)(уо + У1 + У2 4- Уз)- Затем вычисляем X(T)Y(T) по модулю Т + 1. Вычисление значения в точке —1 дает элементарную билинейную форму тп2 = {х0 - xi + х2 - хз)(уо - У\ 4- У2 - Уз)- Имея эти два результата, применим китайскую теорему об остатках, которая требует соотношения Безу для двух взаимно простых многочленов Р и Q: UP + VQ = 1, и дает Z = UPx{Z mod Q) + VQx {Z mod P) (mod PQ). В интересующем нас случае (Р = Т — 1 и Q = Г+ 1), используя |(Г + 1) 4- ^(Т - 1) = 1, получим: X(T)Y(T) mod (Г2 - 1) = Щ^гпг - ^^ш2 = тп\ 4- тог 4* 71(mi — шг) = 2 ' Осталось вычислить значение X(T)Y(T) по модулю Т2 +1. Используем равенство Т2 = —1, что дает Х(Т) = ж0 - х2 4- (zi - жз)Т (mod T2 4-1) 41-1017
642 V-6 Вычисление семейства билинейных форм и Y(T) = уо — уг + (yi — Уз)Т (mod Т2 + 1). Осталось перемножить эти два многочлена при помощи трех произведений: шз = (х0 — хг) (уо — У2), ш4 = (a?i - х3){у1 - уз) и ш5 = (а?о - si - а?2 + жз)(уо - У1 - У2 + Уз), что дает нам (с учетом того, что Т2 = —1): шз — пц + (шз + Ш4 — ш5)Т. Китайская теорема об остатках, примененная к Т4 —1 = (Т2 + 1)(Т2 — 1), и соотношение Безу \{Т2 + 1) + ^(Т2 - 1) = 1 дают: X(T)Y(T) mod (Г4 - 1) = Т22+1т1+Ш2+2Г(т1"Ш2) - Г2 -1 (Шз — Ш4 + (Шз + ТТЦ — Шб)Т), т.е. Uli + 77*2 + 2шз — 2f7l4 Ш1 — ТП2 + 2шз + 2f7l4 — 2f7l5 /т, 4 + 4 Ш1 + ^12 ~" 2шз + 2Ш4 _2 nil ~" П12 ~" 2шз — 2Ш4 + 2Ш5 _з -ГЧ rpd Короче говоря, найдены 5 явно выраженных элементарных произведений т,, т.е. 5 пар (а,-, 6,), где а,-, 6, — линейные формы с т, = а,- <g>6,, с помощью которых можно выразить 4 билинейные формы zo> zi, 22,23- Это можно сделать с помощью трех матриц: А = /1 f 1 1 0 U 1 1 ц -1 1 -1 0-10 1 0-1 > -1 -1 1/ / ! с=\ 4 1 2 -2 V 0 в 1 -1 2 2 -2 = Z1 1 1 -1 1 0 0 1 \1 -1 1 Ч 1 -1 -2 -2 2 -2 0 1) 1 1 -1 0 -1 о -1 l/ (9) при (*.-(*, у)) = 'С • (ai(x)bi(y)). 6.4 Семейство билинейных форм и трилинейные формы В этом разделе мы рассмотрим связи между семейством билинейных форм и специальной трилинейной формой. Пусть £, F и G — сво-
V-6.4 Семейство билинейных форм и трилинейные формы 643 бодные модули размерностей n, m и s соответственно. Задание трилинейной формы Л на Е х F х G в базовом кольце К эквивалентно, при фиксированных базисах, заданию кубической матрицы (Л^л) размера п х т х s, причем соответствие выражается соотношением h(x,y,z) = Y2hijkXiVjZk. (46) Предложение. Пусть К — кольцо. Существует взаимно однозначное соответствие, ставящее в соответствие произвольному семейству s билинейных форм, определенных на одном и том же свободном модуле ExF, трилинейную форму, определенную на Е х F х К3. Если {h\, Л2,..., hs} — указанное семейство билинейных форм и h — ассоциативная трилинейная форма, то соответствие задается соотношением h(x, y,z) = ^2 Л*(х> У)*ь > с °Дной стороны, к М*> У) = Кх> 2/> е*)> с АРУ™** стороны, где (ei, ег,..., е,) — каноническая базис в К3. Это утверждение, кажущееся достаточно банальным, позволяет симметризовать ситуацию: в трилинейной форме h(x,y,z) переменные х,у, z имеют один и тот же статус, и, благодаря этому соответствию, здесь индекс к форм Л* может «проектироваться» в К3. Например, семейство s билинейных форм на Kn x Km позволяет с помощью трилинейной формы из предложения 46 определить семейство т билинейных форм на К3 х Kn, (z,x) «->> h(x,ej,z), или же п билинейных форм на KmxK\{y,z)^h{ei,y,z). (47) Определения. (г) Аналогично тому, как был определен тензорный ранг билинейной формы, можно определить его для трилинейной формы. Если h — трилинейная форма, то ее тензорный ранг есть наименьшее целое г, такое, что h записывается в виде суммы элементарных трилинейных форм, т.е. h = a\ <g> 61 <g> с\ + h ar ® br (g> сг, где а,, Ь,- и с, — линейные формы. Разумеется, такое равенство всегда возможно, так как элементарные трилинейные формы являются системой образующих пространства трилинейных форм. (И) Говорят, что линейные отображения а, Ь и с, определенные линейными формами а,-, 6,- и с,-, а = (ai,...,ar), 6 = (6i,...,6r) и с= (ci,..., сг), или же их матрицами А, В и С (строчки которых являются матрицами соответствующих линейных форм), образуют реализацию трилинейной формы h. 41*
644 V-6 Вычисление семейства билинейных форм Тот факт, что тройка линейных отображений a, b и с является реализацией трилинейной формы h, можно записать в виде Л(*,у,г) = (а(х),Цу),с(:)), где (.,.,.) — стандартное трилинейное произведение на Kr х Kr х Кт. (48) Предложение. Пусть Л — трилинейная форма типа n x m x s и {fti, Л2,..., hs} — семейство билинейных форм типа n x т, ассоциированных с Л. Тогда эквивалентны следующие утверждения: (г) Л = ai 0 &i 0 ci + |-аг0^г0сг, что выражает тот факт, что тензорный ранг h не превосходит г, (it) (fti,..., Л,) = (ai 0 61,..., ar 0 br)C — выражение, в которое входят лишь строки (а не столбцы, как обычно), что означает, что в реализации матрица С действует в транспонированном виде. Из этих двух свойств следует, что тензорный ранг h равен тензор- ному рангу семейства {fti, Лг,..., hs}, с аналогичным результатом при замене (n, m, s) на (s, n, т) или (т, s, n). Доказательство. I Если Л = а\ 0 &i 0 с\ Н h аг 0 6Г 0 сг, то при 1 ^ к ^ 5 имеем Л^ = ci/c-ai0&i+C2/c-a20&2H hcr/c-ar06r, где с/* —элементы матрицы С, что доказывает («). Для вывода обратной импликации достаточно [_переписать предыдущее доказательство в обратном порядке. Возвращаясь к исходной проблеме, т.е. к представлению {fti,..., Л,} в виде линейной комбинации элементарных билинейных форм а,- 0 &,-, имеем равенство (Л/с(х, у)) = *С(а,-(х)6,(у)), в которое матрица С, соответствующая линейному отображению с, входит в транспонированном виде. Последнее равенство образует эффективную реализацию включения s линейных форм Л* в векторное пространство, порожденное г элементарными билинейными формами {fti,..., Л,} С Vect (ai 0 61,..., ar 0 6Г). Формы а дают коэффициенты комбинаций. 6.5 Пример: циклическая свертка порядка 4 (продолжение) В разделе 6.3 показано, что циклическая свертка х*4У порядка 4 может быть реализована с помощью 5 порождающих умножений. Каждое из этих 5 умножений получается как тензорный квадрат одной из 5
V-6.5 Пример: циклическая свертка порядка 4 645 линейных форм, приведенных ниже в таблице слева (матрицы Л и В формулы (9) равны). Тогда можно определить 4 билинейные формы, ассоциированные с 3-тензором Л, используя матрицу С из формулы (9). Это дает нам следующее выражение, в ко- а\(х) = Хо + xi + Х2 + я3, торое входят только 5 порождающих умно- а2(х) = хо — х\ + Х2 — £3, жений (при этом не учитываем ни умноже- вз(я) = Хо — Х2, ния, ни деления на скаляры). Но зато, число сц(х) = Х\ — £з> сложений существенно возрастает, и метод а$(х) = Хо — х\ — Х2 + х3. поначалу может оказаться не очень продуктивным. 4Л0 = ai 0 6i + аг 0 62 + 2a3 0 b3 — 2a4 0 64, 4fti = ai 0 61 - a2 0 62 + 2a3 0 63 + 2a4 0 64 - 2a5 0 65, , . 4Л2 = ai 0 6i +a20 62 - 2a30&3 + 2a40&4, I ' 4Л3 = ai 0 61 - a2 0 62 - 2a3 0 63 - 2a4 0 64 + 2a5 0 65. Можно также заметить, что в эту формулу матрица С входит в транс- понированом виде, как и было уточнено ранее: строчки С читаются сверху вниз в базисе системы (а,- 0 &,). Обозначим через Л трилинейную форму, ассоциированную с семейством четырех билинейных форм {Ло,Л1,Л2,Лз}. Как было показано в 46, 3-линейная форма Л может выражаться равенством Л(х,у, z) = ^jhk{x^y)zk. Здесь можно переписать Л(х,у, z) = (а\ 0 &i + а^ 0 &2+ Л ) zo + (а\ 0 61 — a2 0 62 Н ) z\ H , что приводит нас к введению линейных форм: , ч Zo + Z\ + Z2 + Z3 ч Zo — Z\ + Z2 — Z3 ci(z) = 4 ' °2^ = 4 ' , ч 2*0 + 2*1 - 2*2 - 2*з , ч -2*0 + 2*1 + 2*2 - 2*3 сз(*) = 4 ' °4^ = 4 ' , . -2zx + 2*з Теперь соотношение (10) переписывается в виде: Л = а\ 0 &i 0 с\ Н Ь a50 650c5. Далее предполагаем, что многочлен X = хо + ziT + X2T2 + Z3T3 фиксирован, и постараемся собрать все операции, отличные от 5 порождающих умножений, необходимых для вычисления СС4. 3-линейная форма Л, ассоциированная с циклической сверткой порядка 4, такова, что Aij,* = 1, если i + j = fc (mod 4), и 0 в противном случае. Следовательно, она обладает свойством симметрии A,-j^ = Afc,4-j,i) где все индексы берутся по модулю 4: Л|)0)/с = A*fo,i» ^ьМ =
646 V-6 Вычисление семейства билинейных форм Л/,,3,1, Ы)2)к = Лл,2,1, Л|)3)* = Лл,1,|. Значит, матрицы А! = С, В1 = В, получающиеся перестановкой второго и четвертого столбцов1, С" = А образуют реализацию 3-линейной формы Л. / А' = 1 1 2 -2 0 1 -1 2 - 2 -2 С 1 1 -1 -2 -2 2 -2 0 2/ = ) (\ -\ 1 0 0 \1 1 -1 Я' 1 1 -1 0 -1 / = \ -1 0 -1 1> '1 1 1 0 Л \ 1 1 -1 0 -1 1 1 1 -1 0 -1 1\ -11 0 1 ; -1/ (11) Здесь наиболее сложные вычисления (для которых коэффициенты отличны от 1 или —1) приходятся на первую матрицу А!, ассоциированную с линейными формами я,-, что позволяет заранее вычислить А'(х) (так как я,- фиксировано). Тогда циклическая свертка вычисляется с помощью нахождения значений 5 линейных форм относительно у,- (с помощью сложений и вычитаний, как показывают строки матрицы Б'), таким образом, чтобы сократить число операций насколько л л л л возможно. В рассматриваемом /3\ I Л 1 1 - \ / Уо \ примере, можно оптимизировать 4 I I - п 1 n I j/i произведение, стоящее справа, Г | I 0 -1 0 1 \ У2 I вычисливспеРва2>о + У2 иу1 + у3, \6) \л л 1 1/^Уз/ что позволит нам вычислить 7 первое матричное произведение, используя лишь 7 сложений. Если же, выбрав другой путь «оптимизации», рассматривать суммы уо + у\ и уг + уз, встречающиеся по два раза, то было бы невозможно осуществить это матричное произведение менее, чем за 8 сложений! Затем осуществляем пять умножений этих форм на заранее вычисленные константы а,, полученные из строк А1: (т1\ ТПз \т5 /ai*s3\ С*2 * «4 аз * «5 С*4 * $6 \а5 * «7 где 1 <*4 \»5 / / 1 1 2 -2 0 1 -1 2 2 -2 1 1 -2 2 0 1\ -1 -2 -2 2/ ГХ0' Я2 <ХЗ' внимание: так как нумерация начинается с О, первый столбец матрицы (в обычном смысле) имеет номер О, второй — номер 1 и т.д.
V-7 Малые схемы для дискретного преобразования Фурье 647 Наконец, произведем на этих результатах сложения (или вычитания), указанные столбцами матрицы С", минимизируя число операций. «1 «-У0 + У2, «5 «-У0-У2, «2 <-У1 +УЗ, «б <-Уз-Уь «3 <-«l +«2, «7 <- «5 " «8 f- mi + Ш2, «12 <~ «8 +«9, *0 = «12, *1 5g ЬШз + Ш5, «13 <- «10 + «11, = «13, *2 = «14 «io ^— nil «14 <- «8 " I, *3 = - «6, ^*54 «7, - ni2, " «9, «15 «4 , «11 f-5l - f- Ш4 «15 <- «10 - "«2, - m5, «n, Таблица 2. Циклическая свертка z = x *4 у на 4 точках Схема вычисления СС4 в таблице 2 использует 5 умножений и 15 сложений/вычитаний (вместо 16 умножений и 12 сложений). В этой схеме сложения нумеруются *i, *2 • • • > & умножения mi, тг ... 7 Малые схемы для дискретного преобразования Фурье Методы Кули — Тьюки и Гуда существенным образом используют тот факт, что показатель п, для которого вычисляется DFTn, является составным. Напротив метод Рейдера, опубликованный в его статье: «Discrete Fourier transformwhen the number of data samples is prime», применяется к преобразованию Фурье простого порядка р, сводя его к вычислению свертки порядка р— 1. Реализуя эти циклические свертки, получаем, благодаря методу Винограда, эффективные схемы для Dftp, которые можно потом внедрить в методы Кули — Тьюки или Гуда. Тогда для данных порядков это дает схемы вычисления дискретных преобразований Фурье с удивительно малым количеством операций. 7.1 DFT порядка р и СС порядка р — 1 (метод Рейдера) Прежде, чем изложить метод Винограда, мы покажем, как можно свести вычисление дискретного преобразования Фурье, простого порядка р к циклической свертке порядка р — 1.
648 V-7 Малые схемы для дискретного преобразования Фурье Используя исследование билинейных форм, проведенное в предыдущем разделе, мы сможем эффективно вычислить эту циклическую свертку, и, значит, эффективно вычислить преобразование Фурье. Но сначала рассмотрим пример: каковы следствия из ССг для DFT3? В преобразовании Фурье DfT3,om расположенном справа (где и> — кубический корень из единицы), выделим 2 х 2-подматрицу-циркулянт в правом нижнем углу матрицы Уш. Эта подматрица-циркулянт является матрицей циклической свертки на 2 точках. Для вычисления (см. упражнение 22) циклической свертки z = 2*2 У на 2 точках для фиксированного х с помощью 2 умножений и 4 сложений используем схему 3, приведенную ниже. |*1*-Уо+Уь «2<-Уо-Уь mif-^a^tsi, m2 f-^^-^ *52 I «3 *— ™1 + Ш2, 84 4— ГП\ — ГП2, *0 = S3, Z\ = S4 Таблица 3. Циклическая свертка на 2 точках Тогда получим (упражнение 24) схему вычисления (4) для а = DFT3lU>(a), использующую 2 умножения и 6 сложений (вместо 4 умножений и 6 сложений в обычном методе). Существуют другие схемы, позволяющие вычислять не только Dft3,om ho также и ADft3(u;) для фиксированного А. Такой тип схем изучался Виноградом, который получил метод более эффективный, чем метод Гуда. Теперь перейдем к теореме Рейдера, которая точно определяет, в каком смысле дискретное преобразование Фурье простого порядка может вычисляться через циклическую свертку меньшего порядка. 51 «— а\ + 02, $2 <— 0>1 — «2» 8з <— ЯО + «1, $4 <— Oto + ГП1, $5 *— $4 + Ш2, $6 <— $4 ~" т2> ^0 = S3, ^l = 55> «2 = 5б Таблица 4. Дискретное преобразование Фурье на 3 точках В дальнейшем р — простое число, V — матрица Вандермонда порядка р, ассоциированная с корнем lj р-й степени из единицы: V = (и>,<7). Как и в определении 30 раздела 5.2, если а — перестановка интервала [0,р[, то обозначение Ра используется для перестановочной матрицы, йо\ /11 1 \ (аЛ ai I = I 1 ш и2 I I <ц I а,2) \ 1 cj2 и> ) \а2 J
V-7.1 DFT порядка р и СС порядка p — 1 (метод Рейдера) 649 определенной своим действием на каноническом базисе: Pa{^j) = ^a(j) иаа — вектор: аа = (аа(0),..., а<т(Р-1)) = Лт-* (а). (49) Теорема (Рейдер, 1968). Любой образующий элемент 7 группы обратимых элементов по модулю р определяет перестановку а интервала [0,р[ по правилу: <т(0) = О и a(i) = 7,_1 mod p. При этих условиях (г) матрица Pa-\ VPa имеет подматрицу порядка р — 1, содержащуюся в правом нижнем блоке, V°, которая является циркулянтом, (гг) вычисление Dftp сводится к вычислению Ccp_i в следующем смысле: если числа bj определены матричным равенством (ba(j))o<j<p = Va(a<7(i))o<i<Pi то a = DFTp(a) задается равенствами: d0 = a0 H h ap_i и для 0 < г < р : а,- = а0 + 6,-. Замечание. Перестановка а, которую можно назвать перестановкой Рейдера, ассоциированная с у, фиксирует 0 и 1. Матрица-циркулянт — это матрица, в которой элемент с индексами i и j зависит только от i + j mod n (имеется другое определение, где вместо i + j mod n рассматривается i — j mod n). Доказательство. I По результатам о перестановочных матрицах, установленным при исследовании метода Гуда (см. раздел 5.2), ясно, что элемент с индексом (i,j) матрицы VPa есть uia(i) и что у матрицы Pa-\VPa этот элемент есть u)a^a^\ По определению а имеем для строго положительных г и j (т.е. рассматривая только подматрицу Vе): (Рв-гУР0)ц=Ш<>*'-\ [_и по предыдущему замечанию получаем, что V° — циркулянт. Пример Например, в F7 элемент 3 является образующим группы обратимых элементов, что дает перестановку a = (0,1,3,2,6,4,5) и приводит к следующей записи, в которой ясно видна свертка порядка 6:
650 V-7 Малые схемы для дискретного преобразования Фурье /йо\ из а2 а4 \а5/ /1 1 1 1 1 1 liii и3 W" W5 иг ЦТ W1 и>6 иг и;5 а;" а;3 а;" и>4 а/1 и" U/2 иг и/5 UT и3 и6 и1 а;3 а;2 а;6 а;4/ /а0\ аз 02 а4 W 7.2 Комбинация схем Рейдера и Гуда Виноград в его замечательной статье: «On computing the Discrette Fourier Transform» удивил «общество FFT», анонсировав метод, использующий 20% от числа умножений по методу Кули — Тьюки и близкое к тому число сложений. Его метод основывается на внимательном анализе разложения Гуда и на суровой экономии при вычислении дискретных преобразований Фурье на небольшом числе точек (работа, которая теперь стала возможной благодаря исследованию билинейных форм и циклических сверток). Мы не будем обсуждать здесь принцип, разработанный Виноградом во всей его общности. Наоборот проиллюстрируем его на нашем излюбленном примере: вычислении DFT15. Векторизация метода Гуда по Винограду исследуется в упражнении 37. 7.2.1 Подробное изучение DFT3 Рассмотрим сначала £ — корень кубический из единицы. Мы используем £ обычным образом для вычисления преобразования Фурье порядка 3. Но вполне возможно обобщить проделанное вычисление, чтобы получить вычисление, которое приведено справа, в котором Хо, Х\ и Хъ — элементы произвольного векторного К-пространства F. Обозначим это вычисление DFTjr £. Для получения метода вычисления Х{ достаточно возвратиться к схеме 4, помещенной перед теоремой Рейдера. Хо + Х\ + Хч Хо + Х^ + Х*, Si <- Хг + Х2, Mi <- sttei * S S4 f- Xq + M1, S2 <- X\ — X2, i, M2<-*^-*S2, X1<-S4 + M2, Xq 4— Xq + Si, X2 4— 54 — M2 Она показывает, что можно вычислить векторную схему DFTj?^, используя 2 умножения на скаляр и 6 сложений векторов, что приводит
V-7.2.1 Подробное изучение DFT3 651 к операциям в базовом теле, так что DFTjr ^ вычисляется с использованием 6q сложений и 2q умножений в базовом теле, где q — размерность пространства F. Теперь слегка усложним условия и поставим вопрос, как можно эффективно вычислить DfTjp^jBAo, BXi, 5X2), если В —линейное преобразование пространства F. В только что приведенной схеме нужно применить В к 3 выражениям, либо к значениям X, в начале или же к значениям X, в конце, что приведет к появлению некоторого числа дополнительных скалярных операций. Тогда уместен вопрос: можно ли воспользоваться этими матричными умножениями, чтобы исключить 2q умножений, присутствующих в первом вычислении? Имеется несколько возможных ответов: невозможно сэкономить умножения в схеме вычисления, рассматривая ее так, как она была записана, но зато, если после того, как мы получили формулы, дающие Dft, ее слегка модифицировать, можно добиться некоторой экономии. Преобразование, которым мы будем оперировать со схемой вычисления, будет оправдано. В нижеследующей схеме значения Х\ и Х2 выражены через Х0 посредством лишь модификации выражения для М\. s1<-x1 + x2, Ml<-(^-l)*Sb 54 «- Хо + М\, S2 «- Х\ — Х2, M2<-^*S2, Xi <- S4 + М2, Хо «— Хо + Si, Х2 <- 54 - М2 Далее увидим, что эта модификация вычисления основана на матричном соотношении между Dftp и Ccp_i, отличающемся от того, который мы использовали до сих пор. Теперь можно перегруппировать операции преобразования В и умножения на константы. Мы заменим Х0 <- Х0 + Si на Х0 <- В{Х0 + Si), Мх <- (^ _ 1) * Si на Mi <- (^- - 1) • £(Si) иМ2ь a^i * 52 на М2 f- ^- • £(S2). Таким образом, мы эффективно вычисляем DFTf^jBAo, BX\, BX2) и, вычисляя заранее константные преобразования (**^ 1) • В и ш~£ • В, экономим 2q умножений. Сложность, которую получают для этого вычисления, определяется как функция сложности вычисления В (произведения на матрицу), что можно обозначить через М(В) для умножений и Л(В) для сложений. Тогда получаем, что для вычисления DfTf^(BX0, BX\, BX2) нужно: М(В) + 2М(\В) умножений и Л(В) + 2Л(\В) + Qq сложений.
652 V-7 Малые схемы для дискретного преобразования Фурье 7.2.2 Снова Dft5 Теорема Гуда утверждает, что для вычисления преобразования Фурье на 15 точках достаточно вычислить несколько преобразований Фурье на 5 точках, а затем применить к полученному результату преобразование Фурье порядка 3. Тогда получится искомый результат с точностью до нескольких перестановок компонент. Итак, дискретное преобразование Фурье является линейным преобразованием. Значит можно отвести преобразованию Фурье порядка 5 роль преобразования 5, введенного в предыдущем разделе так, что с точностью до перестановок вычисление Dftf^{BXoj ВХ\, 5X2), описываемое как операция над элементами тела (а больше уже не векторного пространства), будет преобразованием Фурье на 15 точках. Для успешного окончания исследования осталось определить схему, позволяющую вычислять преобразование Фурье на 5 точках, а также произведение преобразования Фурье на 5 точках на константу (\В). Преобразование Фурье порядка 5 будет вычисляться, согласно теореме Рейдера, с помощью циклической свертки порядка 4. Следовательно, нам нужно снача- /а0\ ла определить перестановку Рейдера интервала [0,4]. Для этого выберем образующий группы обратимых элементов по модулю 5. Чи- 02 а4 W 1 1 Vi 1111 \ иг и3 и" и>4 иг а;1 иг и3 и;2 и1 шЧ а2 а4 W ело 2 является таким образующим, который, в силу равенства (^°,^1, g2,g3) = (1,2,4,3) индуцирует перестановку а = (0 1 2 4 3) и приводит к равенству справа. Продолжение и окончание этого исследования посвящены установлению явных формул для вычисления ADFTs, с максимальной экономией умножений и сложений. Как можно будет убедиться, это исследование требует иногда таких усилий, которые кажутся несоизмеримыми с полученным выигрышем, но это так и есть, ведь это дискретное преобразование Фурье... Разложение, позволяющее обычно переходить от DFT5 к СС4, существенно использует следующее матричное соотношение: (\ 1 1 \1 1 W2 U/4 ш3 1 U/2 U/4 и3 W1 1 U/4 U/3 U/1 и2 1Л иг и/1 и/2 шЧ /1 1 1 1 1\ ' 1 О О О О 10 0 0 0 10 0 0 0 \1 0 0 0 0/ +
V-7.2.2 Снова DFT5 653 + /° 0 0 0 \0 о о or u/2 a;3 Ш1 w3 w2 w3 w1 w w4 7 В этом выражении умножение первой матрицы на А индуцирует умножение на А двух следующих матриц. Вторая матрица, фигурирующая в сумме, умноженная на константу, остается все еще матрицей циклической свертки, которую можно вычислить обычными методами. Что касается первой матрицы, если она умножается на константу, то в процессе своего применения она вводит два новых умножения, и это число умножений не может быть уменьшено. Но зато, если записать выражение: 1 1 и/1 1 U/2 1 U/4 \l U/3 и,1 1 U/2 U/4 ы3 1 М U/4 W3 W3 W1 W1 W2 и2 шЧ = (!!! 1 1 ] 1 1 ] Vi 1 ] \\\\ 111 111 L 1 1/ + + /0 0 0 0 0 \ 0 a^-l u;2-l и4 - 1 a;3 - 1 0 a;2 - 1 a;4 - 1 a;3 - 1 a;1 - 1 0 сИ-l u;3-l иЛ-l u2 - 1 \0 u;3-l a;1-! a;2 -1 a/4-l/ в котором последняя матрица суммы есть матрица циклической свертки, то умножение на А перестановочной матрицы преобразования с DFT5, приводит к появлению лишь одного элементарного умножения на первой матрице суммы, все строки которой совпадают. Это тоже преобразование, адаптированное к матрицам порядка 3, которое нам позволило сразу же сэкономить 2q умножений в вычислении Dft3. Продолжим. Предыдущее матричное соотношение при вычислении DFT15 приводит к вычислению суммы, приведенной справа. Первое сла- + гаемое этой суммы соответствует применению матрицы из единиц к вектору (ao>ai, 02,04,03), а второе слагаемое — операции матрицы циклической свертки на том же векторе. Изучим более детально вычисление циклической свертки, чтобы понять, как можно экономно скомбинировать ее с этим разложением. Для этого рассмотрим реализацию (Л', Б', С"), заданную формулой (11) на стр. 647. Первая матрица, А!, позволяет /а°\ Van/ о>\ - а0 <*2 - во \а3- а0/
654 V-7 Малые схемы для дискретного преобразования Фурье предварительно вычислить некоторое множество констант (а,), зависящих от элементов матрицы-циркулянта (здесь а,- зависит от и). При этих условиях получаем следующие вычисления: 6з \ЪЪ/ = В' ТП2 ТПз \т5 а2 х &2 аз х &з оц х 64 V а5 х 65 / ai -а0\ Л \ аг - ао а4 - а0 ^ ^ / аз — ао / = ЧГ /тх\ т2 ^3 Ш4 \т5/ = 'С / mi + d0 \ Ш2 Шз Ш4 Ш5 В этой схеме вычислений заметим, что матрица В' имеет первую строку из одних единиц (это соответствует вычислению многочлена в точке 1), что дает do = ao + a\ + а% + аз + а4 = Ь\ + ао. Далее заметим, что матрица С также имеет первую строку, состоящую целиком из единиц, так как С" совпадает с матрицей А в первой реализации (см. формулу (9) на стр. 643), что также соответствует вычислению многочлена во многих точках, включая единицу. Следовательно, первый столбец матрицы гС состоит из единиц, откуда получаем равенство, приведенное справа. Разумеется, рассуждение, которое мы только что провели для СС4 и Dft5, легко обобщается на Ccp_i и Dftp. Значит, можно дословно сохранить схему вычисления Ccp_i и, используя два дополнительных сложения, вычислить Dftp. Эти два сложения добавлены: одно перед вычислением элементарных произведений a,-6,-: mo = ao + bi, а другое — перед применением tCl\ m\ «— то + m\. Для вычисления ADFT5 надо вычислить выражение то = A(ao + &i), требующее одного дополнительного умножения. (50) Резюме. Схема вычисления a = ADFTp(a) получается из схемы вычисления Ccp_i добавлением двух сложений и одного умножения: сначала добавляется операция то = А х (ао + Е) перед вычислением элементарных произведений (в этой операции- Е обозначает сумму всех а, при i\ф О, причем эта сумма эффективно вычисляется в процессе циклической свертки)у затем осуществляется преобразование гп\ «— mo + mi, в котором т\ обозначает первое элементарное произведение (кратное EJ, вычисленное в процессе циклической свертки. Если вычисление Ccp_i требует М умножений и Л сложений, то вычисление Dftp требует М умножений и Л+2 сложений, а вычисление ADftp требует М + 1 умножений и А+ 2 сложений.
V-8 От FFT к тензорному произведению 655 Применим теперь это исследование к частному случаю Dft5. Для этого вернемся к формулам, приведенным на стр. 648, позволяющим вычислять СС4, заменяя в них (у0, уз, Уг, Уг) на (ai, a2,сц, a3), (zo, zi, ж2, ж4) на (w- l,a;2 — l,a;4 — l,a;3 — 1), и (20,21,22,23) на (ai,a2,a4,a3). Схема, представленная в таблице 5, позволяет вычислять преобразование Фурье DfTs с использованием 17 сложений и 5 умножений, а также, вычислять ADFT5, используя 17 сложений и 6 умножений. Если сопоставить эти результаты с оценками, полученными в предыдущем разделе для сложности вычисления DFT3, можно заключить, что для вычисления преобразования Фурье порядка 15, если допускается предварительное вычисление констант, тогда достаточно 17 умножений и 81 сложения в базовом теле! Можно сопоставить этот результат и 196 умножений и 210 сложений в наивном методе, однако (внимание: эта сложность квадратична по отношению к размерам данных, тогда как все другие методы дают оценку O(nlogn)) или 76 умножений и 90 сложений в методе Кули — Тьюки, или же 68 умножений и 90 сложений в методе Гуда, не рассматривавшемся Виноградом. Замечательно, не правда ли? «1 <— 01 + <>4, «2 «— <*2 + a3, S3 <— «1 + «2, «4 «— S\ — 52, «5 <- <*i - fl4, s6 <- а2 - а3, s7 <- «5 - «6, ^Щй1ЩЩ^&!^|^Ш mi <- A^ х S3, m2 <- А"1 ""У""3 х «4, Шз <- А^1^3-^-^3 Х55, 5g «— mi + Tl2, 59 ^— *™3 + Tl5, $10 f- Ш1 — *™2, 5ц «— ГП4 — Ш5, «12 «-«8 + «9, «13 <-«10 + «11, «14 <-Sg -«9, «15 «~ «10 - «11, aof-mo, ai <- «12, 62 «- «13, <*з «- «15, а4 <-$14 Таблица 5. Преобразование Фурье на 5 точках: а = ADFT5>u,(a) 8 От FFT к тензорному произведению Мы надеемся, что содержание этой главы показывает, что дискретное преобразование Фурье существует не только ради оптимизации произведения многочленов (хотя это и было нашей отправной точкой).
656 V-8 От FFT к тензорному произведению На протяжении всего исследования мы встречались почти со всеми понятиями элементарной арифметики, представленными ранее: цикло- томическими многочленами, группами обратимых элементов по модулю целого числа, примитивными корнями по модулю р, китайской теоремой об остатках, смешанной системой счисления... Мы показали реализацию алгоритма Fft (в которой участвует знаменитая бинарная инволюция), а также коснулись работ Винограда, посвещенных вычислению билинейных форм (с известными замечательными следствиями о Dft). Мы сознательно отказались от точки зрения, состоящей в определении с самого начала алгебры конечной абелевой группы, в пользу дуальной конечной абелевой группы (группы, образованной характерами). Под этим формальным углом зрения дискретное преобразование Фурье может рассматриваться как преобразование алгебры абелевой группы в алгебру ее дуальной группы. Тогда появляется соблазн определить также тензорное произведение алгебр, чтобы доказать теорему Гуда во всей ее общности: алгебра произведения двух групп является тензорным произведением алгебр каждого из сомножителей с аналогичным свойством, для преобразования Фурье... Однако мы ввели мало-помалу основные инструменты для изучения дискретного преобразования Фурье. DFTn может рассматриваться как преобразование алгебры AfT^T11 — 1) (модель алгебры Л[2£л] циклической группы 2£п). Нам пришлось иллюстрировть наши методы многочисленными численными примерами (конкретные образы): матрица Вандермонда есть образ Dft, матрица-циркулянт — образ алгебры циклической свертки... Мы вполне осознаем наивность нашего определения тензорного произведения, но сколько студентов старших курсов способны понять абстрактные определения? Наш подход (определение тензорного произведения двух матриц) позволяет нам лишь обосновать метод Гуда, и мы надеемся, что с помощью конкретных многочисленных примеров, которые мы привели, читатель сможет лучше понять абстрактное тензорное произведение. Мы не против того, чтобы представить последний аспект так обесславленного тензорного произведения. Для взаимно простых р и q китайская теорема об остатках опять порождает и устанавливает изоморфизм алгебр A[Zpq] ~ A\LP] ® A[ZP], неуловимый с нашей наивной точки зрения (но не тензорное произведение алгебр). В действительности, и это было нашим желанием, этот изоморфизм хорошо прочитывается на матрице-циркулянте порядка pq: с точностью до перестановки строк и столбцов он появляется как матрица-циркулянт
V-8 От FFT к тензорному произведению 657 порядка р, состоящая из блоков порядка д, каждый из которых является, в свою очередь, циркулянтом. Так, для р = 2 и q = 3 имеем схему: /*о\ *1 *2 *3 *4 W <=> /х0 Xl Х2 х3 1 я4 \ж5 *4 *2 *3 *\ KzJ х\ Х2 Х3 Х4 Х$\ Х2 Хз Х4 Х$ Хо Хз Х4 Х$ Хо Х\ Х4 #5 Хо Х\ Х2 Х$ Хо Х\ Х2 Хз Хо Х\ Х2 Хз Х4/ = ( Уо\ У\ 2/2 Уз 1 <$ : У* 1 W /Х0 Х4 Х2 Хз Х\ Я5\ Х4 Х2 Хо Х\ Х$ Хз Х2 Хо Х4 Х$ Хз Х\ х3 х\ Х$ Хо Х4 Х2 Х\ #5 хз Х4 Х2 Хо \ Х$ Хз Х\ Х2 Хо Х4 J /Уо\ 1 У4 ' У2 Уз У\ W Конкретная визуализация тензорного произведения алгебр, не так ли? В качестве упражнения, и не только для того, чтобы успокоить пуристов (формальные рассуждения проясняют структуру), мы как раз и придерживались абстрактной точки зрения (преобразование Фурье на конечной абелевой группе). При этом выявляются обе алгебраические структуры A[Q]: почленное умножение функций (единственным образом определенное структурой Л), которое требует |П| операций и, циклическая свертка (существенным образом использующая структуру группы П), требующая |П|2 операций; при этом преобразование Фурье используется для перехода от первого преобразования ко второму и обратно. Мы заключили пари: можно придти к абстрактной математике через конкретный способ изложения. Удалось ли нам это? Судить читателю. В наш век пострационализма все большее число работ пишется на символических языках и все труднее понять почему: какова их действительная цель и в чем необходимость или преимущество быть окруженным томами, состоящими из банальностей, представленных в символической форме? Кажется, что символизм становится ценностью в себе и что он должен почитаться за великую точность. Речь идет о новом выражении старых истин, новом символическом ритуале, новой религиозной сути. Однако единственная возможная ценность такого рода вещей, 42 1017
658 V-8 От FFT к тензорному произведению единственно возможное извинение за сомнительную претензию на точность, кажется, в этом и состоит. Как только выявляется ошибка или противоречие, всякая словесная увертка становится неуместной: достаточно доказать это. Карл Р. Поппер, Логика научного открытия (1954 [149])
Упражнения 1. Наивное умножение. Метод Горнера a. Проверить, что наивный метод умножения двух многочленов степени п — 1 требует в точности п2 умножений и (п — I)2 сложений. b. Записать алгоритм, позволяющий найти значение в точке многочлена степени п — 1 по методу Горнера, и оценить его сложность как можно точнее. 2. Интерполяция a. Пусть семейство п многочленов Ро(Х), Р\{Х),..., Pn-i{X) таково, что Р{ — унитарный многочлен степени г. Показать, что {Ро> ^ь • • •, Pn_i} является базисом модуля АП[Х]. b. Пусть я0, zi, •••) Zn-i — п различных точек. Рассматривая в ЛП[Х] базис 1, X - а?о, {X - х0)(Х - a?i), ..., (X - х0)(Х - х\)... (X - z„-2), написать алгоритм, позволяющий (при некоторых условиях, нуждающихся в уточнении) интерполировать многочлен Р(Х) степени < п, такой, что P(xi) = у,. Проверить этот алгоритм в Ъ для следующих интерполяционных последовательностей: {х0,х1,х2,х3) = (-1,0,1,2), (уо,УьУ2,Уз) = (3,1,3,15) или (уо,УьУ2,Уз) = (3,1,3,0). 3. Произведение в А[Х] Пусть Т — отображение, соответствующее вычислению значений многочлена в Л[Х] в п точках яо, ^ь • ••> Zn-i из кольца А. Предположим, что элементы Xi—Xj обратимы в этом кольце при г ф j. Обозначим тогда P*Q = F~1(T(P) x T(Q)), где T~l представляет собой операцию интерполяции. Что представляет собой это произведение на А[Х]? 42*
660 V Дискретное преобразование Фурье 4. Число единиц в матрице Вандермонда, определенной с помощью корня из единицы Обозначим i/(n) число единиц в матрице Уш, элементы которой и1*\ где и — примитивный корень n-й степени из единицы. Иначе говоря, и(п) — число пар (г,.;) Е Ъп х Zn, таких, что ij = 0 (в Ъп). a. Показать, что и — мультипликативная функция, т.е. и(пт) = и{п)и{т)) если п Л m = 1. b. Проверить, что и(п) = Y^=o НОД(г, п) = ^п d • <р(%), где <р — функция Эйлера. c. Вывести из предыдущего, что для простого р и k E N*: v(pk) = рк~1(р + к(р — 1)); в частности, v(p) = 2р — 1. 5. Fft на 6 точках a. Пусть и — корень 6-й степени из единицы. Записав б = 2 х 3 = 3x2 и используя пример п = 15 = 3 х 5 из текста, определить две схемы вычисления значений многочлена степени < 6 в степенях и. Сравнить сложность полученной схемы со сложностью обычного метода. b. Тот же вопрос, но в предположении, что и — примитивный корень 6-й степени из единицы. 6. Два этапа в Fft Рассмотрим принцип вычисления многочлена степени < 15, приведенный в разделе 1.2. Объяснить, как второй этап этого вычисления (тот, который выражает clj в зависимости от bj) может рассматриваться как множество 5 преобразований Фурье на 3 точках. Выразить сложность FFT3x5 как функцию от сложностей DFT5 и DFT3. 7. Циклическая свертка Показать, что множество функций из [0, п[ в кольцо Л с обычным умножением и циклической сверткой есть коммутативное унитарное кольцо. 8. Примитивные корни из единицы а. Пусть и — корень n-й степени из единицы такой, что 1 — их не является делителем нуля при г = 1,...,п — 1. Доказать равенство многочленов Хп - 1 = {X - 1) (X - и) (X - а;2) ... (X - а;""1).
Упражнения 661 b. Вывести отсюда, что п = (1 — а;) (1 — а;2) ... (1 — ^n_1), и получить характеризацию примитивных корней из единицы, данную в предложении 4. c. Показать, что свойство из пункта Ь, для произвольных корней из единицы, вообще говоря, не верно. 9. Примитивные корни из единицы (продолжение) a. Пусть <р : А —У В — морфизм колец. Проверить, что, если и Е А — примитивный корень n-й степени из единицы, то это верно и для <р(и>). Остается ли верным этот результат, если рассматривать только корни из единицы порядка п? b. Предположим, что целое число z E Z — примитивный корень из единицы порядка п по модулю т. Показать, что это верно для х mod q для любого д, делящего т. c. Показать, что xGZ тогда и только тогда является примитивным корнем из единицы по модулю т, когда для любого простого делителя р числа т элемент х является корнем порядка п по модулю р. 10. Вычисление циклотомических многочленов Это упражнение устанавливает некоторые соотношения между ци- клотомическими многочленами, которые позволяют свести, в частности, вычисление произвольного циклотомического многочлена Фп(Х) к вычислению Фт(Х), где т — произведение нечетных простых делителей п. a. Показать, что Фп{Х) — унитарный многочлен, имеющий только простые корни (в С) степени ^(п), где <р — функция Эйлера (число образующих в циклической группе порядка п). Показать также, что фп(0) = 1 для любого п ^ 2. b. Доказать равенство <$2g(X) = Фя(—Х) для целого нечетного ОЗ. c. Показать, что многочлен Фпт(Х) делит Фп(Хт). d. Пусть пит — такие два целых числа, что всякий простой делитель т является простым делителем п (это будет так, например, если т делит п). Доказать равенство Фпт(Х) = Фп(Хт). e. Вывести из предыдущего, что для целых n, ni,ri2,.. .п* и простого р:
662 V Дискретное преобразование Фурье Фп<*(Х) = Фп(Хп ) для простого р, не делящего п, Фпр(Х) = ф /уч ; фр.(Х) = ФР(хра") = х^-1^""1 + х^-2^"1 +... + х2^"1 + xptt_1 +1. f. Пусть п ^ 2. Показать, что Фп(1) ^ 1 тогда и только тогда, когда п — степень простого числа р. Показать, что тогда Фп(1) —V- 11. Функция Мёбиуса и циклотомические многочлены Обозначим через /i функцию Мёбиуса (глава II). Показать, что Фп(х) = п„|„(^-1)'4(-)- 12. Примитивные корни по модулю чисел Ферма и Мерсенна a. Пусть Мр — число Мерсенна, т.е. число 2Р — 1, где р — нечетное простое число. Показать, что —2 является примитивным корнем порядка 2р по модулю Мр. b. Пусть Fq — число Ферма 22* + 1. Показать, что 2 является примитивным корнем порядка по модулю Fq. Вычислить у/2 по модулю Fq и показать, что это примитивный корень порядка 29+2. 13. Частный случай теоремы Дирихле a. Доказать, что для любого целого п существует простое число р, такое, что группа обратимых элементов по модулю р содержит элемент порядка п. b. Доказать, что это число р имеет вид кп + 1. Обратно, доказать, что если р — простое число вида fcn+1, то группа обратимых элементов по модулю р содержит элемент порядка п. c. Для фиксированного п показать, что существует бесконечно много простых чисел вида кп + 1. 14. Загадочная биекция а. Пусть даны два конечных вполне упорядоченных множества Е и F одинаковой мощности, являющейся степенью двойки. Сопоставим им биекцию <te,f множества Е на F, определяемую рекурсивно следующим образом: • если Е и F — два множества из двух элементов, то <te,f — единственный изоморфизм Е на F,
Упражнения 663 • если Е и F состоят из 2п элементов, то нумеруем их в возрастающем порядке Е = {ei < е2 < ... < e2n}, F = {/i < /2 < ... < /2п}, определяем Е1 = {еь...,еп}, £2 = {еп+ь... ,e2n}, Fi = {/i,.,/2n-i}, F2 = {/2,..,/2п} и тогда полагаем <te,f{z) = ve^fAx) Для х Е Е1, <te,f{x) = G^Fafa) Для х £ Е2. Определить эту биекцию не рекурсивным образом и показать, как можно ее вычислить. Ь. Определить аналогичную биекцию для случая, когда число 2 заменяется на произвольное целое g ^ 3. 15. Вычисление инволюции, действующей в Fft Пусть q и к — два фиксированных целых числа, q ^ 2. Надо составить таблицу для s при 0 ^ s < qk, где s — число, разложение которого по основанию q является обратным по отношению к разложению по основанию s. a. Как получить разложение по основанию q для s + 1, если известно разложение si b. Пусть Тз — массив, представляющий разложение ё по основанию q. Выразить s + 1 и Т~ как функции s и массива 7}. c. Вывести алгоритм вычисления таблицы значений s. 16. Fft порядка, являющегося степенью целого числа Доказать предложение 12 на странице 598. 17. Алгоритм FFTgfc Выписать явные формулы для FFTn, где п = qk (формулы, аналогичные тем, что входят в предложение (5) на стр. 603). Описать в деталях алгоритм Fft для п = 3*. 18. Итерация метода Кули — Тьюки Пусть имеем целое число п = п^п\ .. . п* — корень n-й степени из единицы в кольце А и функцию / : [0, п[—¥ А. Написать итеративные формулы для вычисления преобразования Фурье / для /, определенное при 0 ^ j < п по формуле f(j) = Y2o<i<nf(*) u%^ используя треугольное выражение справа в формуле (8) (см. раздел 4.2.2).
664 V Дискретное преобразование Фурье 19. Метод Кули — Тьюки: пример 12 = 4 х 3 В тексте метод Кули — Тьюки проиллюстрирован с помощью примера п = 12 = 3 х 4 (р = 3, q = 4). Провести аналогичное исследование для случая р = 4, q = 3 и сравнить эти два метода. 20. Метод Гуда Для 15 = 5 х 3 Детализировать метод Гуда для корня 15-й степени из единицы с разложением 15 = 5 х 3. 21. Метод Гуда в терминах многочленов В этом упражнении р и q обозначают два целых взаимно простых числа и п = pq — их произведение. Пусть 0 : Z —>ZxZn 0' :ZxZ—>Ъ индуцируют изоморфизмы групп Ъп на Ър х Ъч и наоборот. Полагаем 0(1) = (г,5), 0'(1,О) = г' и 0'(О,1) = *'. a. Напомнить, при каких условиях на (г, s) и (r',s') 0 и в' являются взаимными изоморфизмами. Каковы соответствующие значения в китайской теореме об остатках? Показать, что можно выбрать г' = q и s' = р. b. Показать, как можно определить с помощью в и 0', морфизмы колец Л[Х] в A[Y,Z] и A[Y,Z] в А[Х], индуцирующие посредством перехода к фактору взаимно обратные изоморфизмы: 0 : А[Х]/{Хп - 1) -► A\Y, Z]/(Y* - 1, Z*> - 1) и в': A\Y, Z\/{Y* - 1, ZP - 1) -► А[Х]/{Хп - 1). c. Пусть Р{Х) G А[Х]/(Хп — 1). Используя 0 и 0', записать равенство в А[Х]/(ХП — 1), приводящее к методу Гуда. Проиллюстрировать этот метод на примерах. 22. Циклическая свертка на 2 точках а. Числа, участвующие в этом упражнении — элементы кольца А, в котором элемент 2 обратим. Обычно вычисление циклической свертки на 2 точках требует 2 сложений и 4 умножений. Предположим, что матрица-циркулянт фиксирована и что свертка вычисляется для (yo,yi), где уо, у\ — переменные. Показать, как вычисление (zo\ _ fx0 xi\ fy0\ _ fx0y0 + xiyi\ \zij \xx xo)\yi) \xiyo + x0yi)
Упражнения 665 может быть реализовано с помощью 4 сложений и 2 умножений. Ь. Напомним, что zq + z\T = (х0 + х\Т) * (уо + У\Т) (mod T2 — 1). Используя соотношение Т2 — 1 = (Т— 1)(Т+ 1) и китайскую теорему об остатках, доказать другим способом результаты предыдущей задачи. 23. Умножение двух комплексных чисел Можно перемножить два комплексных числа, используя три вещественных умножения. Каким образом? 24. Дискретное преобразование Фурье на 3 точках Пусть в кольце А элемент 2 обратим. Пусть и> — кубический корень из единицы. Обычный метод вычисления матричного произведения справа требует 6 сложений и 4 умножения, при условии, что 3 х 3-матрицауже вычислена. Применяя упражнение 22 (к двум последним строчкам и столбцам матрицы справа), определить алгоритм вычисления, требующий 6 сложений и 2 умножения. 25. Тензорный ранг семейства элементарных билинейных форм Пусть Е и F — два векторных /^-пространства размерностей пит соответственно. a. Проверить, что произведения а ® 6, а Е E*,b Е F*, порождают пространство билинейных форм на Е х F. b. Для данной билинейной формы Л рассмотрим наименьшее г, такое, что Л является суммой г элементарных билинейных форм h = а\ ®fri + a<i ® &2 + Ь аг ®6Г. Показать, что {ai,a2,.. ,ar} — базис линейного векторного пространства, состоящего из линейных форм {Л(.,у), у Е F}. Аналогичный результат дается ниже. Какой получится результат, если выразить Л в базисе Е х F? Как получить в явном ви- /11 1 25 3 7\ де разложение для минимального г? „ I 8 10 46 3 22 п = и 8 9 -2 1 10 7 -3 25 46 39 -13 3 3 4 -1 Обсудить пример билинейной фор- 9 7 39 4 15 мы, матрица которой Я изображена \ —2 —3 —13 —1 —6/ справа. с. Рассмотрим семейство, состоящее из двух билинейных форм zo, z\ типа 2x2, определенное через zq + z\T = (x0 + х\Т) х (у0 + у\Т) (mod T2 -rT-q).
666 V Дискретное преобразование Фурье Выразить zo, z\ • Предполагая, что многочлен Р{Т) = Т2 — rT — q не имеет корней в основном кольце, доказать, что тензорный ранг {zo, zi} есть 3. Указание: Для доказательства, что ранг ^ 3, надо предъявить 3 элементарные билинейные формы, линейными комбинациями которых являются zo,z\. Для доказательства, что ранг > 2, предположим противное, т.е. что существуют разложения zq = аа\ 0 &i + /?аг 0 &2, zi = 701 0 Ь\ + 8а2 0 &2> а затем покажем, что матрица — Szq + /3z\ обратима. d. Доказать, что понятие тензорного ранга зависит от базового кольца: если Я = {Ai, Аг,..., А,} — семейство s билинейных форм на Кп х Кт и К' — надтело тела К, то тензорный ранг Я над К может отличаться от ранга Я над К'. 26. Тензорный ранг произведения двух многочленов Пусть Х(Т) и Y(T) — два порождающих многочлена степеней пит соответственно (с коэффициентами в теле К): Х{Т) = хпТп + ..- + х1Т + х0 и У(Г) = утГт + ... + у1Г + уо. Определим затем семейство п + m + 1 билинейных форм типа (п + 1) х (тп + 1), состоящее из коэффициентов многочлена, являющегося произведением X(T)Y(T): X(T)Y(T) = :„+fflr+m + zn+m-iTn+m-1 + • • • + zxT + z0, где каждое z* — билинейная форма от Xj x yj. a. Показать, что билинейные формы zo, zi,..., zn+m линейно независимы. b. Предположим, что базовое тело К бесконечно. Используя вычисления в точке, показать, что тензорный ранг этого семейства в точности равен п + m + 1, т.е. для умножения многочлена степени п на многочлен степени т используются п + т + 1 «общих умножений» (умножения на элементы К не считаются, учитываются только умножения линейных форм с порождающими коэффициентами). Выписать указанные разложения для п = 2 и т = 3. c. Доказать, что можно найти другое выражение семейства {zo, z\,..., zn+m} в виде линейной комбинации п + т + 1 элементарных произведений, записывая: X{T)Y{T) = (W0 + WlT+... + u;n+m-irn+m-1) +хпУт{Т - h)(T -t2)...(T- tn+m),
Упражнения 667 где ti,$2,...,tn+m — п + т различных точек. Рассмотреть пример для случая п = 2, т = 3. 27. Тензорный ранг циклической свертки порядка 3 Выписать в явном виде реализацию циклической свертки порядка 3 и ранга 4 (который является тензорным рангом Ссз). 28. Циклическая свертка порядка 3 (продолжение) a. Выразить число операций, необходимых для вычисления циклической свертки на 3 точках z = я *з У, пользуясь обычным методом. b. Проверить, что тензор {zo, zi, 22} циклической свертки на 3 точках: z0 + zxT + z2T2 = {х0 + xlT+x2T2) (yo + yiT + y2T2) (mod Т3 - 1) допускает следующую реализацию (вытекающую из упражнения 27) ранга 4: / 1 1 IX / 1 1 IX / 1 1 IX . 1 I 10—11 D 1 0 -1 \ п 1 1-2 А=г\-1 1 oh в= -1 1 о ' с=\ 1-2 1 V 0 1 -1/ V 0 1 -1/ \-2 1 1/ c. Показать, что 3-линейная форма Л = (Л^/с) типа п х п х п, ассоциированная с циклической сверткой на п точках, обладает некоторым свойством «симметрии*. С помощью реализации тензора циклической свертки на трех точках из предыдущей задачи, построить другую реализацию (того же ранга), в которой элементы матрицы С будут 0, ±1. В каком случае эта реализация будет выгодной? 29. Негациклическая свертка порядка 4 Негациклическая свертка порядка п есть произведение в пространстве А[Т]/(Тп + 1). Реализовать нег ациклическую свертку порядка 4 z — х-ку^ при помощи 9 умножений и 15 сложений, при фиксированном х. 30. Произведение двух многочленов степени 3 а. Показать, как можно реализовать произведение двух многочленов степени 3 с помощью 7 умножений. Что можно сказать о размере постоянных коэффициентов?
668 V Дискретное преобразование Фурье b. Найти реализацию произведения двух многочленов степени 3, использующую 9 умножений, все участвующие коэффициенты-константы в которой равны ±1. c. Найти в явном виде реализацию произведения в К[Т]/(Т4 + Т3 +Т2 + Т+ 1), использующую 9 умножений и 16 сложений (если один из сомножителей фиксирован). 31. Циклическая свертка порядка 5 a. Каково число умножений и сложений, необходимых для наивного вычисления циклической свертки порядка 5, z = х *5 у? b. Показать, что можно реализовать z = х*$у с помощью 10 умножений и 31 сложения с приемлемыми постоянными коэффициентами. 32. Циклическая свертка порядка 6 и DFT7 a. Каково число умножений и сложений, необходимых для наивного вычисления циклической свертки порядка 6: z = х*ьу! b. Пусть п — целое нечетное число. Показать, как вычислить циклическую свертку порядка 2п, СС2П, с помощью Ссп и Ссг. c. Вывести отсюда реализацию циклической свертки порядка б, х *б у, при фиксированном х с помощью 8 умножений и 34 сложений. 33. Двойственность конечных абелевых групп a. Дуальным к абелевой конечной группе П является множество Q характеров, т.е. гомоморфизмов П в мультипликативную группу U комплексных чисел с модулем, равным 1: П = Hom(ft,£/). Это множество оснащено структурой (абелевой) группы, индуцированной структурой U: xiX2 •• w 1—► Х1ИХ2И, х"1 • <*> •—-► (хИ)"1 = х(ь>-1)> где х, Xi, X2 GO. Сформулировать несколько функторных свойств Q ■—У Q и доказать, что Q является группой, изоморфной О, где изоморфизм, вообще говоря, не канонический. b. Показать, что те же самые выводы можно получить при замене группы U комплексных чисел с единичным модулем на циклическую группу соответствующего порядка. c. Каждому и £ Q сопоставим и# : Q i—У U по правилу и)&(х) = ^(а;"1). Показать, что и# — характер на Q и что и ь-> и& — бидуаль- ный изоморфизм на себя.
Упражнения 669 34. Преобразование Фурье на конечной абелевой группе Обозначим через А[0] А-модуль, состоящий из всех отображений группы Q в кольцо А. Если Q — конечная абелева группа и если U С U(А) — циклическая группа, порядок которой делится на экспоненту Q (см. определение экспоненты в решении предыдущего упражнения), то можно определить дуальную П для П (элементы Q являются характерами на Q со значениями в £/, см. предыдущее упражнение). Тогда преобразование Фурье А[0] в A[Q] определяется таким образом: DFTn :А[0]Э а *-+a eA[Q], где a(x)=£a(w)x(w). a. Предположим, что 1-й обратим в А для любого и Е U — {!}. Каково преобразование Фурье функции, являющейся константой, равной 1? Доказать, что \Q\ обратимо в А. b. Определим обратное преобразование Фурье A[Q] —у А[0] следующим образом: Dft^1 : А[П] Эа'^а'Е A[Q], где а'(а/) = |Щ £ «/(х)х"1Н- Доказать, что DFTn и Dft^1 взаимно обратны. c. Напомним, что групповая алгебра A[G] произвольной группы G есть А-модуль с базисом G, снабженный следующим ассоциативным умножением: (£y€G А^) (£Л€С? ^h) = E*€g(E д.*л А^л*); иными словами, произведение двух базисных элементов д и h есть базисный элемент gh, вычисляемый в G. А-модуль A[Q] естественным образом наделен двумя структурами А-алгебры: с одной стороны, умножением а-Ь функций (в А), а с другой стороны, сверткой а* 6, т.е. алгебраическим умножением группы Q. Что является единичным элементом в алгебре свертки Л[£)]? Доказать, что преобразование Фурье переводит свертку в обычное произведение. То же самое для обратного преобразования Фурье с точностью до множителя |П|. 35. Преобразование Фурье на конечной абелевой группе (продолжение) U -циклическая подгруппа U (А) порядка, делящегося на экспоненту рассматриваемой конечной абелевой группы.
670 V Дискретное преобразование Фурье a. Пусть Zn — циклическая группа Z/nZ. Объяснить, при условии, что фиксирован некоторый элемент порядка п из £/, почему преобразование Фурье DFTZn может рассматриваться как преобразование A[Zn]. b. Пусть Q = Zp x Zg, где p,q — произвольные целые числа. Какова дуальная группа для Q? Зафиксируем в U элементы и\ порядка рио/2 порядка q. Найти преобразование Фурье на A[ZP x ZJ и показать, что оно сводится к интерполяции многочлена от двух переменных. Рассмотреть случай р = 4, q = 2. 36. Fft на конечной абелевой группе Обозначим через Q дуальную группу к абелевой конечной группе П порядка п, при этом элементы П являются характерами со значениями в подгруппе U группы U(A), обратимых элементов кольца А. Предположим, что группа U является циклической подходящего порядка (см. предыдущее упражнение). Если а : Q —)• А есть функция на А, то определим а : Q —у А следующим образом: а(х) = Х)а€П ааХ(<*)> X € ^- a. Пусть функция а : П —)• А фиксирована. Найти число умножений для вычисления 2(х)> гДе X пробегает П. b. Пусть CI2 С С1 — подгруппа Q порядка q и Q\ — система представителей Q по модулю ^2- Имеем: п = pq, \С1\\ = \Q/Q2\ = Р> 1^21 = q- Записывая каждый элемент а Е Q в виде а = а\ + с*2, где а\ Е fix, аг Е ^2» показать, как можно вычислить все суммы а(х) с помощью п{р + <?) умножений. c. Пусть n — pq. Используя предыдущий результат для Q = Z/nZ, показать, как можно вывести теорему Кули — Тьюки. 37. Тензорные произведения и устойчивые схемы а. В этом упражнении нас интересует сложность вычисления вида А • я, где А — фиксированная матрица, ах — переменный вектор. Показать, на примере, что вычисление, приведенное слева (а, 6, с, (f, и е фиксированы, а Х{ — переменные), может быть реализовано с помощью 7 умножений (вместо 9): такая матрица, удовлетворяющая условию a,-+ij+i = a{j, называется тёплицевой. Сложность вычисления А • х измеряется числом умножений М(А) и числом сложений Л(А). Предположим для простоты, что А — квадратная рхр- матрица, а В — q х g-матрица. Каковы значения М(А) и Л (А), если вычисление реализуется наивным образом? Доказать неравенство С::
Упражнения 671 J P2(Ai/i(s),...,A^(z)) ^p(Ai/i(a?),...,A^(a?))/ .М(Л 0 5) ^ dim A x M(B) + dim В x .М(Л) и аналогичное неравенство для сложений. Сравнить с наивным вычислением. b. Схему вычисления А • х называют линейно устойчивой, если она имеет вид, изображенный '*i\ /MAi/i(s)>...,A/i//i(aO)\ слева, где fki<pj — линей- ж2 I J ^2(Ai/i(z),..., \ц/ц(х)) I ные формы, имеющие «простые» коэффициенты (например, 0, ±1,±2) и постоянные коэффициенты Л^ (зависящие от А,а не от х). Предположим, что вычисление любых Д, <pj требует лишь а аддитивных операций (с учетом вида коэффициентов), и, следовательно, мультипликативная сложность схемы измеряется числом \л умножений А/с х Д(я). Для простоты положим, Л(А) = а, М(А) = ц (эти числа зависят от схемы, а не только от А). Приведем пример, где М(А)=ЗиА{А) = 5: (а Ь\[хЛ = ( ЦЬ(Х1 + Х2)^^Ь(Х1-Х2) \ \с а)\х2) \ф(х1+х2)-ф{х1-х2) + {с-Ь)х1)' Является ли устойчивой схема вычисления DFT3, приведенная в тексте книги (или в упражнении 24)? Если А допускает схему вычисления, являющуюся линейно устойчивой предыдущего вида, то какова сложность вычисления АЛ • я, где А — фиксированная константа? c. Результат Винограда (относящийся к методу Гуда), приведенный в книге, можно обобщить. Для этого нужно ввести естественное расширение линейного отображения / : Кт —)• Кп: оно является отображением Ет в Еп для произвольного ^-пространства Е. Таким образом, если: (х -\- у + \z\ , = I " I , то расширение / имеет вид: (X + Y + \Z\ \X-pY + Z)' Определить точным образом расширение произвольного линейного отображения / : Кт —>• Кп. Каким будет расширение fog? f x g? f + gf А/? канонических вложений Кт -> Кт х Кп, Кт -> Кп х Кт, канонических проекций Кп х Кт -+ Кп, Кп х Кт -* Кт? Обозначим / <8> Id# расширение Ет —У Еп отображения /: чем объясняется такое обозначение? Что может представлять собой Id# <g> /?
672 V Дискретное преобразование Фурье d. Предположим, что А и В допускают устойчивые схемы, имеющие сложность М(А), Л(А) и М(В), А(В), соответственно. Какова сложность вычисления (A<g>Id£)(Xi, • • •, Хр), где Х{ Е E1 Показать, что вычисление (А<g>5) X может быть выполнено с помощью М(А) хМ(В) умножений и dim5 х Л(А) + М(А) х Л(В) сложений.
Решения упражнений 2. Интерполяция а. Обозначим через Qi(X) многочлен П}=о(^ ~~ xj) (степени г) и, в частности, Qo{X) = 1. Многочлен Р(Х), записанный в базисе {Qo,Oi,.-.,Qn-i} в виде Р{Х) = *52PjQj{X), реализует интерполяцию Xj —¥ yj,0 ^ j < п, тогда и только тогда, когда многочлены Pi(X) = Y2j<iPjQj{X) (степени ^ г) реализуют интерполяцию хз ~> Vji® ^ J ^ г- Тогда имеем Ро{Х) = уо, и для i ^ 1 Pi(X) = piQi(X) + Pi-i(X). Это последнее равенство определяет р,, так как у,- = piQi(xi) + P,_i(z,), и потому P,_i(zt) — у,- делится на Qi(x{). Отсюда получаем: I Q(X)<— 1;Р(Х)<— уо; for t in 1 .. n loop пит <— yt - P(xi)\ den i— Щ^оО*» ~ хз)^ if den = 0 or den не делится на пит then end if; Q i— Q * (X - xt-i)\ P i— (пит/den) *Q + P\ end loop; | return P; Для первого набора данных находим Pi = — 2Х + 1, потом Рг = 2Х2 + 1 и, наконец, Р = Р3 = X3 + 2Х2 - X + 1. Для второго набора решения не существует, так как Рг(яз) — Уз = 17 не делится на (х3 — Х2){Х3 - Хх)(х3 - Х0) = 6. 4. Число единиц в матрице Вандермонда, определенной с помощью корня из единицы a. Использовать тот факт, что кольцо Znm изоморфно Zn x Zm, когда пит взаимно просты. b. Имеем i/(n) = YZ=o \Gi\ = J2d\n E,,Mn=rf lGti гДе Для * € Zn, G, — множество {j G Zn, ij = 0}. Легко проверить, что G, — подгруппа в Zn и что G, = Gd, если d = НОД(г, п) (использовать тот факт, 43-1017
674 V Дискретное преобразование Фурье что d G *Z 4- пЪ). Значит, Gd является группой из d элементов (n/d есть порождающий элемент порядка d в Gd)- Для данного делителя d числа п нужно перенумеровать множество Е% тех г, 0 ^ г < п, для которых НОД(г,п) = d. Умножение на d дает биекцию Е"' на Е%, и, следовательно, £"£ имеет то же число элементов, что Е± , т.е. <p(n/d). с. Имеем: к к-1 "(рк) = £рМр*"9) = р" + EpV-'-^p- 1) = q=0 q=0 = pk + k(p-i)pk-1=pk-1(p + k(P-i)). 5. Fft на 6 точках Пусть Р{Х) = а5Х5 + ■ ■ ■ + а\Х + оо. Для разложения 2x3 введем P0(Y) = а0 + a2Y + a4Y2, Pi (У) = аг + a3Y + abY2, так что Р(Х) = Р0(Х2) + Pi(X2)X. Положим тогда (х0,Х1,х2) = (Р0(1),Ро(и>2),Ро(и4)), (x3,X4,X5) = (P1(l),P1(u2),P1(u>4)). Читатель может, аналогичным образом, рассмотреть разложение 3x2. Тогда приходим к двум методам: хо = ао + а2 4- Q4, хз = а\ 4- аз + as, х\ = ао 4- а2а>2 4- a4U/4, Г4 = а\ 4- аза;2 + а$иА, (1) ^ я2 =а0+a2u>4+a4u>2, я5 = ai -|- а3а/4 + а5а/2, ао = #о + хз. сц = xi + X4U/1, а2 = Г2 4- tfsu/ , а3 = хо 4- #з^ , а4 = х\ 4- #4^ , а5 = :г2 4- £5^ , 13 умножений, 18 сложений; (2) уо = а0 + а3, y2=ai+a4, У4=а2+а5, У\ = а0 +а3а/3, уз = ai + а4а/3, у5 = а2 4- а5а/3, ао = Уо 4- У2 4- У4, ai = yi 4- Узи/1 4- ysu/2, а2 = уо 4- У2и/2 4- у4и/4, а3 = у\ 4- уз^/3 + у5, а4 = Уо 4- У2и/4 4- у4и/2, а5 = у\ 4- Уз^5 4- у5а/4, 12 умножений, 18 сложений. Обычный метод требует (6 — I)2 = 25 умножений и 6 х 5 = 30 сложений (если учитывать все единицы в матрице Вандермонда, то уже будет не больше 21 умножения).
Решения упражнений 675 b. Вопрос а использует только соотношение о;6 = 1. Здесь, кроме того, имеем о;3 = —1, что дает в первом приближении: • обычный метод: 16 умножений, 25 сложений, 5 вычитаний; • метод 1: 12 умножений, 17 сложений, 1 вычитание; • метод 2: 8 умножений, 14 сложений, 4 вычитания. Можно еще уменьшить количество операций, учитывая соотношения и4 = —о;, о;5 = —и2 и некоторые возможные перегруппировки членов ... 6. Два этапа в Fft Достаточно включить степени и в коэффициенты. Итак, если Vw& обозначает матрицу Вандермонда, ассоциированную с кубическим корнем о;5, то имеем: /йо\ (Ьо\ (аЛ ( h \ й5 1 = К,. Ь5 1 , Мб = К,. беи;1 , \fiio/ \6ю/ \ап/ \friiw2/ ( &7 ) = К,. ( ь712 ) . С точки зрения сложности, можно записать тогда схематическое равенство: Fft3x5,u; = 3 Dft5)U;3 0 (3 - 1) х (5 - 1) Произведений 0 5 Dft3)U;*. 8. Примитивные корни из единицы a. Действительно, можно записать: Хп — 1 = (X — 1) Р\(Х), Р\(Х) Е А[Х]> deg(Pi) ^ п — 1. Это равенство, примененное к о;1, дает Pi (и*) = О при 1 ^ г^ п — 1, так как и1 — 1 не является делителем 0 в А. В свою очередь, многочлен Pi(X) записывается (так как и — один из таких корней) в виде: Рг(Х) = [Х-и) Р2{Х), Р2{Х) G A[X], deg(P2) ^ п - 2. Применяя это равенство к о;1 и используя тот факт, что и>% — и> не является делителем 0 при 2 ^ г' ^ п — 1, получим: Ръ(их) = 0 при г = 2,3,..., п — 1. Применяя индукцию, немедленно получаем требуемый результат. b. Если разделить на X — 1 оба члена равенства из Л, получим: Xn-i + Хп-2 + +х2 + Х+\ = {Х-и){Х-и2) ...{Х-и/1"1), откуда, для X = 1, имеем п = (1 — и) (1 — о;2) ... (1 — u;n_1). 43*
676 V Дискретное преобразование Фурье c. Согласно предыдущему свойству, если и — примитивный квадратный корень из единицы, то и = — 1 (так как 2 = 1 — и). Достаточно рассмотреть теперь другие корни из единицы, отличные от —1. Итак, если т — произвольное целое число, то классы 2т± 1 (mod 4m) — как раз и являются такими квадратными корнями из единицы. 10. Вычисление циклотомических многочленов а и с. Имеем <£i(0) = — 1; для доказательства того, что Фп(0) = 1, если п ^ 2, используем равенство, данное ниже, в X = О, и воспользуемся индукцией по п: Хп-1 = Фп(Х)(Х-1) П ФЛ(Х). d\n Если и — примитивный корень пт-й степени из 1, то ит — примитивный корень п-й степени из 1. Следовательно, многочлен ФПт(Х), обладающий этими простыми корнями, делит Фп{Хт). d. Покажем, что корень унитарного многочлена Фп(Хт) является также коренем Фпт(Х): Фпт(Х) — унитарный многочлен, имеющий простые корни, являющийся делителем Фп(Хт) и, следовательно, равен Фп(Хт). Пусть и — корень Фп(Хт). Из Фп(о;т) = 0 получаем (jjnm = 1. Значит, и имеет порядок тп: если бы это было не так, то существовало бы простое число р, делящее тп, такое, что ипт^р = 1. По предположению об п и т, р делит п и тогда (um)nlp = 1, что противоречит Фп(о;т) = 0. Так как и имеет порядок тп, то это корень Фпт{Х), что и требовалось доказать. f. Легко проверить, что Фр«(1) = р для простого р. Пусть п = р^хР22 • • -Pq4 и I — множество делителей п, являющихся степенями простого числа р,-. Имеем Хп~х+ Хп~2 +.. . + Х + 1 = YldeI Фа(Х) Ud^i <М*); поскольку l\deI Ф*(1) = р5>23 • • -Ря9 = п> то Udti «М1) = = 1. В частности, если п не является степенью простого числа, то п £ I иФ„(1) = 1. 12. Примитивные корни по модулю чисел Ферма и Мерсенна а. Имеем (-2)' = -V = -1 (mod Мр), (-2)2^ = 1 (mod Mp) и такие же сравнения по модулю любого простого делителя тг числа Мр. Сравнение (—2)2 = 1 (mod тг) не имеет места: действительно, отсюда следовало бы, что тг = 3. Но 3 не делит Мр (так как р — нечетно, то Мр = 1 (mod 3)). Короче говоря, порядок —2 по модулю тг делит 2р и
Решения упражнений 677 не делит ни 2, ни р, значит, этот порядок 2р, что доказывает, что —2 является примитивным корнем степени 2р из единицы. Ь. Полагая п = 29, получаем сравнение 2П = —1 (mod Fg), что дает 22п = 1 (mod Fq). Так как —1 ф 1, то порядок элемента 2 в [/(ZjrJ делит 2п и не делит п. Так как п — степень двойки, то этот порядок с необходимостью равен 2п. Если р — простой делитель Fg, то те же рассуждения показывают, что порядок элемента 2 в Fq также равен 2п. Это доказывает, что 2 — примитивный корень из единицы по модулю Fq. Если положить я = 2"?(2^ — 1),то простое вычисление показывает, что х2 = 2 (mod Fq). Рассуждения, аналогичные предыдущим, показывают, что х = \/2 — примитивный корень по модулю 4п. 13. Мастный случаи теоремы Дирихле a. Пусть х > 1 таково, что все простые делители х делят п (например, х = п или произведение всех простых делителей п). Так как |Фп(я)| > 1 (|Фп(я)| > (х — 1)^(п)), то Фп(я) делится на простое число р. Тогда в Z/pZ имеем Фп(я) = 0, поэтому хп — 1 = 0. Это доказывает, что х обратим по модулю р, и, следовательно, п тоже обратимо по модулю р. Отсюда х — примитивный корень n-й степени из единицы в C/(Z/pZ). b. Целое число п делит порядок C/(Z/pZ),т.е. п делит р— 1. Обратно, если п делит р — 1, то, так как C/(Z/pZ) циклическая группа порядка п — 1, то она содержит элемент порядка п. c. Пусть pi,P2,--мРг — г различных простых чисел, таких, что Pi = 1 (mod n). Положим т = npip2...pr- Тогда существует такое простое р, что р = 1 (mod m). Если положить pr+i = p, то р,- попарно различны и pi = 1 (mod n) для i = 1,2,..., г + 1. 14. Загадочная биекция а и Ь. Если Е = [0,2*[, то существует инволюция, которая переворачивает двоичную запись элемента i E [0,2к[. Аналогичный результат получается, если заменить «двоичную запись» на «разложение по основанию д». 15. Вычисление инволюции, действующей в Fft а. Пусть (so,si, • • ,5/c-i) = «о + «ltfH f-S/c-ig*"1 — разложение s в системе счисления с основанием q. Пробегая массив цифр от индекса к — 1 до 0, отыскиваем первую цифру 5/ < q — 1. Для получения разложения s + 1 заменим цифры sy с индексами j > I (Sj = q — 1 в
678 V Дискретное преобразование Фурье этом случае) на 0 и увеличим на 1 цифру S/. Например, если q = 3, то s = (...,1,2,2) —у s + 1 = (..., 2,0,0). Если такое / не существует (все цифры Sj равны q — 1), то s — последний элемент (s = qk — 1). b. Если / — индекс, найденный ранее, то s + 1 = ql + (s mod ql+1). 16. Fft порядка, являющегося степенью целого числа Равенство Р(Х) = Р0{ХЯ) + Pi{X*)X + ••• + Р^Х*)**"1, где degP,- < qk~1i дает возможность построить рекурсивную схему для вычисления значений Р(Х) в точках и\ 0 ^ г < qk: достаточно вычислить значение каждого Р%(Х) (степени < qk~l) в qk~l степенях и>я (которые являются корнями из единицы степени qk~1), и скомбинировать результаты в соответствии с равенством. Если Mqk означает число операций умножения для вычисления значений Р(Х), то получим Mqk — qMqk-i +(q — l)qk, что дает Mqk = k(q-l)qk (так как Mi = 0) или же Мп = (q — l)n\ogqn. Аналогичный результат верен и для сложений. 17. Алгоритм FFTgfc Обозначим через и корень n-й степени из единицы и через в корень q-й степени из единицы ия . Рекуррентные соотношения для массивов Fm записываются при 0^m<fc,0^i< qk~m~l, 0^j<qmH0^r<q следующим образом: iWi (Wm+1 + rqm + j) = J2 F™ (Wm+1 + sqm + j)0»u,Mk-m-1. 5 = 0 При q = 3 элемент в = и3 — кубический корень из единицы и при т < к массив Fm+i может быть вычислен с помощью Fm по формулам: Fm+i(i3m+1+i) Fm+i(«3m+1+3m+j) k ^m + l(«3m+1 + 2.3m + i) , Fm(i3m+1+j) Fm(t3m+1+ 3m+j) xuP3* kFm(i3m+1+2.3m + i) xo/2'3* где 0 ^ f < 3fc"m_1 и 0 ^ j < 3m. В алгоритме 2 появляется DFT3^, вычисляемое наивным способом. При реализации предпочтительно использовать более эффективную схему вычисления DFT3,*. 1 1 1 в 1 в2 1 в2 в
Решения упражнений 679 Приведем список простых р < 105, таких, что ьз(р — 1) ^ 7. Здесь указан кофактор степени 3 в р— 1, а, в скобках — примитивный корень из единицы по модулю р. 87481-1 = 40-37 (29), 21871 - 1 = 10 • З7 (6), 17497- 1 = 8 • З7 (5) 52 489 - 1 = 8 • З8 (7), 39367-1 = 2-39 (3). function Fast-Fourier-Transform (/ £ А3 begin for s in [0,3*[ loop F(S) <- /(,(,)); end loop; Loop-On-m : for m in 0 .. к — fort in [0,3fc-m"1[ loop to i— 3*t*3m; ti i— forj in [0,3m[loop t-0-j <—to+j; tA-j Go <— F(t-O.i); Gi « G2 <— F(t_2.j) * u;2'*3' 1 loop to+3m; <— ti +J ) return F £ A3* «2 « ti ; t-2-i — F(t-l.i) * u;'*3* c —m—1 F(t'.O.j) <— Go + Gi + G2; F(i F(t.2_j)<— Go+B3Gi end loop; end loop; end loop Loop-On-m; end Fast-Fourier-Transform; + 0G2 -i-i) <— + 3m ( «2 + J — m—1 Go + 0Gi is + 02G2 Алгоритм 2. Быстрое преобразование Фурье в кольце А 18. Итерация метода Кули — Тьюки Для простоты возьмем к = 4, хотя все дальнейшее верно для любого к. Представим i и j в системах счисления тгф и тгф: г = г'отто -f ii 7Ti -f г2Я"2 -f г'зя"з -f 14Я"4> 0 ^ г0 < п0, 0 ^ ii < Hi, ..., 0 ^ г*4 < п4, j = jo*"0 + Л*"1 + J2*2 + ^зтг3 + J47T4, 0 ^ jo < n4, 0 ^ л < n3, ..., 0 ^ j4 < n0. Используя треугольное выражение справа, получим: f(j) = \^U)j*n4(io) У^и;.?э*Э(«1«о) X^yji^faiiio) x to «1 «2 x y^^inr^iaiaiiio) V^ a;joT0(i4t3i2iiio) /Л'\
680 V Дискретное преобразование Фурье где набор (2413*2*1*0) относится к базису {я"о,я"1,я"2,я"з,я"4} (*4*3*2*1*о) = 4^4 + *ЗЯ"3 + «2^2 + 4^1 + *0Я"0- Тогда получим следующие формулы: Fi(joi3i2nio> = 53/(«) wJo*°<W»W.<o)t F2(i0 jl*2*l*o) = J] Fl0'0 13*2*1*0) О/ Jt»1<».W».,o)j 13 FsUoJih *i*o) = X F2(Joji i2 *i*o) и^^Ч 12 F4U0J1J2 J3 *o) = X *зОоЛJ211*0) и****№, ii Fs(JoJiJ2JsU) = XI F^UoJiJ2J3 io> a;J47r4<io>. io В этом случае, чтобы получить /, нужно применить финальную перестановку (тогда как использование левого выражения ведет к применению начальной перестановки, как это видно из раздела 4.2.2): f(j) = Fs(jojiJ2J3J4), т.е. совпадает с f(J47r4+j37r3 + - • •) = F5(jo^4+ii^3 + - • •)• В общем случае получаются следующие формулы при 0 ^ т ^ к: Fm + l(J0 • • -jm-ljm ik-m-l • • -*o) = = 52 F-0'0 • • • jm-l Sifc-m-l • • -io) fa,i-'m<"-'''o>. 8 19. Метод Кули — Тьюки: пример 12 = 4 х 3 Введем следующие 4 многочлена: P0(Y) = a0 + aAY + a8Y2, P^Y) = <ц + a5Y + a9Y2, Pi(Y) = a2 + a6Y + a10Y2, P3(Y) = a3 + а7У + anY2 и имеем: P(X) = P0{X4) + РХ{Х4)Х + P2(XA)X2 + P3{XA)X3, и aj = Po(u>4j) + Pi(w4jV + P2(w4j)u>2j + P3(w4j)a;3j. Организуем вычисления Po(w4j), Pi(w4j), Рг^4-*), Рз(о»4-') следующим образом: 6о = P0(l), bi = Ро(и>4), Ьг = Р0(<А 63 = Pi(l), 64 = Pi(u>4), Ь5 = P,(a>»), 6б = Р2(1), Ьт = ft(«A 68 = P2(w»), 69 = Рз(1), Ью = Рз(и>4), Ьи = Рз(о>8).
Решения упражнений 681 Это дает формулы: Ь0=ао+а4+ав) b3=ai+a6+a9) Ьб=а2+аб+аю, Ь9=аз+а7+ац, 61=a0+a4u;4+aeu;e) 64=ai+a6u;4+a9u;e) &7=аз+ав'*>4+а1о'*>в> &io=a3+a7u;4+aiiu;e) 63=a0+a4u;e+aeu;4) &5=ai+a5u;e+a9u;4) Ьа=аэ+аеи>*+аюи>4, Ьц=аэ+а7и>6+аци>4, ао=6о+Ьэ+6б+Ь9, ai=6i+64u;+67u;3+6iou;3) 03=62+&5'*>3+be'*>4+biiu;6) аэ=60+6эа;э+6би;6+б9и/9) 04=61 +&4t*;4+&7u;e+&io) ац=Ь2+Ь&и>* +Ьъи>10 +Ьцш3, &б=Ьо+Ьэш6+Ье+Ь9и>6, 07=61 +&4t*;7+&7u;3+&iou;9) ав^з+^б^+Ьв^+Ьп» аэ=6о+Ьэа;9+6б'*'6+Ь9и;э) ai0=&i+&4u;10+&7u;e+&iou;6) aii=6a+65u;11+6e'*'10+biiu;9) что требует 60 сложений и 49 умножений (46, если внутри поискать единицы). 20. Метод Гуда для 15 = 5 х 3 Если обозначить £ = о;5 (£ — кубический корень из единицы) и г) = и3 (корень 5-й степени из единицы), то метод Гуда дает: a6 aio a3 ae ai3 a6 an ai a9 ам a-4 aia a3 \а7у = 1 £ £3 1 £3 £ 1 * *3 1 £3 £ 1 * *3 1 *3 * 1 £ £3 1 £3 £ 1 £ £3 1 £3 £ n1 v3 1 £ £2 1 £3 £ 1 £ £3 1 £3 £ l £ £3 1 £3 £ 1 £ £3 1 £3 £ 1 £ £3 1 £3 £ V3 1 £ £3 1 £3 £ 1 £ £3 1 £3 £ 1 £ £3 l £3 £ 1 £ £3 1 £3 £ 1 £ £3 1 £3 £ n3 Ч4 Ч3 1 £ £2 1 £3 £ 1 £ £3 1 £3 £ l £ £3 1 £3 £ l £ £3 1 £3 £ l £ £3 1 £2 £ i4 П3 n3 n1 1 £ £3 1 £3 £ 1 £ £3 1 £3 £ 1 £ £3 l £3 £ 1 £ £3 l £3 £ l £ £3 1 £3 £ ) /a04 aio a5 a6 ai an ai3 a7 a3 аз ai3 ae a9 a* Таким образом, получаем схему вычисления из двух этапов. Если обозначить через W матрицу Вандермонда, ассоциированную с корнем £, а через U — матрицу Вандермонда, соответствующую корню г/, то на первом этапе вычисляется 15 членов by. h = w
682 V Дискретное преобразование Фурье а заключительные члены ctj вычисляются по формулам: аз аэ «12 = U Vai2/ /Ьо\ ' Ь3 * Ьэ Uia/ ац \а2/ = С/ \6i3/ /аю\ Ol3 Й1 \а7/ = tf /J2\ 68 Читатель может проверить справедливость вычислений с помощью полиномиального тождества, имеющего место в факторкольце Л[Х]/ (Х15-1): Р(Х) = (а0 + а10Х10 + а5Х5) + (а6 + ajX10 + апХ5) X6 + + (а12 + а7Х10 + а2Х5) X12 + (а3 + а13Х10 + а8Х5) X3 + + (а» + а4Х10 + аыХ5) X9, что наводит на мысль положить: Р0 = ао+а10Х10 + а5Хъ, Р2 = а12 + а7Х10 + а2Х5, РА = а9+аАХ10 + а14Х5. Pi=a6 + ajX10 + anX5, Р3 = а3 + а13Х10 + а8Х5, Тогда bj определяются следующим образом: Ь0 = Р0(1), bi = Ро(о/2), Ь2=Ро(о'1), 63 = Pi(l), 64=Pi(u/2), is = Pi (u/1), be = P2(l), 67 = P2(w2), 6« = P2(u'1), &9=Рз(1), Ью=Рз(и/2), 611=P3(u;1), 6l2=P4(l), 613=P4(a<2), 614=P4(a/1)- 21. Метод Гуда в терминах многочленов a. Следующие условия необходимы и достаточны: гг'= 1 (modp), г'= 0 (mod q), s' = О (modp), ss' = 1 (mod 9). Существуют несколько изоморфизмов групп Z„ на Zp х Z,, но только один изоморфизм колец. Он задается по г = s = 1 (mod n) и соответствует китайской теореме об остатках. Заметив, что q обратимо по модулю р и р обратимо по модулю q, выберем г' = q и s' = р. Тогда обратные к г и s даются, соответственно, коэффициентами Безу между paq. b. Достаточно определить их посредством равенств: 0(Х) = Y'Zr, e'(Y) = xs' нв'{г) = хг'.
Решения упражнений 683 с. Пусть Р{Х) = J2o<k<n акХк. По модулю Zp — 1, Yq = 1 имеем: в(Р) = ^2 akYskZrk = ^2 аку*к m°d Я2Гк m°d P = к к и, следовательно, P(X) = £0^<P P< (**')(*''')• (mod Xn - 1). Если а; — корень п-й степени из единицы, то и\ = us — корень q-и степени из единицы и с^2 = о;г — корень р-й степени из единицы. Указанное выше тождество сводит вычисление DFTn ц, к р вычислениям DFTg ^ сопровождаемым q вычислениями DftP)U,3. Следует заметить, что вы- бор г' = q и s' = p просто приводит к P{(Y) = ^ a(pi+gi) modnYj, ui = шр и и>2 = u>q. Например, если р = 3, q = 4, то для многочлена Р(Х) степени < 12 получим тождество по модулю X12 — 1: Р{Х) = (а0 + а3Х3 + абХ6 + а9Х9) + (а4 + а7Х3 + а10Х* + axX9)X4 + (а8 + ацХ3 + а2Х6 + а5Х9)Х8, что позволяет схематически записать DFTi2)U. — Dft3>u,4 0 Dft4)U,3. 22. Циклическая свертка на 2 точках а. Имеем z0 + z\ - (х0 + a?i)(y0 + yi), *о - *i = (s0 - a?i)(y0 - yi) , что требует лишь 2 умножения; если 2 обратимо в кольце, то получаем: Zq _ N+*iH»o-ii)i ^ = («o+«i)-(«o-«i)a Если Матрица-циркулянт фиксирована раз и навсегда, то предвычисления а = ^+g*, /3 = xq~xi дают возможность найти z0 = <*(yo+yi)+/?(y0-yi), zi = a(yo+yi)-/?(yo-yi), что требует два умножения и 4 сложения. Это можно выразить следующей схемой вычислений: si<-yo+yi, s2«-yo-yi, mi «- *Q+Jl * 3i, m2 <- £uy£L *s2, S3 4— mi + 1712, 34 4— mi — 1712, Zq = S3, Z\ = S4 b. Так как элемент 2 обратим, то Т+1 и Г— 1 обязательно взаимно просты, т.е. 1 = |(Г+1) — \{Т— 1). Следовательно, существует изоморфизм Л[Т]/(Т2 - 1) в А[Т\/(Т- 1) х Л[Т]/(Т+ 1), который элементу Р mod (Т2 — 1) ставит в соответствие (Р mod (Т — 1), Р mod (Т + 1)). Это означает, что многочлен Р = ро + р\Т степени ^ 1 однозначно определен по модулю Т2 — 1 своими значениями Р(\) и Р(—1):
684 V Дискретное преобразование Фурье Ро = РЦЦРЫ1$ р1 = р(1)-2Р("1). Вычисляем (х0 + хгТ) * (yi + у0Т) (mod Т2 — 1), находя значения этого произведения в точках 1 и — 1... это объясняет подход, использованный в вопросе а. 23. Умножение двух комплексных чисел Пусть надо вычислить (а + ib)(c + id). Тот факт, что С ~ R[T]/ (Т2 +1), наводит нас на мысль положить mi = ас, тг = 6d, тз = (а + Ь)(с + d). Тогда имеем (а + ib)(c + id) = (mi — тг) + i(rrts — mi — -m2). 24. Дискретное преобразование Фурье на 3 точках Воспользуемся циклической сверткой на двух точках и предвычи- слениями: \Z) = {2)+{72)' \г3) = {Ы* и,){а2)' OJ + U)2 _ LJ—LJ2 где а = —-— и /3 = —-—. Можно сэкономить сложения в общем вычислении, заметив, что вычисление а\ + 02, необходимое для (zi, 22) > можно использовать в вычислении ао = а0 + (ai + CL2) и что можно вычислить а\ и аг с помощью вынесения за скобку общего множителя при сложении. Приведем схему, использующую 6 сложений и 2 умножения (вместо б сложений и 4 умножений в обычном методе): si«—ai+аг, S2+-CL1— fl2, «з«—ao + si, mi f- ш+£ * si, тг f- ш~^ * S2, S4 f- ao + mi, S5 «— S4 + ^2 > «б f- S4 — тг, a0 = s3, di = e5, a2 = s6 25. Тензорный ранг семейства элементарных билинейных форм Ь. Если семейство {ai, аг, аз,..., аг} не является свободной системой образующих, тогда, например, имеем а\ = хъ&ъ + яз^з Н V хгаГ) и можно записать: ai 0 &i + fl2 0 &2 Н h ar 0 6Г = = a2 0 (62 + zibi) + Ь ar <g> (6Г + xrbi),
Решения упражнений 685 что противоречит минимальности г. Аналогичный результат, разумеется, справедлив для семейства {61,62,..., 6Г}. Пусть Нд — векторное пространство, состоящее из линейных форм Ь>()У),у Е F. Равенство Л = а\ <g> 61 + ••• + аг <g> 6Г доказывает, что Нд содержится в пространстве, порожденном линейными формами ai,a2,.. .,аг. Покажем обратное, доказывая, например, что а\ Е Нд. Так как линейные формы 6i, 62,..., 6Г линейно независимы, то найдется у е F, такой, что 6i(y) = 1, 62(у) = 63(у) = ... = 6г(у) = 0, что дает а\ = Л(.,у) Е H& (это соответствует известному факту, что в произвольной матрице число линейно независимых строк равно числу линейно независимых столбцов). Обозначим через /i(z),/2(a:), • • .,/s(z) линейные формы, соответствующие столбцам матрицы Я, тогда получаем: Л(я,у) = f\(x)y\ + /2(2)2/2 + V /ъ{х)у5, и достаточно найти выражение /,- в базисе пространства, порожденного элементами /,•. /10 2 0 1' Классическая техника линейной алгебры 7-гг_[0 1 3 0 2 позволяет найти такую 4 х 4-матрицу L с ~ 10 0 0 1— 2 определителем 1, что матрица LH будет \ 0 0 0 0 0> ступенчатой. К примеру, для матрицы справа можно определить базис {z'i, 2:2,2:3} пространства, порожденного системой {/ь/г, • •., Д}, удовлетворяющий соотношениям: /i(z) = z'i, f2(x) = z'2> fs(x) = 2x[ + 34, U(x) = 4, f5(x) = x[ + 24 - 24. Отсюда выводим следующее выражение для Л ранга 3: Цх,у) = /i(z)(yi + 2у3 + у5) + /2(я)(У2 + Зу3 + 2у5) + /4(*)(у4 - 2уб). c. Запись z0 = xoyo + qxiyi, г\ - (zo + zi)(yo + yi)-a:oyo + (r-l)2:iyi показывает, что тензорный ранг семейства {zo>2i} не превосходит 3. Вместе с тем матрица —Szq + /3z\ обратима, так как ее определитель равен S2q — /3Sr — /32 (напомним: многочлен Т2 — rT — q не имеет корней). Равенство — Szq + /3z\ = (/Зу — aS) a\ ® 6i показывает, что это матрица ранга ^ 1. Получили противоречие. d. Предположим, что многочлен Т2 — rT — q имеет два различных корня t1 и tn в теле. Элементарные вычисления показывают, что две формы zo + ^'zi и zo+t"zi имеют ранг 1 и потому могут быть записаны в виде: zq + t'z\ = а\ ® 61, z0 + t"z\ = a2 ® 62, откуда z0 = (t" a\ <g> 61 - t*CL2®b2)l(tH — t'), z\ = (ai0 6i — 02062)/^' — tH). Это доказывает, что rang0{zo> z\) = 2. Тензорный ранг зависит здесь от основного тела К,
686 V Дискретное преобразование Фурье а именно, от того, имеет или не имеет многочлен Т2 — rT—q свои корни в К. 26. Тензорный ранг произведения двух многочленов Ь. Так как К бесконечно, то К содержит n + m+1 различных точек to,ti,.. Лп+т. Формы t^o, «Л,..., wn+m определены через и>,- = X{U)Y{U), т.е: Щ = {Znt? + •••+ XiU + 2?о) X [Ут*? + • • • + y\U + Уо) являются элементарными билинейными формами, и можно выразить го, z\, ..., zn+m как линейные комбинации этих n + m+1 элементарных билинейных форм. Матрица V, такая, что V(z,-) = (гу,-), есть матрица для вычисления значений вп + m+l точках to,ti,... ,tn+m+i значений произведения многочленов (это матрица Вандермонда порядка (n+m+1)). При п = 2, m = 3, если выбрать {0,1,2,3,4,5} в качестве точек интерполяции, получим: /X(0)Y(0)\ 1 X(1)Y(1) X(2)Y(2) Х(3)У(3) X(4)Y(4) \Х(5)У(5)/ /10 0 0 0 0\ 11111 1 12 4 8 16 32 1 3 9 27 81 243 1 4 16 64 256 1024 \1 5 25 125 625 3125/ (*°\ 21 22 23 z* \zj (12) Тогда можно обратить формулу (26. ), и, таким образом, вычислить билинейные формы z,- с помощью 6 порождающих умножений. /*0\ 21 22 23 24 \z5J = V-l fW°\ W\ W<2 W3 W4 \w5 / 1 " 120 где W\ \1)2 U>3 / \ 120 -274 225 -85 15 -1 0 600 -770 355 -70 5 0 -600 1070 -590 130 -10 0 400 -780 490 -120 10 0 -150 305 -205 55 -5 °\ 24 ' -50 35 -10 . 1/ xoyo (x0 + X\ + X2) (У0 + У1 + У2 + Уз) (x0 + 2xi + 4x2) (yo + 2yi + 4y2 + 8y3) (x0 + 3xi + 9x2) (yo + 3yi + 9y2 + 27y3) (x0 + 4xi + 16x2) (yo + 4yi + 16y2 + 64y3) \ (х0 + 5xi + 25х2) (yo + 5yi + 25у2 + 125у3) / /w0\ М)2 W3 W4 с. Пусть Z(T) = z0 + ziT + z2T2 + z3T3 + z4T4 + z5T5 — произведение многочлена Х(Т) = xq + x\T + x2T2 степени 2 и многочлена
Решения упражнений 687 Y(T) = уо + yiT + у2Т2 + узТ3 степени 3. Выбрав 5 точек 0,±1,±2, запишем: X{T)Y{T) = w0 + wxT+ w2T2 + wsT3 + W4T4 + x2y3T{T2 - 1)(T2 - 4). Можно вычислить билинейные формы Z4, 2з> z2i z\ и zo в зависимости от z5, w4, гу3, w2, t^i и wo: *5 = ^2Уз, г4 = гу4, *з = ^з - 5г5, 2г2 = w2i z\ = wi + 4z5, «о = wo, и выразить гу,- с помощью интерполяции многочлена степени 4 на 5 точках 0,±1,±2: ( X(0)Y(0) \ /1 X(1)Y(1) X{-1)Y(-1) X(2)Y(2) \X(-2)Y(-2)/ \ 0 0 0 0 11111 1-11-1 1 1 2 4 8 16 Vl -2 4 -8 16/ \U)4/ Отсюда получаем ги,- как линейные комбинации 5 элементарных произведений: W\ w2 w3 \W4/ I 24 24 0 0 0 0\ 0 16 -16 -2 2 l -30 16 16 -1 -1 0-4 4 2 2 6-4-4 1 l/ / яоУо (x0 + X1 + X2) (jft) + У1+У2 + Уз) (ГО -Xi+ X2) (yo - У1 + У2 - Уз) (г0 + 2zi + 4г2) (Уо + 2yi + 4у2 + l .) \ (х0 - 2х\ + 4х2) (уо - 2yi + 4у2 - 8у3) / 27. Тензорный ранг циклической свертки порядка 3 Пусть Z{T) = X(T)Y(T) (mod Г3 - 1), где: Х(Т) = х2Т2 + ххТ + хо, У (Г) = у2Г2 + ухТ + уо, Z(T) = z2T2 + z1T+z0. Имеем А[Т\/(Т-1) х А[Т\/(Т2 + Т+ 1) ~ А[Т\/(Т3 - 1). Вычисление X(T)Y(T) mod (T — 1) вводит элементарную билинейную форму mi =
688 V Дискретное преобразование Фурье {х0 + xi + х2){уо + yi + у2). Для вычисления X{T)Y{T) mod (T2 + Т+ 1) с помощью 3 умножений запишем (используя Т2 = — Т — 1): Х(Т) = (zi - z2)T + z0 - z2> У (Г) = (yi - у2)Т + уо - у2. Следующие три произведения: т2 = (хо — я2)(уо — у2), тз = (х\ — хо) (yi — Уо)? етц = {х\ — x2)(yi — у2) позволяют вычислить: ((zi-z2)T+zo-z2)x((yi-y2)T+yo-y2) = т4Т2-|-(т2-|-т4-тз)Т+т2, и поэтому X(T)Y(T) mod (T2 + Т + 1) = (ш2 - тп3)Т + (ш2 - ш4). Осталось использовать китайскую теорему об остатках для построения X{T)Y(T) mod (T3 - 1). Соотношение Безу: | х (Т2 + Т + 1) + ^^(Г-1) = 1; имеем Х(Г)У(Г) mod (Т3 - 1) = Г +5+1Ш! - о Т2 + Т - 2 [(т2 - ш3)Т+ (т2 - т4)], т.е. Х(Г)У (Т) mod (Т3 - 1) = m1-2m2 + m3 + m4;r2 + О mi + ni2 — 2тз + ni4 ^ nil + т2 + упз — 2т4 + 3 + 3 ' 28. Циклическая свертка порядка 3 (продолжение) a. 15 операций, из которых 9 умножений и 6 сложений. b. Указанная реализация записывается так: m = (х0 + хх + х2) (уо + У\ + у2), w2 = {хо - х2) (уо - у2), мз = (*1 - а?о) (У1 - Уо), t"4 = {х\ - х2) (уг - у2), 3-гго = wo + wi + w2 - 2гу3, 3^i = w0 + wi - 2w2 + ^з, 3*з = «to - 2гу1 + ™2 + гу3, и можно проверить, что: W\ U)2 U>3 t£)4 Зг0 3zi Зг2 гоУо 1 1 1 0 3 0 0 xoy\ 1 0 -1 0 0 3 0 Х0У2 1 -1 0 0 0 0 3 хщо 1 0 -1 0 0 3 0 Х\У\ 1 0 1 1 0 0 3 х\Уг 1 0 0 -1 3 0 0 Х2У0 1 -1 0 0 0 0 3 Х2У1 1 0 0 -1 3 0 0 Х2У2 1 1 0 1 0 3 0
Решения упражнений 689 что дает sq = 3zo> $i = 3zi, s2 = Ъг2. с. Пусть h(x, у, z) — 3-линейная форма, ассоциированная с циклической сверткой порядка п: п—1п—1п—1 где Л. Ь{Х, У»^) = $3 5Z 5Z hiJkXiyjZk, i=o у=о /с=о если i + j = к (mod n), в противном случае. .,;.*-10; Тогда имеем следующее соотношение «симметрии», в котором индексы берутся по модулю n: Aij,* = hk,n-j,i- Следовательно, если А, 5, С — реализация Л, то матрицы А1 = С, В' = В (в которой переставляются столбцы j и п — j) и С = А также образуют некоторую реализацию Л. В этом случае получаем: л' = г ( 1 1 1 К-2 1 1 -2 1 1 -2 1 1 В' = ( 1 1 1Х 1 -1 О -1 0 1 V о -1 1/ , с = ( 1 ' 1 , -1 V о 1 0 1 1 !\ -1 ' 0 i -1/ Эта реализация выгодна, когда циклическая свертка порядка 3, z = я *з у, вычисляется для фиксированного х (достаточно предварительно вычислить вектор А'х): Х0 + Xi + Х2, ч Z0 + Z1-2Z2, \ ™>\ = z \Уо + У1 + Уз)) т2 = (уо - yi), 2:0-2x1 + 2:2. ч "13 = ^ (У2 - Уо), -22:0 + 2:1 + 2:2, ч ™4 = ^ (У2 - У!)- Далее нужно оптимизировать использование у,, затем вычислить z,-: Zq = TTli + ^2 — ^3j zl = nil + Я1з + ^4 и z2 = Wll — ^2 — ^4- Это вычисление при фиксированном х требует 15 операций, из которых 4 умножения и 11 сложений, что можно выразить в следующей форме: *1*-У0 + У1, «2<-*1+У2, *3<-У0-У1, «4 <-У2- УО, «5 <-У2~ УЬ - *P+*j+ga * s2, ш2 f71i m3 « «б ь mi + тг, «7 <— sq — шз, se «— mi + тз, 9 ^— s8 + Ш4, Sio f- I7li — "^2, sll ^— s10 — "^4, *0 = «7, Z\ = 89, Z2 = «n
690 V Дискретное преобразование Фурье 29. Her ациклическая свертка порядка 4 Пусть Z(T) = z0 + zxT + z2T2 + z3T3 = X{T)Y(T) mod (T4 + 1), где X(T) = xo + xxT + x2T2 + z3T3, У(Г) = y0 + УхТ + у2Т2 + y3T3. Полагая a = z0 + ziT, b = x2 + x3T, с = yo + yiT, d = y2 -h y3T, имеем по модулю T4 + 1: X(T)Y(T) = ac+ ((a + b)(c + d)-ac- bd)T2 + bdT4 = ac - bd + (a + 6)(c + d)T2 - acT2 - bdT2. Любое произведение двух многочленов степени 1, ас, bd, (a + 6)(c + d), вычисляется с помощью 3 умножений, что и дает обещанные 9 умножений: гп1=х0уо, т2 = (х0 + х\)(уо + yi), ra3 = ziyi, Щ = х2у2, гпъ = (х2 + х3)(у2 + Уз), тб = я3уз, ш7 = (*о + *2)(уо + У2), т8 = (а?о + ^2 + ^1 + яз)(уо + у2 + ух + у3), m9 = (zi + х3)(у\ + уз). Они позволяют вычислить X(T)Y(T) по модулю Т4 + 1: ас = mi + (шг — mi — тз)Т + т3Т2, bd = Ш4 + (ш5 — Ш4 — тпо)Т + я^Т » асТ2 = -ш3 + miT2 + (ш2 - mi - "гз)Т3, 6dT = —те + тп^Т + (ni5 — пц — пгб)Т , (а + 6)(с + d)T2 = -m9 + m7T2 + (m8 - m7 - m9)T3. Найденная таким образом реализация использует 9 умножений, хотя не позволяет реализовать вычисления с 15 сложениями (слишком много элементов вида ±1 в матрице С). /1 0 0 0\ 110 0 0 10 0 0 0 10 А = В= | 0 0 1 1 | , С = 0 0 0 1 10 10 1111 \0 1 0 1/ (° 1 -1 0 1 0 0 V-1 — 1 —1 — 1 0 0 0 -1 0 1 -1 0 -1 1 0 0 !\ — 1 — 1 -1/
Решения упражнений 691 Симметризуем задачу, рассматривая 3-линейную форму Aij,*, ассоциированную с негациклической сверткой порядка 4: Aij,* = 1, если i + j = к, A,-jffc = — 1, если г + j = 4 + fc, в противном случае А,-^* = 0. Отсюда выводится свойство симметрии: Aij,* = €i€kh-kjt-i, где все индексы вычисляются по модулю 4 при во = — 1, е,- = 1, если г = 1, 2,3. Получаем новую реализацию [А1, 5', С"), где 5' = 5, при этом столбцы А' (соответственно, в С") получаются перестановками столбцов из С (соответственно, из А) со знаком минус для первого столбца. А' = /-1 1 ' 0 -] -1 ] 1 ] 0 -] -1 ] 0 -] 1 0 ] V 1 -: L -1 L 0 L 1 L -1 t 0 L -1 L 1 L 0 L 0 -1\ —1 —1 0 0 о) В' = В, С = (-1 -1 0 0 0 0 -1 -1 V о 0 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 °\ 1 1 0 0 0 0 1 1/ Окончательный алгоритм использует 15 сложений и 9 умножений (с предвычислениями для я,-): Ь\ = уо» Ъ2 = уо+У1> Ъ3 = У1> Ьл = У2» Ь5 = у2 + уз» *>б = Уз» h = уо + У2» h = 62 + Ь5, 69 = yi + уз» mi = (х0 - xi +х2 + хз) *bi,m2 = (xi - х3) *Ьг» тп3 = (-хо + *i + *2 - х3) *63, *П4 = (*о + х\ - х2 + *з) * 64, т5 = (-xi - х3) * Ьб» ^16 = (-*о + *i - х2 + *3) * be» 1717 = (з?1 — ^2) * ^7, 1718 = —2?1 * &8» ^-9 = (з?0 ~ ^1) * &9» 2o=l7li+ ™2 + (т7 + »7l8)» ^1 = ™5 + »71б — ("18 — ГПд), 22 = 1714 + Я*5 — ("*7 + тв)» %Ъ = ™3 ~ ™2 ~ (nig ~ ГПд). 30. Произведение двух многочленов степени 3 Пусть Z(T) = X{T)Y{T), где Х(Т) = х0 + *iT + z2T2 + х3Т3 и У (Г) = уо + У\Т + у2Т2 + у3Т3. Полагая а = я0 + ххТ, Ь = х2 + я3Т, с = уо + У\Т, d - у2 + УзТ, имеем: X{T)Y(T) = ас+ ((а + Ь){с + d) - ас - bd)T2 + bdT4 = = ас+(а + Ъ)(с + d)T2 - асТ2 - bdT2 + bdT4. Любое произведение двух многочленов степени 1, ас, bd, (а + 6) (с + d) вычисляется с помощью 3 умножений, откуда получаем 9 умножений: ГО1=£0уо, ™>2 = (so + si)(yo + yi), тз = а?1У1, т4 = я2у2,
692 V Дискретное преобразование Фурье гпъ = (х2 + х3)(у2 + Уз), гп6 = х3уз, гп7 = (х0 + х2)(уо + уг), гп8 = (х0 + х2 + xi + х3)(уо + У2 + У\ + Уз), "19 = (х\ + *з)(У1 + Уз)- 32. Циклическая свертка порядка 6 и DFT7 Ь. Имеем: А[Т]/(Т2п - 1) ~ i4[rj/(Tn -1)0 i4[TJ/(Tn + 1) и А[Т]/(Тп + 1) ~ Л[Г]/((-Т)п + 1) = Л[Т]/(ТП - 1), так как п нечетно. Для вычисления z(T) = x(T)y(T) mod (T2n — 1) достаточно вычислить *+(Т) = х(Т)у{Т) mod (Tn - 1) и г"(Г) = *(Т)уСО mod (Tn + 1). Это делается посредством равенства z~ (—Т) = х(—Т) y(—T)mod(Tn — 1). Тогда z получается по китайской теореме об остатках: z(T) = |(Г* + l)z+(T) + =±(V - l)z-(T). Например, при п = 3, вычисляя по модулю Т3 — 1, имеем: z+ (Т) = ((хо + гз) + (*i + а?4)Г + («2 + *ь)Т2) х х((Уо + Уз) + (У1 + У4)Т+ (у2 + уъ)Т2), z~ (-T) = ({х0- х3) - {хг - х4)Т + (а?2 - z5)T2) х х((уо - Уз) - (У1 - У4)Т+ (у2 - у5)Т2). и вычисление z(T) = ±(Т3 + l)z+(T) + ^(Т3 - 1)*"(Т) дает, с использованием очевидных обозначений, следующие равенства. 2z0 = z£ + Zq, 2zi = zf - *f, 2z2 = z% + Z2 , 2Z3 = Z$ - Zq , 2*4 = *? + *f , 2^5 = *2" - «J . 33. Двойственность конечных абелевых групп a. Конструкция П •-)• ft является контравариантным^функтором, т.е. всякий морфизм f : Q\ -+ Q2 порождает морфизм f : Q2 —t Q\, с функториальными свойствами. Отсюда легко следует канонический изоморфизм Q\ х ^2 на Q\ xQ2. b. Исследуем сначала случай, когда Q — циклическая группа порядка п. Группа Hom(Z/nZ, U) канонически изоморфна подгруппе Щп) в £/, состоящей из элементов х Е £/, таких, что хп = 1. Если U — мультипликативная группа комплексных чисел с единичным модулем, то
Решения упражнений 693 подгруппа С/(п) — циклическая группа порядка п, следовательно, изоморфна Z/nZ. Но это заключение {U(n) ~ Ъ/пЖ) остается также верным, если U — циклическая группа, порядок которой делится на п. Произвольная абелева группа О, записывается в виде произведения циклических групп: Q ~ Zni х ЪП2 х • • • х ЪПк, где щ | п2 | п3 | ... | n*_i \ пк. Чтобы получить изоморфизм между группой Q и ее дуальной в случае, когда U — группа комплексных чисел с единичным модулем, достаточно использовать тот факт, что дуальность совместима с произведением. Это заключение остается верным, если U — циклическая группа порядка, делящегося на пк (и потому на все п,). Целое пк — показатель группы ft, т.е. НОК порядков элементов Q. с. Достаточно проделать это для циклической группы, а затем использовать тот факт, что любая конечная абелева группа является произведением циклических групп. ' 34. Преобразование Фурье на конечной абелевой группе a. DFTft(l) = |ft|<Ji, где <Ji — функция Дирака, т.е. она принимает значение 0 всюду, кроме 1^, где она принимает значения 1,4- Для того, чтобы это обнаружить, достаточно доказать, что ^2ше^х(ш) — О для всякого характера \ ф 1. Сначала исследуем случай, когда О, — циклическая группа порядка п. Если и> — образующий и и = х(ш), то указанная выше сумма 5 = Yl7=o и% и (1 — W)S = 0. Далее показываем, что если результат верен для fii и ^2, то он верен и для П\ х &2- Докажем теперь, что \Q\ обратим. Напомним, что \U\ обратим в А (например, \U\ = Ylueu-{i}(^ ~" и))' Отсюда следует, что показатель П обратим в Л (так как является делителем \U\ по предположению). Значит, порядок Q и показатель Q имеют одни и те же простые делители. b. Вычислим DFTa ° Dft^^o') для о! е A[h]. Если а' = DFT^a'), то нужно вычислить: ш ш \ X* J =1щЕа'(х')Е(хх'-1)и- Но внутренние суммы все равны нулю, кроме случая \' = Х> и потому DFTft о DFT^^a') = а'. Для вычисления Dft^1 о DFTn(a) при
694 V Дискретное преобразование Фурье a G A[Q] можно использовать свойство JT х{и) = О, при и ф 1, являющееся двойственным к свойству ^2Ш х{ш) = О ПРИ X Ф 1- Это свойство может быть доказано, либо используя равенство £^ х(^) — 5^х0*>-1)* и канонический изоморфизм между Q и ее бидуальной группой (см. предыдущее упражнение), либо рассматривая циклическую группу, а затем прямое произведение циклических групп. Сторонники дуальности могут вывести прямо, что Dft^1 о DFTn(a) = а при а Е А[П], ибо, как только П отождествляется со своей бидуальной, так обратное преобразование Фурье Dft^1 есть не что иное, как Dft^ (с точностью до обратимого множителя |^|-1). Конечно, следующее вычисление (где 3 = DFTft(a)) тоже дает результат Dft^ о DFTn(a) = cl- =pE«wi:x(«--1) (внутренняя сумма равна нулю, кроме случая, когда а —и). с. Для а, 6 G A[Q] свойство Dft(o) • Dft(6) = DFT(a*6) легко доказывается. Из него следует DFT_1(a' • 6') = DFT_1(a') • Dft~1(6/) для а', Ь9 G A[Q]. Можно использовать би дуальность, для того чтобы из этого вывести, что DFT(a) • Dft(6) = |fi|DFT(a • 6), что эквивалентно DFT"1(a/) • Dft"1(6/) = |n|DFT"1(a/ • 6'), или еще раз проделать вычисление: используя, разумеется, тот факт, что внутренняя сумма равна нулю, за исключением случая, когда а = /3. 35. Преобразование Фурье на конечной абелевой группе (продолжение) a. Задание элемента порядка п из U определяет канонический изоморфизм из Ъп на Zn. b. Обозначим U(k) — {<* G ?7, ак — 1}. Задать морфизм х на Zp x Ъч со значениями в U все равно, что задать элемент ot\ E Цр), элемент <*2 € U(q) и соответствие в одну сторону: Xai,a3 : ^р х Zg Э (ii,«2) or I1 or 2* eU, ив другую: О ЭХ1—► (Qfi,Qf2) G Цр) x C/(g), где c*i = *(1,0) иа2 = х(0,1).
Решения упражнений 695 Два отображения U(p) x U(q) Э (ai,a2) «->■ Xai,a3 Е ft и П Э х *-* (х(1)0))Х(0) 1)) € Цр) х U(q) являются взаимно обратными изоморфизмами. Дуальная группа из Zp х Zg, следовательно, канонически изоморфна U(p) х C/(g) и преобразование Фурье тогда записывается в следующем виде: АЩ = A[ZP х ZJ Э a к—► а Е А[П] = A[UP x Uq], где ааьаз = ^ ati)i3«,i1«23- o^«i<p Заметим, что U(p) — циклическая группа порядка р, изоморфная Zp, но, не каноническим образом (это зависит от выбора образующего U(p)). Аналогичный результат получаем для U(q). Следовательно, выбор элемента и\ порядка р и элемента и2 порядка q реализует изоморфизм £/(р) х U(q) = П на Zp х Zg. Тогда преобразование Фурье записывается следующим образом: А[ЪР х ZJ Э а I—► a Е A[ZP x ZJ, где ailJa= ^2 aH,i"2wi1Jlw22J2» и эту формулу можно рассматривать как вычисление значения многочлена двух переменных: 2iij3 = ^И1.^3) ПРИ 0 O'i < р, 0 ^ J2 < 9, где Р(Х,У)= 2 a^.-^Y'''. o^«i<p В примере, где р = 4 и (/ = 2, имеем: Q = Ъ± х Z2. Обозначим через г корень 4-й степени из единицы, через —1 — корень квадратный из единицы. Элемент а Е А[%4 х Z2] является двумерной последовательностью: в = (в0,0, «ОД, al,0, 01,1, О2,0, a2,l, в3,0, «3,0, с которой ассоциируется многочлен P(X,Y): Р(Х, Y) = a0to+aitoX+a2toX2+a3toX3+(aoti+aitiX+a2tiX2+a3tiX3) У- Преобразование Фурье для а есть двумерная последовательность а,
696 V Дискретное преобразование Фурье определенная следующим образом: а0|0 = Р(1,1 20д = Р(1,-1 ai.o = P{i, I ам = Р(г,-1 a2|0 = P(-l,l a2|1 = P(-l,-l a3)o = P(-«, 1 a3|i = P(-i,-l = aofo + ei,o + 02,0 + аз,о + вод + ai = ao,o + ai,o + ^2,0 + вз,о — аод — a\ = ao,o + ai,o* — в2,о — a3)oi + ao,i + ai — O0,0 + Al,0* — a2,0 — Я3,0г — A0,1 — Ai = ao,o — ai,o + вг,о — аз)0 + вод — <*i = ao,o — ei,o + аг,о — аз,о — вод + ai = ao,o — ei,o* + аг,о + вз,о* + вод — ai = ao,o — ei,o* + a2,o + вз,о* — вод + ^l 1 + <*2Д +03Д, i — в2д — взд, \i - а2д - азд*\ i*+ вгд + азд*, l + а2д - азд, l - а2д + взд, 1* + А2,1 + А3,1«, ii - a2д - a3дг. 36. Fft на конечной абелевой группе a. Так как Q — группа порядка п, то число умножений равно п2. b. Используя соотношение х{а) — x(ai + аг) = x(ai)x(a2), можно записать сумму а(\) таким образом: 2(*) = £ *(ai)(X! a«i+«3x(a2)). ai€Oi огзб^з ДЛЯ Х2 : ^2 -* # (Л) И ai G ^1 Определим: Ьв1|Ха = Еа3€П3 aai + a2X2(»2), так что: ЧХ) = £ Х(«1)*а1|Ха, (13) ai€Oi где через Х2 обозначаем ограничение \ на £)2. Этих 6аьХз всего pq — n^ каждое вычисление 6аьХз требует g умножений, и потому вычисление всех Ьаьхз требует ng умножений. Наконец, надо вычислить п значений 2(х), нто требует пр умножений: действительно, для вычисления а(х) по формуле (36. ) необходимо р умножений. Всего, таким образом, использовали п(р + q) умножений вместо ожидаемых п2. с. Достаточно рассмотреть подгруппу £)2 = pZn, где Ъп = Z/nZ, имеющую порядок q. 37. Тензорные произведения и устойчивые схемы а. Если записать О О (Г d-c О О е-Ь d-c О, то вычисление в (a?i, я2, яз) первой матрицы (являющейся матрицей циклической свертки на 3 точках) реализуется с помощью 4 умножений
Решения упражнений 697 (см. упражнение 28), а вычисление второй матрицы осуществляется с помощью 3 умножений. В общем случае наивное вычисление А • х требует р2 умножений и р(р — 1) сложений. Пусть Х\, Хъ, ■ ■ ■, Хр — g-векторы. Если положить Y* = BXi, 1^1^р,то {А® В) '*!' J. flnfl а\рВ\ / Х\ apiB где Zj = А \yf) 'Zi Имеются р векторов У и q векторов Z$, которые надо вычислить: У требует Л(В) сложений и М(В) умножений, тогда как Zj требует А(А) сложений и М(А) умножений. Если А и В вычисляются наивным образом, то получаем сложность для А 0 В порядка pq(p + q) (вместо p2q2). с. Если / имеет в качестве матрицы (/tJ) i^n , то расширение / имеет следующий вид: (Xi,x2,...xm) *-> (^/ii^j,2^/2j^j,---,2^/nj^j), Xj e е. Легко показать, что расширение суммы есть сумма расширений и т.д. Можно сказать, что функтор «/ •->• расширение /» является хорошим функтором, который коммутирует с любой разумной операцией: расширение чего-то есть что-то от расширения! Если Е — пространство Kq, то расширение / — не что иное, как / 0 Ыкя. В свою очередь, Ыкя 0 / есть отображение (Km)q Э (-Х^Хг,.. -,Xq) «->■ (/ • Х\, / • Хг, .,/• Xq) G (Kn)q. Действительно, вычисление, ассоциированное с методом Гуда, получается с помощью равенства А 0 В = (A®Idq)o(ldp®B). d. Если Xi,X2, • •., Хр — ^-векторы и У = (ВХ\, ВХ^,.. .,5JP),
698 V Дискретное преобразование Фурье то: {А® В) '*Г J. = (Л®Ид) BX-L ,вхв (ч>1® Id, (Ai (/i ® Id,) • У, ..., Л„(/„ ® Id,) • У)' V fP ® И, (Ах(Л ® Id,) • У, ..., Л„(/„ ® Id,) • У), и теперь важно заметить, что (Д <g> Id,)(B • jfi, В ■ Х2,..., В • Хр) = B(fk ®Id,) X. Следовательно, положив Z* = А*В(Д <8>Id,) X, получим: (А® В) /*i\ /(pi®Id,)(Zi,Zai...,Z„)\ Хг I _ | (v?2®Id,) (Zi,Z2l...,Z„) VxP/ (14) 4(^0 Id,) (ZbZj,...,^)/ Вычисление (Д ®Id,) X требует g х.4(Д) сложений, и, следовательно, вычисление каждого Z* требует д х A(fk) + *4(£) сложений и М{В) умножений. Тогда аддитивная цена вычисления (37. ) будет равна: £ qA(fk) + .4(B) + <МЫ = <М(Л) + fiA(B) = 1$к^ = М(А) х А(В) + dim В хА(А), тогда как мультипликативная цена есть ft х М(В) = Л4(А) х М{В).
Литература [1] АНО А.V., HOPCROFT J.E., ULLMAN J.D. Thedesign and analysis of computer algorithms, Addison-Wesley, 1974. [Русский перевод: АХО А., ХОНКРОФТ Дж, УЛЬМАН Дж. Построение и анализ вычислительных алгоритмов. — М.: Мир, 1979.] [2] AKRITAS A.G. "A simple proof of the validity of the reduced PRS algorithm", Computing, vol. 38, 1987, pp. 369-372. [3] AKRITAS A.G. Elements of computer algebra, John Wiley &: Sons, 1989. [Русский перевод: АКРИТАС А. Основы компьютерной алгебры с приложениями. — М.: Мир, 1994.] [4] AKRITAS A.G. "Exact algorithms for the matrix-triangularization subre- sultant PRS method", Computers and Mathematics, Springer Verlag, 1989. [5] ANDREWS G. Ramanujan Revisited, Academic Press, 1988. [6] ARSAC J. Les bases de la programmation, Dunod, 1983. [7] ARSAC J. "Algorithmes pour verifier la conjecture de Syracuse", RAIRO Informatique Theorique et Applications, vol. 21, n° 1, 1987, pp. 3-9. [8] ATKINSON L.D., LLOYD S. "Bounds on the ranks of some 3-Tensors", Linear Algebra Appl., vol. 31, 1980, pp. 19-31. [9] ATKINSON L.D. STEPHENS N.M. "On the maximal multiplicative complexity of a family of bilinear forms", Linear Algebra Appl., vol. 27, 1979, pp. 1-8. [10] AUSLANDER L., TOLIMIERI R., WlNOGRAD S. "Hecke's Theorem in Quadratic Reciprocity, Finite Nilpotent Groups and the Cooley-Tukey Algorithm", Advances in Math., vol. 43, n° 2, 1982. p. 122. [11] AUSLANDER L., TOLIMIERI R. "Algebraic structures for фп>1 L2(Z„) compatible with the finite Fourier transform", Trans. Amer. Math. Soc, vol. 244, 1978, pp. 263-272. [12] AUSLANDER L., TOLIMIERI R. "Is computing with the finite Fourier transform pure or applied mathematics ?", Bull. Amer. Math. Soc. (New Series), vol. 1, n° 6, 1979, pp. 847-897. [13] BAREISS E.H. "Sylvester's identity and multistep integer-preserving Gaussian elimination", Math. Сотр., vol. 22, 1968, pp. 565-578. [14] BARNES J.P. Programming in Ada, Addison Wesley, 1981. [15] BATUT C. Aspects algorithmiques du systeme de calcul arithmetique en multiprecision PARI, These de 3e-cycle Univ. Bordeaux 1, 1989.
700 Литература [16] BECKENBACH E.F. Applied combinatorial mathematics, John Wiley and Sons, 1964. [Русский перевод: Прикладная комбинаторная математика. Под ред. Э. Беккенбаха. — М.: Мир, 1968.] BELLANGER М. Traitement numerique du signal, Masson, 1981. BERGE C. Graphes et hypergraphes, Dunod, 1970. BERGE C. Principes de combinatoire, Dunod, 1968. BERGLAND G.D. "The Fast Fourier Transform Recursive Equations for Arbitrary Lenght Records", Math. Сотр., vol. 21, n° 198, 1967, pp. 236-238. BERLEKAMP E.R. "Factoring polynomials over finite fields", Bell Syst. Tech. J., vol. 56, 1967, pp. 1853-1859. BERLEKAMP E.R. "Factoring polynomials over large finite fields", Math. Сотр., vol. 24, n° 111, 1970, pp. 713-735. BETH T. Verfahren der schnellen Fourier Transformation, Masson, 1892. BLAIR W.D., LACAMPAGNE C.B., SELFRIDGE J.L. "Factoring large numbers on a pocket calculator", Amer. Math. Monthly, vol. 93, 1986, pp. 802-808. BOEHM C, JACOPINI G. "Flow diagrams, Turing machines, and languages with only two formation rules", Comm. ACM, vol. 9, n° 3, 1966, pp. 366-371. BOOCH G. Ingenierie du logiciel avec Ada, InterEditions, 1988. BOOCH G. Software components with Ada, Benjamin/Cummings, 1987. BOREVITCH Z.I., CHAFAREVITCH I.R. Theorie des nombres, Gauthiers- Villars Paris, 1967. BORODIN A., MUNRO I. The computational complexity of algebraic and numeric problems, Elsevier Publishing Company, 1975. BOUGAUT B. "Anneaux Quasi-Euclidiens", C.R. Acad. Sc, t. 284, p. 17, Janvier 1977. BOUGAUT B. Anneaux quasi-euclidiens, These de 3e-cycle Universite de Poitiers, 1976. BOURBAKI N. Livre XXXI: Algebre commutative ; Chapitre 7: Diviseurs, Hermann, 1965. [Русский перевод: БУРБАКИ Н. Коммутативная алгебра. — М.: Мир, 1971.] BOURBAKI N. Elements d'histoire des mathematiques, Herman, Paris, 1969. [Русский перевод: БУРБАКИ Н. Очерки по истории математики. — М.: Ил, 1963.] BOURBAKI N. Livre II : Algebre ; Chapitre 7 : Modules sur les anneaux principaux, Hermann, 1981. [Русский перевод: БУРБАКИ Н. Алгебра, модули, кольца, формы. — М.: Наука, 1966.] BRADLEY G.H. "Algorithms for Hermite and Smith normal matrices and linear Diophantine equations", Math. Сотр., 1971, vol. 25, n° 116.
Литература 701 [36] BRENT R.P. "Succint proofs of primality for the factors of some Fermat sumbers", Math. Сотр., vol. 38, n° 157, 1982, pp. 253-254. [37] BRENT R.P., POLLARD J.M. "Factorization of the eighth Fermat number", Math. Сотр., vol. 36, n° 154, 1981, pp. 253-254. [38] BRESENHAM J.E. "A linear algorithm for incremental display of circular arcs", Comm. ACM., vol. 20, n° 2, 1977, pp. 100-106. [39] BRIGHAM E.O. The fast Fourier transformation, Prentice Hall, 1974. [40] BROCKET R.W., DOBKIN D. "On the optimal evaluation of a set of bilinear forms", Linear Algebra AppL, vol. 19, 1978, pp. 207-235. [41] BROWN W.S. "On Euclid's algorithm and the computation of polynomial greatest common divisors", J. ACM, vol. 18, n° 4, 1971, pp. 478-504. [42] BROWN W.S., TRAUB J.F. "On Euclid's algorithm and the theory of subresultants", J. ACM, vol. 18, n° 4, 1971, pp. 505-514. [43] CANTOR G.C., ZASSENHAUS H. "A new algorithm for factoring polynomials over finite fields", Math. Сотр., vol. 36, n° 154, 1981, pp. 587-592. [44] CARROLL L. The complete illustrated works, Chancellor Press, 1982. [45] CARTIER P. "Sur une generalisation des symboles de Legendre-Jacobi", L'enseignement Mathematique, t. 16, 1970, pp. 31-48. [46] CHILDS L. A Concrete introduction to higher algebra, 1979. [47] CHOR B.Z. Two issues in public key cryptography : RSA bit security and a new knapsack type system, MIT Press, 1986. [48] CLEYET-MlCHAUD M. Lenombre d'or, PUF, Que sais-je ?, 1973. [49] COHEN H. "Factorisation, primalite et cryptographie : Tutilisation des courbes elliptiques", Journee annuelle de la S.M.F., 1987. [50] COHEN H., LENSTRA H.W. "Primality testing and Jacobi sums", Math. Сотр., vol. 42, n° 165, 1984, pp. 297-330. [Русский перевод: В сб. Кибернетический сборник. Новая серия. Вып. 24, с. 101-146. — М.: Мир, 1987.] [51] COLLINS G.E. "Polynomial remainder sequences and determinants", Amer. Math. Monthly, vol. 73, n° 2, 1966, pp. 708-712. [52] COLLINS G.E. "Subresultants and reduced polynomial remainder sequences", J. ACM, vol. 14, 1967, pp. 128-142. [53] COLQUITT W.N., WELSH JR. "A new Mersenne prime", Math. Сотр., vol. 56, n° 194, 1991, pp. 867-870. [54] COOKE G.E. "A weakening of the euclidean property for integral domains and applications to algebraic number theory. I", Journal fur die reine und angewandte Mathematik, vol. 282, 1976, pp. 133-156. [55] COOLEY J.W., TUCKEY J.W. "An algorithm for the Machine Calculation of Complex Fourier Series", Math. Сотр., vol. 19, 1965, pp. 297-301.
702 Литература [56] CREUTZBURG R., TASCHE M. "Parameter Determination for Complex Number-Theoric Transforms Using Cyclotomic Polynomials", Math. Сотр., vol. 52, n° 185, 1989. [57] CURTIS C.W., REINER I. Representation theory Of finite groups and associative algebras, Interscience Publishers, 1966. [Русский перевод: КЭР- ТИС Ч., РАЙНЕР И. Теория представлений конечных групп и ассоциативных алгебр. — М.: Наука, 1969.] [58] DAHL О.J., DiJKSTRA E.W., HOARE C.A.R. Structured programming, Academic Press, 1972. [Русский перевод: ДАЛ У., ДЕЙКСТРА Э., ХООР К. Структурное программирование. — М.: Мир, 1975.] [59] Davenport J.H., Siret Y., Tournier E. Calcul formel, Systemes et algorithmes de manipulations algebriques, Masson, 1986. [Русский перевод: ДЭВЕНПОРТ ДЖ., СИРЭ И., ТУРНЬЕ Э. Компьютерная алгебра. Системы и алгоритмы алгебраических вычислении. — М.: Мир, 1991.] [60] DELEZOIDE P. "Resultats lies aux invariants algebriques de / £ £(£)", Revue de Mathematiques Speciales, n° 4, 1985. [61] DlCKSON L.E. History of the theory of numbers, Chelsea Publishing Company, New York, 1952. [62] DlEUDONNE J. Abrege d'histoire des mathematiques, 1700-1900, Vol. 1 : Algebre, analyse classique, theorie des nombres, Hermann, 1978. [63] DlEUDONNE J. Panorama des mathematiques pures. Le choix bour- bachique, Gauthiers-Villars, 1977. [64] DiFFIE W., HELLMAN M.E. "New directions in cryptography", IEEE Trans. Inform. Theory, vol. IT-22, 11 1976, pp. 644-654. [65] DiJKSTRA E.W. "Go to statement considered harmful", Comm. ACM, vol. 11, n° 3, 1968. [66] DiJKSTRA E.W. "The humble programmer", Comm. ACM, vol. 15, n° 10, 1972. [67] DlXON J.D. "Factorization and primality tests", Amer. Math. Monthly, vol. 91, 1974, pp. 333-352. [68] Do D. Reference manual for the Ada programming language, Alsys, 1986. [69] DONZELLE L.O., OLIVE V., ROUILLARD J. Ada aveclesourire, Presses Poly techniques Romandes, 1989. [70] DRAKE S. Galilee перевод J.P. ScHNEIDECKER, Actes Sud, 1986. [71] FLOYD J.W. "Assigning meaning to programs", Proc. Symp. in applied Mathematics, Math. Aspects Сотр. Science, Amer. Math. Soc, vol. 19, 1967, pp. 19-32. [72] GANTMACHER F.R. Theory of matrices, Interscience Publishers, 1954. [73] GARDING L., TAMBOUR T. Algebra for computer science, Springer- Verlag, 1988.
Литература 703 GEHANI N. Ada : An Advanced Introduction, Prentice-Hall, 1982. GENTLEMAN W.M. "Optimal multiplication chains for computing a power of a symbolic polynomial", Math. Сотр., vol. 26, n° 120, 1972, pp. 935-939. GODEMENT R. Cours d'algebre, Hermann, 1966. GOOD I.J. "The interaction of algorithm and practical Fourier series", J. Roy. Statis. Soc. Ser., vol. 20, 1958, pp. 361-372. GREGORY R.T. Error-free computation, E. Krieger Publishing Company, 1980. GUNJI H., ARNON D. On polynomial factorization over finite fields, Math. Сотр., vol. 36, n° 153, 1981, pp. 281-287. HARDY G.H., WRIGHT E.M. An mtroduction to the theory of numbers, Clarendon Press-Oxford, 1965. HAREL D. Algorithmics : The spirit of computing, Addison-Wesley, 1988. HARTLEY В., HAWKES Т.О. Rings, modules and linear algebra, Chapman and Hall, 1970. HAVAS G., STERLING L.S. "Integer matrices and abelian groups", Symbolic and Algebraic Computation, L.N.C.S., n° 72, 1979, pp. 431-451. HERSTEIN I.N. Topics in algebra, Xerox College Publishing, 1964. HlBLOT J.J. "Des anneaux euclidiens dont le plus petit algorithme n'est pas a valeurs finies", C.R. Acad. Sc, vol. 281, 1975, pp. 411-414. HOARE C.A.R. "An axiomatic basis of computer programming", Comm. ACM 12, 10, 1969, pp. 576-580, 583. HODGES A. Alan Turing ou Venigme de Vintelligence, Payot, 1988. HOFSTADTER D. Godel, Escher, Bach : les brins d'une guirlande eternelle, InterEditions, 1985. HOWEL T.D. "Global properties of tensor rank", Linear Algebra Appl., vol. 22, 1978, pp. 9-23. HOWELL J.A. "An algorithm for the exact reduction of a matrix to Frobe- nius form using modular arithmetic", Math. Сотр., vol. 27, n° 124, 1973, pp. 887-920. Ichbiah J., Barnes J.G.P., Firth R.J., Woodgee M. Rationale for the design of the Ada programming language, Alsys, 1984. JACOBSON N. Lectures in Abstract Algebra, Vol. Ill— Theory of Fields and Galois Theory, D. Van Nostrand Company, Inc., 1964. JACOBSON N. Basic Algebra I, W.H. Freeman and Company, 1980. JAESCHKE G. "The Carmichael numbers to 1012", Math. Сотр., vol. 55, n° 191, 1990, pp. 383-389. [95] KALTOFEN E., WATT S.M. Computers and Mathematics, Springer- Verlag, 1989.
704 Литература К ANNAN R., ВАСНЕМ A. "Polynomial algorithms for computing the Smith and Hermite normal forms of an integer matrix", Siam J. Comput., vol. 8, n° 4, 1979, pp. 499-507. KNUTH D.E., GRAHAM R., PATASHNIK O. Concrete mathematics, Addison-Wesley, 1988. [Русский перевод: ГРЭХЕМ Р., КНУТ Д., ПАТАШНИК О. Конкретная математика. — М.: Мир, 1998.] KNUTH D.E. "Literate programming", Computer J., vol. 27, n° 2, 1984, pp. 97-111. KNUTH D.E. "Structured programming with goto statements", J. ACM, 1973. KNUTH D.E. The Art Of Computer Programming, Volume 1: Fundamental Algorithms, Addison-Wesley, 1968. [Русский перевод: КНУТ Д. Искусство программирования для ЭВМ, т. 1. — М.: Мир, 1976.] KNUTH D.E. The Art Of Computer Programming, Volume 2: Seminu- merical Algorithms, Addison-Wesley, 1973. [Русский перевод: КНУТ Д. Искусство программирования для ЭВМ, т. 2. — М.: Мир, 1977.] KNUTH D.E. The Art Of Computer Programming, Volume 3: Sorting and Searching, Addison-Wesley, 1973. [Русский перевод: КНУТ Д. Искусство программирования для ЭВМ, т. 3. — М.: Мир, 1978.] KNUTH D.E. The TtfCbook, Addison-Wesley, 1986. [Русский перевод: КНУТ Д. Все про Т^С. — М.: Протвино, 1993.] KOBLITZ N. A course in Number Theory and Cryptography, Springer- Verlag, 1987. KRONSJO L. Algorithms : their complexity and efficiency, John Wiley k. Sons, 1986. KRUSKAL J. "Three-ways arrays : rank and uniqueness of trilinear decompositions, with applications to arithmetic complexity and statictics", Linear Algebra AppL, vol. 18, n° 1, 1977, pp. 95-138. LAFON J.C. "Optimum computation of p bilinear forms", Linear Algebra AppL, vol. 10, 1975, pp. 225-240. LAG ARIAS J.C. "The 3x + 1 problem and its generalizations", Amer. Math. Monthly, 1985, pp. 3-21. LAME G. "Complexite de Palgorithme d'Euclide", C.R. Acad. Sc, 1844. LANG S. Linear algebra, Addison Wesley, 1967. LANG S. Algebra, Addison-Wesley, 1971. [Русский перевод: ЛЕНГ С. Алгебра. — М.: Мир, 1977.] LAZARD D. "Le meilleur algorithme d'Euclide pour K[X] et Z", C.R. Acad. Sc, t. 284, 1977. LE LlONNAIS F. Les nombres remarquables, Masson, 1980. L'ECUYER P. "Efficient and portable combined random number generators", Comm. ACM, vol. 31, n° 6, 1988, pp. 742-774.
Литература 705 [115] LEDGARD H.F. Proverbes de programmation (traduction de J. Arsac), Dunod, 1978. [116] VAN LEEUWEN J., VAN EMDE BOAS P. "Some elementary proofs of lower bounds in complexity theory", Linear Algebra Appl., vol. 19, 1978, pp. 63-80. [117] LENSTRA H.W. "Primality testing algorithms", Seminaire N. Bourbaki, n° 576, 06 1981. [118] LENSTRA H.W. "Factoring integers with elliptic curves", Annals of Math., vol. 126, 1987, pp. 649-673. [119] LEVEQUE W.J. "Topics in number theory", Addison-Wesley, 1955. [120] LlDL R., NlEDERREITER H. Introduction to finite fields and their applications, Cambridge University Press, 1986. [121] LiFFERMANN J. Theorie et applications de la transformation de Fourier rapide, Masson, 1977. [122] VAN LlNT J.H. Introduction to coding theory, Graduate Texts in Mathematics, vol. 86, Springer-Verlag, 1982. [123] LlPSON J.D. Algebra and Algebraic Computing, Benjamin/Cummings Publishing Company, Inc., 1981. [124] MCCARTHY D.P. "The optimal algorithm to evaluate xn using elementary multiplication methods", Math. Сотр., vol. 31, n° 137, 1977, pp. 251-256. [125] MARTZLOFF J.C. Histoire des mathematiques chinoises, Masson, 1988. [126] MENADIER J. Structure des ordinateurs, Larousse, 1975. [127] MERKLE R.C., HELLMAN M.E. "Hiding information and signatures in trap-door knapsacks", IEEE Trans. Inform. Theory, vol. IT-24, 09 1978, pp. 525-530. [128] MlGNOTE M. "How to share a secret", Proc. Worksho, 1982, pp. 371-375. [129] MlGNOTTE M. Mathematiques pour le calcul formel, Puf, 1989. [130] MlNC H. Permanents (Encyclopedia Of Math. And its applications), Addison-Welsey, 1978. [Русский перевод: МИНК X. Перманенты. —М.: Мир, 1982.] [131] MORAIN F., OLIVOS J. "Speeding up the computations on an elliptic curve using addition-subtraction chains", Rairo, Inf. Th. App., vol. 24, n° 6, 1990, pp. 531-544. [132] MULLER J. Arithmetique des ordinateurs, Masson, 1989. [133] MUTAFIAN C. Equations algebriques et theorie de Galois, Vuibert, 1980. [134] MUTAFIAN C. Le Defi Algebrique, Tome 1, Vuibert, 1976. [135] NlEVERGELT J., FARRAR J.C, REINGOLD E.W. Computer approaches to mathematical problems, Prentice-Hall, 1974. [Русский перевод: Ни- ВЕРГЕЛЬТ Ю., ФАРРАР ДЖ., РЕЙНГОЛЬД Э. Машинный подход к решению математических задач. — М.: Мир, 1977.]
706 Литература [136] NOGUES R. Theoreme de Fermafc. Son histoire, Vuibert, Paris, 1932. [137] NUSSBAUMER H.J. Fast Fourier transform and convolution algorithms, Springer-Verlag, 1982. [Русский перевод: НУССБАУМЕР Г. Быстрое преобразование Фурье и алгоритмы вычисления свертки. — М.: Радио и связь, 1985.] [138] OESTERLE J. "Nombres de classes des corps quadratiques imaginaires", Seminaire N. Bourbaki, n° 631, 06 1984. [139] OESTERLE J. "Nouvelles approches du theoreme de Fermat", Seminaire N. Bourbaki, n° 694, 02 1988. [140] OZELLO P. Calcul exact des formes de Jordan et de Frobenius d'une ma- trice, These de 3e-cycle Univ. Grenoble, 1987. [141] PASCAUD J.L. "Calcul des coefficients de Bezout dans l'anneau des entiers de <Q>(VC!9)", Janvier. 1988. [142] PERLIS A.J. "Epigrams on programming", Communication privee, ACM Sigplan Notices, 1975. [143] PERRIN D. "Cours d'algebre", Publications de l'E.N.S. de Jeunes Filles, n° 18, 1982. [144] POHST M. Algorithmic methods in algebra and number theory, Academic Press, 1987. [145] POITOU G. "Solution du probleme du dixieme discriminant (d'apres Stark)", Seminaire N. Bourbaki, n° 335, 11 1967. [146] POLLARD J.M. "The Fast Fourier Transform in a Finite Field", Math. Сотр., vol. 25, n° 114, 1971, pp. 365-374. [Имеется перевод: В кн. МАК- КЛЕЛЛАН ДЖ.Х., РЕЙДЕР Ч.М. Применение теории чисел в цифровой обработке сигналов. — М.: Радио и связь, 1983, с. 147-155.] [147] POLLARD J.M. "Monte Carlo methods for index computation mod p", Math. Сотр., vol. 32, n° 143, 1978, pp. 918-924. [148] POMERANCE C, SELFRIDGE J.L., WAGSTAFF S.S. "The pseudo- primes to 25.109", Math. Сотр., vol. 35, n° 151, 1980, pp. 1003-1026. [149] POPPER K.R. La logique de la decouverte scientifique, traduit par N. Thyssen-Rutten et P. Devaux, Payot. [150] RABIN M.O. "Probalistic algorithm for testing primality", Journal of Number Theory, vol. 12, 1980, pp. 128-138. [151] RABIN M.O. "Digitalized signatures and public-key functions as intractable as factorization", Cambridge, MA, 1979. [152] RADER CM. "Discrete Fourier transform when the number of data samples is prime", Proc. IEEE, Mass. Inst, of Tech., vol. 5, n° 6, 1968, pp. 1107-1108. [Имеется перевод: в сб. [146].] [153] RlBENBOIM P. 13 Lectures on Fermat's last theorem, Springer-Verlag, 1979.
Литература 707 154] RlBENBOIM P. The Book of Prime Number Records, Springer-Verlag, 1980. 155] RlESEL H. Prime Numbers and Computers Methods for Factorization, Birkauser Boston, Inc., 1985. 156] RlVEST R.L., SHAMIR A., ADLEMAN L. "A method for obtaining digital signatures and public-key cryptosystems", Comm. ACM, vol. 21, n° 2, 1978, pp. 120-126. 157] ROSE D.J. "Matrix Identities of the Fast Fourier Transform", Linear Algebra and AppL, vol. 29, 1980, pp. 423-443. 158] ROUSSEAU G. "Exterior algebras and the quadratic reciprocity law", Uenseignement Mathematique, vol. 36, 1990, pp. 303-308. 159] SAMUEL P. "About Euclidean Rings", J. Algebra, vol. 19, 1971. 160] SAMUEL P. Theorie algebrique des nombres, Hermann, 1967. 161] SCHMID A.F. Une philosophic de savant, Henri Poincare et la logique mathematique, Frangois Maspero, 1978. 162] SCHONHAGE A., STRASSEN V. "Schnelle Multiplikation Grossen Zahlen", Computing, vol. 7, 1971, pp. 281-292. [Русский перевод: В сб. Кибернетический сборник. Новая серия. Вып. 10. — М.: Мир, 1973.] 163] SHAMIR A. "A polynomial time algorithm for breaking the basic Merkle- Hellman cryptosystem", Proc. 23rd Annual Symp. Found. Comput. Sci., 1982, pp. 145-152. 164] SHAMIR A. "How to share a secret", Comm. ACM, vol. 22, n° 11, 1979. 165] SlMS C.G. Algebra, A Comput. Approach, John Wiley & Sons, 1984. [166] STARK H.M. "A complete determination of the complex quadratic fields of class-number one", Michigan Math. J., vol. 14, 1967, pp. 1-27. [167] STEILD G., TASCHE M. "Index Transforms for Multidimensional DFT's and Con", vol. 56, 1989, pp. 513-528. [168] TaNENBAUM A. Architecture des ordinateurs, Intereditions, 1986. [169] TERRAS R. "A stopping time problem on the positive integers", Acta arithmetica, vol. 30, 1987, pp. 241-252. [170] THOMSON K. "Reflections on trusting trust", Comm. ACM., vol. 27, n° 8, 1984, pp. 761-763. [171] VASERSTEIN L.N. "On the group SL2 over Dedekind ring of arithmetic type", Math. USSR. Sbornick, vol. 18, n° 2, 1972, pp. 321-332. [172] WAGON S. "Editor's Corner : The Euclidean Algorithm Strikes Again", Amer. Math. Monthly, vol. 97, n° 2, 1980, pp. 125-129. [173] WAGSTAFF S.S. Divisors of Mersenne numbers, 1983. [174] WASHINGTON C.L. Introd. to Cyclotomic Fields, Springer-Verlag, 1980. [175] WEINBERGER P.J. "On euclidean rings of algebraic integers", Proc. Amer. Math. Soc. Symp. Pure Mathematics, Math. Сотр., vol. 40, n° 24. 1973, pp. 321-332. 45*
708 Литература [176] WiNOGRAD S. "On the number of multiplications necessary to compute certain functions", Comm. Pure Appl. Math., vol. 23, 1970, pp. 165-179. [177] WiNOGRAD S. "On Multiplication of Polynomials Modulo a Polynomial", R.C. 6791, IBM Research, 1977. [178] WiNOGRAD S. "On Computing the Discrete Fourier Transform", Math. Сотр., vol. 32, n° 141, 1978, pp. 175-199. [Имеется перевод: в сб. [146].] [179] WiNOGRAD S. "Some bilinear forms whose multiplicative complexity depends on the field of constants", Math. Syst. Theory, vol. 10, 1977, pp. 169-180. [180] WiNOGRAD S. "On the Multiplicative Complexity of the Discrete Fourier Transform", Advances in Mathematics, vol. 32, 1979, pp. 83-117. [181] WlRTH N. Algorithms -f Data Struct ures = Programs, Prentice Hall, 1976. [Русский перевод: ВИРТ Н. Алгоритмы -f структуры данных = программы. — М.: Мир, 1985.] [182] WlRTH N. Introduction a la programmation systematique, Masson, 1977. [183] YATES F. "The Design and Analysis of Factorial Experiments", Imperial Bureau of Soil Sciences, 1937. [184] YOUNG J., BUELL D. "The twentieth fermat number is composite", Math. Сотр., vol. 50, n° 181, 1988, pp. 261-263. Литература, добавленная к русскому изданию [185] БИРКГОФ Г., БАРТИ Т. Современная прикладная алгебра. — М.: Мир, 1976. [186] ДЖЕХАНИ Н. Язык Ада. — М.: Мир, 1988. [187] КАЛУЖНИН Л.А. Введение в общую алгебру. — М.: Наука, 1973. [188] КОСТРИКИН А.И. Введение в алгебру. — М.: Наука, 1977. [189] ЛиДЛ Р., ПИЛЫД Г. Прикладная абстрактная алгебра. Учебн. пособие, Екатеринбург: Изд-во Урал, ун-та, 1996. [190] ПЕРМИНОВ О.Н. Введение в язык программирования Ада. — М.: Радио и связь, 1991. [191] ПРАСОЛОВ В.В., СОЛОВЬЕВ Ю.П. Эллиптические функции и алгебраические уравнения. — М.: Факториал, 1997, 288 с. [192] GlLL A. Applied Algebra for the Computer Science, Prentice-Hall, Engle- wood Cliffs, N.F., 1976. [193] RlBENBOIM P. Fermat's Last Theorem. For Amateurs, Springer-Verlag, 1999, 407 p. [194] SINGH S. Fermat's Enigma: The Epic Quest to Solve the World's Greatest Mathematical Problem, Walker and Company, N.Y., 1997, 288 p. [195] WlLES A. Modular elliptic curves and Fermatfs Last Theorem, Ann. Math. 141, 1995, с 443-551.
Алфавитный указатель Номера страниц, относящиеся к SL2(Z), 373 Щ^/^Щ, 268 п\, 64, 247 2-группа, 493, 497 mod (оператор), 194, 197 rem (оператор), 197 Алгебра Берлекэмпа, 541 - тензорное произведение, 656 - тензорный ранг, 639, 640 - циклической свертки, 593 Аннулятор - абелевой группы, 451 - модуля, 325, 366 Аппроксимация, 245 Арифметика - модулярная, 420, 425, 428 - основная теорема, 179 - повышеной точности, 115, 116, 434 Безу коэффициенты, 229, 230, 257, 259, 269, 389, 413 - соотношение, 179, 191, 212 Берлекэмпа метод, 492, 541 Бертрана постулат, 99, 261 Брента метод, 473, 516 Вандермонда матрица, 586, 660 Взаимность квадратичная, 479, 482, 484, 503, 528-530 Вильсона теорема, 184, 247 Виноград, 640, 650, 654, 655, 671 Включения-исключения принцип, НО упражнениям, выделены курсивом. Возведение в степень, 136 - дихотомическое, 32, 33, 37, 111 - сложность, 102 Вычет квадратичный, 185, 249, 299, 479, 485, 526, 527, 555 Гаусс, 57, 233 - лемма, 232 - свойство, 188, 191 - сумма, 483 - теорема, 233 - целые числа, 182, 195, 248 Горнера метод, 136, 659 Грея код, 106, 108 Группа абелева - р-примарная, 452 - конечная, 376, 380, 385, 386, 451, 454, 526 - конечная двойственная, 668-670 - конечного типа (структурная теорема), 367 Группа обратимых элементов, 424, 438, 463 - по модулю 2Г, 419, 460 - по модулю Зг, 459 - по модулю п, 442 - по модулю р, 448 - по модулю 125, 463 Группа характеров, 668-670 Гуда метод, 628, 629, 650, 664 - синтез, 632 Дедекинда кольцо, 180 Деление - евклидово, 193, 194 - Лазара, 220
710 Алфавитный указатель - повышеной точности, 116 - центрированное, 195, 260 Дерекурсивизация, 598 Диофантово уравнение, 248 Дирихле теорема 6/тг2, 221 - теорема о прогрессиях, 242, 526, 554, 662 Дробь непрерывная, 242-245, 466 Евклид, 177 - алгоритм, 177, 193, 194, 196, 200, 205, 242, 255, 256, 260, 313, 313 - - расширенный, 229 - квазиалгоритм, 218 - - минимальный, 219 Единица кольца, 180 Золотое сечение, 99, 102, 105 Идеал главный, 186, 191 - конечного типа, 189 - максимальный, 192, 193 - простой, 192, 193 Инвариант подобия, 371 - цикла, 30 Инвариантные множители, 362, 365 Инволюция бинарная, 601 - смешанной системы счисления, 626 Исключение, 313 Иейтса сумма, 600 Карацуба, 633 - метод, 155 Кармайкла - индикатор, 440, 453, 455, 506 - число, 440, 455, 505, 536 Китайская теорема об остатках, 307, 420, 424, 447, 471, 523, 627, 630, 640 Кольцо без делителей нуля (целостное), 180, 189, 192 - Кольцо главных идеалов, 210, 211, 265, 268 целых квадратичных чисел, 252 - евклидово, 194, 196, 200, 201, 211, 268 - квазиевклидово, 218 - локальное, 268 - нётерово, 189, 201, 231 - с делителями нуля, 490 - факториальное, 181, 187, 201, 211, 233, 250, 265 - характеристика, 266 - целозамкнутое, 250 - целых квадратичных чисел, 250 евклидово, 253, 254 Континуанта, 243 Корень из единицы, 584 - квадратный модулярный, 185, 249, 480, 485, 521 - примитивный, 432, 449, 464, 525, 531, 587, 660-662 степени 2к, 603 Коши, 101 Криптография с открытым ключом, 440 - аутентификация, 441 - метод RSA, 442 - проблема рюкзака, 444 Кули — Тьюки метод, 595, 596 - формулы, 623 Куммер, 317 Лагранжа интерполяция, 448, 583 - символ, 530 - теорема, 439, 526 Лазара теорема, 219, 261, 262 Ламе теорема, 215 Лежандра разложение п!, 241 - символ, 481, 528, 529 Лукас, 255, 498 Лукаса — Лемера тест, 239, 500, 504, 581
Алфавитный указатель 711 Мёбиуса формула обращения, 226 - функция, 208, 222, 541, 661, 662 Майе определитель, 83, 317 Массив перестановок, Ц8 Матрица, вычисление образа, 331 - вычисление ядра, 340 - нормализованная форма, 348 - обратная, 380 - приведение, 349 - циркулянт, 593 - эквивалентность, 329, 347 Мерсенна число, 239, 498, 504, 662 Многоугольник, 383 - правильный, 57, 99 Многочлен, возведение в степень, 111 - высота, 112 - деление, 195, 203, 261 - индексирование, 111 - интерполяция, 583, 590, 659 - квазиалгоритм, 261 - кодирование, 112 - континуанта, 243, 245 - корни по модулю р, 114 - коэффициентов Безу, 257, 261 - минимальный, 370, 454 - над конечным полем, 205 - неприводимый, 234, 469 по модулю р, 205, 209, 262, 533 число, 208 - НОД, 237, 262 сложность, 220, 261 - подъем корней, 114 - примитивный, 233 - - над конечным полем, 535 - псев до деление, 237 - разряженный, 112, 113 - сложение, 113 - тензорный ранг произведения, 637, 640, 666 - умножение, 111-113, 584, 594, 606, 633, 661 - - по FFT, 604, 608 - факторизация над ¥q, 541 - характеристический, 370, 454 - циклотомический, 235, 264, 588, 591, 640 Многочлен Хп - 1, 262, 264 - разложение над ¥q, 542 - НОД, 262 Множество упорядоченное, 105 Множители ивариантные, 385, 386 Модуль, базис, 343 - без кручения, 357, 358 - единственность нормализованной формы, 326 - конечного типа, 317, 331, 343, 347, 358 - кручения (периодический), 365, 384 - нётеров, 190, 191 - нормализованная форма, 309, 32J, 319 - примарное разложение, 384 - простой, 384 - ранг, 343, 382 - свободный, 317, 331, 343, 358, 318 - структурная теорема, 366 Невычет квадратичный, 497 Неприводимости (критерий), 209, 235 НОД, 187, 188, 196, 254, ^55 - сложность, 215, 219 НОК, 523 Норма алгебраическая, 182, 188, 249, 252, 316, 500 Нумерация обратная, 427 Определитель, 63, 80, 83, 101, 315, 344, 390, 391 Освобождение от рекурсивности, 143 Пепина критерий, 57, 521 Перестановка, 79, 85, 109, Ц8 - без фиксированных точек, 110 - транспозицией, 109 Период (определения), 533
712 Алфавитный указатель Перманент матрицы, 107, 108 Пика формула, 383 Подмодуль, базис адаптированный, 360 - дополнительный, 340, 356 - кручения (периодический), 357 - максимального ранга, 381 - множитель прямой, 365 - нормализованная форма, 319, 322, 359 - прямое слагаемое, 340, 356, 358, 382, 389 - эквивалентность, 359, 379 Подходящая дробь (непрерывной дроби), 244, %4$ Поле конечное, 533 Полл ар д, 516 - умножение, 430 Порядок группы, 454 - лексикографический, 85 - - чередующийся, 105, 106, 109 - элемента, 448, 449 Последовательность линейных сравнений, 457, 466, 470, 472 - максимального периода, 472, 480 - почти периодическая, 466, 516, 534 - псевдослучайная, 457, 465 - рекуррентная, 103, 466, 470, 533 Приведение эндоморфизма, 368 Проектор, 355, 378 Произведение арифметическое, 226 - тензорное, 629, 634, 671 Простота, 202 Рабина — Миллера тест, 507, 537 Разделение структур, 157 Райзера формула, 107, 111 Рамануджан, 239 Рейдера метод, 649 Решетки формула, 110 Рюкзака алгоритм, 444 Ряд порождающий, 103 - формальный, 103, 264 возведение в степень, 113 вычисление квадрата, 113 Самовоспроизводящаяся программа, 118 Свертка циклическая, 593, 594, 647, 660 на 2п точках, 668 на 2 точках, 664 на 3 точках, 667 на 4 точках, 667 на 5 точках, 668 на 6 точках, 668 порядка 4, 641, 645 Сечение, 356 Семейство - образующих, 377 наименьшее число, 318, 326 - свободное, 344 Сильвестра формула, 110 Сиракуз гипотеза, 31 Система - линейно независимая, 377 - линейных уравнений, 336, 341 - образующих, 344 - сравнений, 381, 424, 532, 533 - счисления позиционная, 426, 429 смешанная, 426, 428, 523 Сложность, 37, 40, 63, 84, 102 Смита матрица, 541 Соловея — Штрассена тест, 539, 540 Стирлинга формула, 64 Сумма двух квадратов, 183, 492 Сходимость непрерывной дроби, 244 Таблица простых чисел, 433, 436-437, 499 Тело (поле), 192 - алгебраически замкнутое, 267 - конечное, 205, 256, 257, 266
Алфавитный указатель 713 - конструирование, 205, 212 - мультипликативная подгруппа, 450 Умножение египетское, 60 Упорядоченное множество, 85 Факторизация, 98, 123, 490, 516 - метод Ферма, 540 Ферма, 57 - большая теорема, 83 - малая теорема, 439, 505 - метод бесконечного спуска, 277 - последняя теорема, 241, 317 - уравнение, 248 - число, 56, 57, 61, 526, 527, 582 Фибоначчи, 214 - последовательность, 102-104, 112, 214, 243, 255 - система счисления, 521 Флой да доказательство, 23 - метод периода, 531 Форма q-линейная знакопеременная, 363 - билинейная, 633, 634 - - семейство, 643 - - тензорный ранг, 635, 643, 665 - - элементарная, 635 - линейная, 634 Фробениуса автоморфизм, 267, 541 - матрица, 103, 369, 534 - нормальная форма, 371 Функция односторонняя, 440-444 Фурье, DFT, 647 на 15 точках, 664 - - на 3 точках, 650, 665 на 5 точках, 652 - FFT, 431, 591, 596, 663 алгоритм, 603 на 2* точках, 596, 603 - - на 12 точках, 664 - - на 6 точках, 660 - - реализация, 603, 610 - преобразование, 592, 594 Характеристика кольца, 266 Хоара аксиоматика, 22 Цассенхауза — Кантора метод, 486 Целое р-адическое, 523, 524 - алгебраическое, 251, 252, 283, 284 - квадратичное, 248, 251, 376, 382 Цепочка сложений, 38, 133 Чезаро инверсия, 541 Число для RSA, 443 - простое, 521 порождение, 98 - псевдопростое, 505, 535, 538 - сильно псевдопростое, 506, 508, 537 таблица, 509 - эйлерово псевдопростое, 539, 540 Шенкса (метод), 496 Штерна — Броко дерево, 258 Эйзенштейна критерий, 235, 263, 264 Эйлер, 57, 498, 581 - индикатор, 111 - критерий, 479, 481 - псевдопростое число, 539 - функция, 438, 442, 455, 523, 541 - число, 294 Экспонента группы, 453, 454 Элемент ассоциированный, 180 - взаимно простой, 187 - максимальный, 189 - неприводимый, 181, 187-189, 191-193 - образующий, 453, 525 - обратимый, 212 - простой, 187-189, 191, 193 Эратосфена решето, 262 Ядро (теорема о), 383 Якоби символ, 529, 530, 539
Обозначения '..■■■: используется для выделения утверждений 8ij : символ Кронекера, равный 1 при t = j и 0 в противном случае Zn, Z/nZ: кольцо вычетов целых чисел по модулю п Fg : конечное поле из q элементов, равное Zg, если q простое V?: функция Эйлера, <р(п) — количество целых чисел из интервала [1,п], взаимно простых с п ц : функция Мёбиуса, ]Td|n ^(d) = 8in ( | J : символ Лежандра, равный 1 тогда и только тогда, когда х является квадратом по модулю простого числа р а Л 6, а V 6: НОД, НОК чисел а и 6 vp(a): показатель высшей степени числа р, делящий число а, а = ПРР U(A): группа обратимых элементов кольца А (а): идеал, порожденный элементом а А/а: кольцо вычетов по модулю а, обозначение, используемое вместо А/(а) Фп(Х): п-ый циклотомический многочлен Sq(X): многочлен (Xя - 1)1 (X -1) = 1 + Х + --- + Хч~х #Р: величина многочлена, число ненулевых коэффициентов #F, \F\: мощность конечного множества F МП)т(А), Мп(А): пространство матриц размера п х m с коэффициентами из А GLn(A): группа обратимых матриц с коэффициентами в А SLn(A): подгруппа группы GLn(A), состоящая из матриц с определителем, равным 1 АП[Х]: множество многочленов одной переменной с коэффициентами из А, имеющих степень, меньшую п z = х *п у: обозначение циклической свертки порядка п последовательностей х и у Ссп : циклическая свертка на п точках DFT, DFTn, DFTn,w : дискретное преобразование Фурье на п точках, использующее корень о> п-ой степени из единицы FFT, FFTn : быстрое преобразование Фурье на п точках Т\ Тш: преобразование Фурье, дискретное преобразование Фурье, использующее о>, корень из единицы 7г', 7Г»: для п = поП1 ... Пк 7Г* обозначает произведение первых t сомножителей п, а 7Г» — произведение последних t
Оглавление Предисловие переводчика и редактора перевода 5 Предисловие к русскому изданию 8 Предисловие 11 От авторов 16 Глава I. Алгоритмика и программирование на языке Ада ... 21 1 Введение в алгоритмику 22 1.1 Терминология и обозначения 22 1.2 Присваивание 23 1.3 Последовательность 24 1.4 Альтернатива 25 1.5 Итерация 28 1.6 Итерация со счетчиком или цикл «для» 28 1.7 Цикл «пока» 30 1.8 Итерация (продолжение и окончание) 31 2 Дихотомический алгоритм возведения в степень 32 2.1 Математический (или рекуррентный) подход 33 2.2 Алгоритмический подход 34 2.3 Изучение сложности алгоритма 37 3 Введение в программирование на языке Ада 39 3.1 Программа сравнения двух методов возведения в степень .... 39 3.2 Об использовании типов 47 3.3 Итерация в моноиде — Настраиваемые функции 51 3.3.1 Настраиваемая функция дихотомического алгоритма возведения в степень 53 3.3.2 Использование настраиваемой функции 56 3.4 Необычное использование компилятора языка Ада 61 4 Хорошее приближение к бесконечности! 63 4.1 Элементы обработки массивов в языке Ада 64 4.2 Работа с матрицами 69 4.3 Ввод-вывод матриц 76 4.4 Описание генератора биекций 78 4.5 Вычисление определителя 80 4.6 Вычисление определителя: несколько цифр 83 4.7 Перестановки конечного множества 85 4.8 Настраиваемый модуль генератора биекций 90 5 Заключение 93
716 Оглавление Упражнения 96 Решения упражнении 119 Глава II. Евклид и основная теорема арифметики 177 1 Обобщение арифметики целых чисел 179 1.1 Делимость и неприводимые элементы 180 1.2 Что такое факториальное кольцо? 181 1.3 Обобщать арифметику целых чисел: зачем? 182 2 Элементарные свойства теории делимости 186 2.1 Существование и единственность разложения на простые множители 186 2.2 НОД и взаимно простые элементы 187 2.3 Выделяемые понятия 188 2.4 Соотношение Безу 191 3 Евклидовы кольца с точки зрения эффективности 193 3.1 Что такое евклидово кольцо? 193 3.2 Алгоритм Евклида нахождения НОД 196 3.3 Реализация в языке Ада вычисления НОД 197 3.4 Сравнение эффективности различных делений 199 3.5 Факториальность евклидовых колец без делителей нуля 200 4 Многочлены с коэффициентами из поля 202 4.1 Евклидово деление в К[Х] (К — поле) 203 4.2 Неприводимые многочлены с коэффициентами из Z/pZ 205 4.3 Простой критерий неприводимости по модулю р . 209 5 Кольца главных идеалов или идеалистическая точка зрения 210 5.1 Идеализация 210 5.2 Частные кольца главных идеалов 212 6 Об оптимальных алгоритмах вычисления НОД 213 6.1 Вычисление НОД двух целых чисел: теорема Ламе 213 6.2 Квазиевклидовы кольца 217 6.3 Вычисление НОД нескольких целых чисел: теорема Дирихле . . . 220 7 Расширенный алгоритм Евклида 227 7.1 Вычисление коэффициентов Безу в квазиевклидовом кольце . . . 227 7.2 Мажорирование коэффициентов Безу в Z 230 8 Факториальность кольца многочленов 231 9 Вместо заключения 238 Упражнения 242 Решения упражнений 270 Глава III. Модули над кольцами главных идеалов 307 1 Исключение и несколько следствий 311 1.1 Операции над строками и столбцами матрицы 311 1.2 Лемма исключения 312
Оглавление 717 1.3 Вычисление определителей 315 1.4 Модули без кручения конечного типа 317 2 Нормальная форма подгруппы группы Zn 319 2.1 Исследование подгруппы пЪ x mZ группы Z2 319 2.2 Изучение подгруппы а\Ъ х ... х апЪ группы Zn 321 2.3 Единственность нормального разложения 325 3 Вычисление образа и ядра матрицы 329 3.1 Ступенчатые матрицы 329 3.2 Вычисление образа матрицы 330 3.3 Существование решения системы линейных уравнений 336 3.4 Вычисление ядра матрицы 340 3.5 Общее решение системы линейных уравнений 341 3.6 Ранг модулей 343 4 Приведение матрицы 347 5 Модули конечного типа над кольцом главных идеалов 355 5.1 Дополнение, свобода и кручение 355 5.2 Инвариантные множители подмодуля свободного модуля 359 5.3 Инвариантные множители модуля конечного типа 366 6 Беглый обзор 368 Упражнения 373 Решения упражнений 388 Глава IV. Некоторые методы алгебраической алгоритмики . . 411 1 Кольцо Z/nZ 413 2 Китайская теорема об остатках 420 2.1 Различные формы китайской теоремы об остатках 420 2.2 Модулярная арифметика и смешанная система счисления 425 2.3 Умножение целых чисел методом Полларда 430 3 Группа обратимых элементов в Z/nZ 438 3.1 Порождающие Z/nZn функция Эйлера 438 3.2 Системы криптографии с открытым ключом 440 3.2.1 Система RSA 442 3.2.2 Алгоритм рюкзака 444 3.2.3 Как разделить секрет? 447 3.3 Мультипликативные группы конечных полей 448 3.3.1 Аннулятор конечной абелевой группы 451 3.3.2 Индикатор Кармайкла 453 3.4 Группа обратимых элементов Z/prZ 456 3.4.1 Несколько полезных сравнений 456 3.4.2 Группа обратимых элементов Z/2rZ 460 3.4.3 Группа обратимых элементов Z/prZ при нечетном р .... 461 4 Почти периодические последовательности 465 4.1 Одношаговый генератор 466
718 Оглавление 4.2 Генерирование при помощи линейных сравнений 470 4.3 Нахождение периода методом Брента 473 5 Квадратичные вычеты 479 5.1 Общие свойства 480 5.2 Квадратные корни: метод Цассенхауза — Кантора 485 5.3 Квадратные корни: метод Шенкса 493 6 Факторизация и простота 497 6.1 Числа Мерсенна 497 6.2 Тест на простоту Рабина — Миллера 504 6.2.1 Вероятностный алгоритм Рабина 508 6.2.2 Доказательство теоремы Рабина 510 6.3 Ро-метод Полларда факторизации чисел 516 7 Это только начало 519 Упражнения 521 Решения упражнений 543 Глава V. Дискретное преобразование Фурье 581 1 Сложность умножения двух многочленов 582 1.1 Интерполяция многочленов над полем и над кольцом 582 1.2 Вычисление значений многочленов в корнях из единицы 584 1.3 Примитивные корни из единицы 587 1.4 Дискретное преобразование Фурье и циклическая свертка .... 590 1.5 Обзор различных понятий 594 2 Быстрое преобразование Фурье 594 2.1 Случай, когда порядок есть степень двойки 595 2.2 Случай, когда порядок — произвольная степень 597 2.3 Пример итеративного алгоритма 597 2.3.1 От рекурсии к итерации 598 2.3.2 Суммы Йейтса 600 3 Точное вычисление FFT: произведение многочленов 601 3.1 Реализация FFT, когда число точек есть степень 2 601 3.2 Как реализовать FFT? 603 3.3 Умножение многочленов 606 3.4 Реализация произведения многочленов 608 3.5 Вычисление преобразования Фурье 610 4 Подробное рассмотрение метода Кули и Тьюки 615 4.1 Метод Кули — ТЪюки для произведения двух множителей .... 616 4.2 Итерация метода Кули — ТЪюки 621 4.2.1 Сложность итерационного метода Кули — Ъ>юки 622 4.2.2 Формулы для итераций по методу Кули — ТЪюки 623 5 Метод Гуда 627 5.1 Исследование примера 15 = 3 X 5 627 5.2 Теорема Гуда 629 6 Вычисление семейства билинейных форм 633
Оглавление 719 6.1 Некоторые напоминания, определения и основные свойства .... 634 6.2 Тензорный ранг произведения двух многочленов 637 6.3 Пример: циклическая свертка порядка 4 641 6.4 Семейство билинейных форм и трилинейные формы 642 6.5 Пример: циклическая свертка порядка 4 (продолжение) 644 7 Малые схемы для дискретного преобразования Фурье 647 7.1 DFT порядка р и СС порядка р — 1 (метод Рейдера) 647 7.2 Комбинация схем Рейдера и Гуда 650 7.2.1 Подробное изучение DfT3 650 7.2.2 Снова DfT5 652 8 От FFT к тензорному произведению 655 Упражнения 659 Решения упражнений 673 Литература 699 Литература, добавленная к русскому изданию 708 Алфавитный указатель 709 Обозначения 714
Учебное издание Патрик Ноден, Клод Китте Алгебраическая алгоритмика С упражнениями и решениями Заведующий редакцией академик В. И. Арнольд Зам. зав. редакцией А. С. Попов Ведущий редактор Г. П. Гаврилов Художественный редактор Н. В. Зотова Технический редактор Е. В.Денюкова Оригинал-макет подготовлен в пакете М^Х 2е СВ. Монаховым (Лаборатория теоретико-групповых методов ЯрГУ). Лицензия Л Р №010174 от 20.05.97 г. Подписано к печати 15.06.99. Формат 60 х 90/16. Гарнитура Computer Modern. Бумага писчая. Печать офсетная. Объем 22,5 бум.л. Усл.печ.л. 45,0. Уч.-изд.л. 48,01. Изд № 1/9654. Тираж 5000 экз. Заказ 1017. Издательство «Мир» Государственного комитета Российской Федерации по печати. 129820, Москва, 1-й Рижский пер., 2. Отпечатано с оригинал-макета в ОАО «Можайский полиграфический комбинат». 143200, г. Можайск, ул. Мира, 93.
Простые числа, не превосходящие 1200 2 47 109 191 269 353 439 523 617 709 811 907 1009 1093 3 53 ИЗ 193 271 359 443 541 619 719 821 911 1013 1097 5 59 127 197 277 367 449 547 631 727 823 919 1019 1103 7 61 131 199 281 373 457 557 641 733 827 929 1021 1109 И 67 137 211 283 379 461 563 643 739 829 937 1031 1117 13 71 139 223 293 383 463 569 647 743 839 941 1033 1123 17 73 149 227 307 389 467 571 653 751 853 947 1039 1129 19 79 151 229 311 397 479 577 659 757 857 953 1049 1151 23 83 157 233 313 401 487 587 661 761 859 967 1051 1153 29 89 163 239 317 409 491 593 673 769 863 971 1061 1163 31 97 167 241 331 419 499 599 677 773 877 977 1063 1171 37 101 173 251 337 421 503 601 683 787 881 983 1069 1181 41 103 179 257 347 431 509 607 691 797 883 991 1087 1187 43 107 181 263 349 433 521 613 701 809 887 997 1091 1193 Простые числа в окрестности 212 = 4 096 3877 3881 3889 3907 3911 3917 3919 3923 3929 3931 3943 3947 3967 3989 4001 4003 4007 4013 4019 4021 4027 4049 4051 4057 4073 4079 4091 4093 4099 4111 4127 4129 4133 4139 4153 4157 4159 4177 4201 4211 4217 4219 4229 4231 4241 4243 4253 4259 4261 4271 4273 4283 4289 4297 4327 4337 Простые числа в окрестности 104 9743 9749 9767 9769 9781 9787 9791 9803 9811 9817 9829 9833 9839 9851 9857 9859 9871 9883 9887 9901 9907 9923 9929 9931 9941 9949 9967 9973 10007 10009 10037 10039 10061 10067 10069 10079 10091 10093 10099 10103 10111 10133 10139 10141 10151 10159 10163 10169 Простые числа в окрестности 215 = 32 768 32479 32491 32497 32503 32507 32531 32533 32537 32561 32563 32569 32573 32579 32587 32603 32609 32611 32621 32633 32647 32653 32687 32693 32707 32713 32717 32719 32749 32771 32779 32783 32789 32797 32801 32803 32831 32833 32839 32843 32869 32887 32909 32911 32917 32933 32939 32941 32957 Простые числа в окрестности 216 = 65 536 65183 65203 65213 65239 65257 65267 65269 65287 65293 65309 65323 65327 65353 65357 65371 65381 65393 65407 65413 65419 65423 65437 65447 65449 65479 65497 65519 65521 65537 65539 65543 65551 65557 65563 65579 65581 65587 65599 65609 65617 65629 65633 65647 65651 65657 65677 65687 65699 Простые числа в окрестности 105 99707 99709 99713 99719 99721 99733 99761 99767 99787 99793 99809 99817 99823 99829 99833 99839 99859 99871 99877 99881 99901 99907 99923 99929 99961 99971 99989 99991 100003 100019 100043 100049 100057 100069 100103 100109 100129 100151 100153 100169 100183 100189 100193 100207 100213 100237 100267 100271 100279 100291 100297 100313 100333 100343 100357 100361 100363 100379 100391 100393
Простые числа в окрестности 106 999563 999599 999611 999613 999623 999631 999653 999667 999671 999683 999721 999727 999749 999763 999769 999773 999809 999853 999863 999883 999907 999917 999931 999953 999959 999961 999979 999983 1000003 1000033 1000037 1000039 1000081 1000099 1000117 1000121 1000133 1000151 1000159 1000171 1000183 1000187 1000193 1000199 1000211 1000213 1000231 1000249 1000253 1000273 1000289 1000291 1000303 1000313 Простые числа в окрестности 224 = 16 777 216 16776763 16776817 16776833 16776839 16776857 16776869 16776899 16776901 16776919 16776931 16776937 16776941 16776961 16776967 16776971 16776973 16776989 16777027 16777049 16777099 16777121 16777127 16777139 16777141 16777153 16777183 16777199 16777213 16777259 16777289 16777291 16777331 16777333 16777337 16777381 16777421 16777441 16777447 16777469 16777499 16777507 16777531 16777571 16777577 16777597 16777601 16777619 16777633 16777639 16777643 16777669 16777679 16777681 16777699 16777711 16777721 Простые числа в окрестности 109 999999223 999999229 999999323 999999337 999999353 999999391 999999433 999999487 999999491 999999503 999999527 999999541 999999587 999999599 999999607 999999613 999999667 999999677 999999733 999999739 999999751 999999757 999999761 999999797 999999883 999999893 999999929 999999937 1000000007 1000000009 1000000021 1000000033 1000000087 1000000093 1000000097 1000000103 1000000123 1000000181 1000000207 1000000223 1000000241 1000000271 1000000289 1000000297 1000000321 1000000349 1000000363 1000000403 1000000409 1000000411 1000000427 1000000433 1000000439 1000000447 Простые числа в окрестности 231 = 2 147 483648 2147482951 2147483029 2147483033 2147483053 2147483059 2147483069 2147483077 2147483123 2147483137 2147483171 2147483179 2147483237 2147483249 2147483269 2147483323 2147483353 2147483399 2147483423 2147483477 2147483489 2147483497 2147483543 2147483549 2147483563 2147483579 2147483587 2147483629 2147483647 2147483659 2147483693 2147483713 2147483743 2147483777 2147483783 2147483813 2147483857 2147483867 2147483869 2147483887 2147483893 2147483929 2147483951 2147483993 2147483999 2147484007 2147484037 2147484041 2147484043 2147484061 2147484083 2147484109 2147484161 2147484167 2147484197 Простые числа в окрестности 232 = 4 294 967 296 4294966553 4294966583 4294966591 4294966619 4294966639 4294966651 4294966657 4294966661 4294966667 4294966769 4294966813 4294966829 4294966877 4294966909 4294966927 4294966943 4294966981 4294966997 4294967029 4294967087 4294967111 4294967143 4294967161 4294967189 4294967197 4294967231 4294967279 4294967291 4294967311 4294967357 4294967371 4294967377 4294967387 4294967389 4294967459 4294967477 4294967497 4294967513 4294967539 4294967543 4294967549 4294967561 4294967563 4294967569 4294967597 4294967627 4294967639 4294967653 4294967681 4294967687 4294967701 4294967723 4294967759 4294967779
;,i^" «35.00 I Ml IIIНолен n ' л • Алге »»v.cl>«.S|)„.ril браичес {«'•гК19-б-|-02 кая Книга Патриса Нодена и Клода Китте представляет классическую алгебру — ту, которая преподается на уровне второго цикла университета, но в свете новой алгоритмической идеологии. Для рассматриваемой темы алгебра подходит лучше всего: алгоритми- ка по самой своей природе комбинаторна, а среди всех основных математических дисциплин алгебра является, несомненно, «самой комбинаторной». Это превосходная книга, которую я ставлю в моей библиотеке на полку со священными книгами, где находятся уже два евангелия — алгоритмика по Вирту и алгоритмика по Кнуту. Теперь я обладаю третьим евангелием; кто же напишет четвертое? Но ведь эта книга потребовала коллективной работы двух авторов — еще одно примечательное свойство, так что может быть моя коллекция евангелий уже полна? Нет: это противоречило бы Гёделю, но это уже совсем другая история. Франсис Сержераер. ISBN 5-03-003318-1 9 '785030"03318Т