Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

readme.md

Оглавление

1. Решение задачи
   1.1. Пример работы
   1.2. Сложность алгоритма
2. Теория
   2.1. Простое число
   2.2. Тесты просты
   2.3. Дополнительная литература

1. Определить, является ли число простым со 100% вероятностью

Вопрос определения того, является ли натуральное число N простым, известен как проблема простоты. Тестом простоты (или проверкой простоты) называется алгоритм, который, приняв на входе число N, позволяет либо не подтвердить предположение о составности числа, либо точно утверждать его простоту. Во втором случае он называется истинным тестом простоты. Таким образом, тест простоты представляет собой только гипотезу о том, что если алгоритм не подтвердил предположение о составности числа N, то это число может являться простым с определенной вероятностью.

1.1. Пример работы

После некоторой оптимизации был исправлен баг вычисления корня длинной арифметикой, теперь можно извлечь корень любого сколь угодно большого числа в считанные миллисекунды. Цикл был оптимизирован, что дало прирост в скорости на 30%. К сожалению, быстрой скоростью алгоритм не обладает, по причине использования одного потока. Есть предположение, если использовать параллельные вычисления (многопоточность), то можно добиться лучшего результата.


Таблица результатов (пример с простыми числами)

Число Время определения Описание
2 0.004с Одно из первых 500 простых
101 0.004с Одно из первых 500 простых
3571 0.005с Одно из первых 500 простых
27644437 0.035с Простое число Белла
655360001 0.137с Простые числа в форме n 4 + 1
1073676287 0.034с Простое число Кэрола
68718952447 0.220с Простое число Кэрола
274876858367 0.440с Простое число Кэрола
4398042316799 3.134с Простое число Кэрола
1125899839733759 49.155с Простое число Кэрола
99194853094755497 7м 24.780с Простое число Фибоначчи
11111111111111111111111 33м 11.451с Уникальное простое число

1.2. Сложность алгоритма

Перебор делителей (пробное деление) — алгоритм факторизации или тестирования простоты числа путем полного перебора всех возможных потенциальных делителей. Худший случай, если перебор придется проводить от 2 до корня из n. Сложность данного алгоритма:


2. Теория

2.1. Простое число

Просто́е число́ — натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя — единицу и самого себя. Другими словами, число p является простым, если оно больше 1 и при этом делится без остатка только на 1 и на p (на самого себя).

Пример: 5 простое число, потому что делится только на 1 и на 5, а 6 является составным числом, так как делится на 2 и 3, помимо 1 и 6.

Натуральные числа, бо́льшие единицы, не являющиеся простыми, называются составными. Таким образом, все натуральные числа разбиваются на три класса: единицу (имеющую один натуральный делитель), простые числа (имеющие два натуральных делителя) и составные числа (имеющие больше двух натуральных делителей). Основная теорема арифметики утверждает, что каждое натуральное число, большее единицы, представимо в виде произведения простых чисел, причём единственным способом с точностью до порядка следования сомножителей. Таким образом, простые числа являются элементарными «строительными блоками» натуральных чисел.

2.2. Тесты простоты

Существующие алгоритмы проверки числа на простоту могут быть разделены на две категории: истинные тесты простоты и вероятностные тесты простоты. Истинные тесты результатом вычислений всегда выдают факт простоты либо составности числа, вероятностный тест дает ответ о составности числа либо его несоставности с некоторой вероятностью. Если сказать проще, то вероятностный алгоритм говорит, что число скорее всего не является составным, однако в итоге оно может оказаться как простым, так и составным. Числа, удовлетворяющие вероятностному тесту простоты, но являющиеся составными, называются псевдопростыми.

На практике вместо получения списка простых чисел зачастую требуется проверить, является ли данное число простым. Алгоритмы, решающие эту задачу, называются тестами простоты. Существует множество полиномиальных тестов простоты, но большинство их являются вероятностными (например, тест Миллера — Рабина) и используются для нужд криптографии. В 2002 году было доказано, что задача проверки на простоту в общем виде полиномиально разрешима, но предложенный детерминированный тест Агравала — Каяла — Саксены имеет довольно большую вычислительную сложность, что затрудняет его практическое применение.

2.3. Дополнительная литература

Как проверить, является ли число простым

Список простых чисел