Полиномиальный алгоритм проверки чисел на простоту: тест Агравала-Каяла-Саксены |
||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2024-11-08 12:50 Введение Одной из важнейших задач в теории чисел является проверка числа на простоту. То есть по заданному числу эффективно определить, является оно простым или составным. Алгоритмы, решающие эту задачу (их также называют тестами простоты), известны с древних времён, например решето Эратосфена. Но алгоритма, имеющего полиномиальную сложность, долгое время известно не было. В 2002 году индийскими математиками Агравалом, Кайялом и Саксеной в работе «PRIMES is in P» был впервые предложен алгоритм проверки простоты чисел, который одновременно является полиномиальным, универсальным, детерминированным и безусловным. До этого были известны алгоритмы, которые обладали максимум тремя из четырёх свойств.
Обозначения - кольцо вычетов по модулю n. Запись означает, что многочлены, коэффициенты которых рассматриваются как вычеты из , равны. Запись означает, что многочлены с коэффициентами из равны по модулю многочлена . — порядок числа n по модулю r. Минимальное число k, такое что . — функция Эйлера. Количество натуральных чисел, меньших n и взаимно простых с ним. — логарифм по основанию два числа n. Основная идея Основная идея алгоритма опирается на следующую теорему: Теорема:
выполняется тогда и только тогда, когда n — простое. Это тождество уже можно использовать для проверки простоты. Но алгоритм не будет полиномиальным, так как потребуется сделать проверок — по числу коэффициентов в полиномах. Идея состоит в том, чтобы рассматривать равенство полиномов по модулю другого полинома, степени меньшей, чем n. Из теоремы вытекает следствие: Следствие:
Обратное утверждение в общем случае неверно. В статье индийских математиков доказано, что для некоторого r и некоторого множества значений a обратное утверждение будет верно: Теорема: , при котором тождество
Выполнено для всех , то n — либо простое, либо степень простого. Это позволяет построить полиномиальный алгоритм проверки чисел на простоту, что является основным результатом работы. Тест AKS Алгоритм Вход: натуральное число n > 1. Алгоритм:
Рассмотрим подробно реализацию каждого шага алгоритма и разберём выполнение на примере числа 47. Шаг 1 На первом шаге нужно определить, является ли число n точной степенью другого числа, т. е. . Пожалуй, самый простой способ сделать это — проверить, что . При этом достаточно проверять только значения (так как если , то ) Пример: Проверяем от 2 до 4:
Следовательно, 47 не является точной степенью другого числа. Шаг 2 Подходящее r находится перебором. Для каждого r нужно:
Известно, что искомое r имеет порядок не более . Пример: Искомое r = 41:
Шаги 3-4 Элементарные, требуется только реализовать вычисление НОД двух чисел. Шаг 5 Для достижения теоретической сложности достаточно использовать быстрые алгоритмы для арифметических операций с многочленами. Здесь рассмотрим одну эффективную на практике оптимизацию: нахождение остатка от деления без прямого деления многочленов, используя только сложения. Если многочлен степени возводится в квадрат, то в результате получается многочлен степени : Рассмотрим деление на : Раскрывая скобки, находим коэффициенты : Пример:
Оценка сложности Введём обозначение: , где — некоторая функция от n. При оценках будем опираться на то, что умножение и деление m-битных чисел имеют сложность . Соответственно, операции над полиномами степени d имеют сложность . НОД двух m-битных чисел можно найти за . На первом шаге определение, является ли число точной степенью, имеет сложность . На втором шаге нужно найти r. Это делается перебором возможных значений r и проверкой для всех . Для каждого r это требует умножений по модулю r, значит для каждого r сложность . Учитывая, что r имеет порядок , сложность всего шага равна . Третий шаг требует вычисления НОД для r чисел. Общая сложность шага . На пятом шаге нужно проверить равенств. Каждое равенство включает умножений полиномов степени r, у которых коэффициенты порядка . Каждое равенство может быть проверено за . Итого сложность шага . Эту оценку из оригинальной статьи можно улучшить. Лучшая оценка на текущий момент . Применение Алгоритм AKS имеет важное теоретическое значение, однако не применяется на практике. Во-первых, оценка сложности содержит полином высокой степени. Во-вторых, алгоритм требователен по памяти. Даже при оценке параметра для проверки числа размером 1024 бит потребуется около 1 гигабайта памяти. Для практического применения лучше всего на данный момент использовать вероятностные алгоритмы. Канал с дополнительными материалами. Источник: habr.com Комментарии: |
|