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