Теоретично складність складної перевірки значення


13

Функція підрахунку простих чисел , зменшена , визначається як кількість простих чисел, менших або рівних x .π(x)x

Ми можемо визначити задачу рішення з наступним чином:π(x)

Давши два числа і n , записані у двійковій формі, вирішіть, чи π ( x ) = n .xnπ(x)=n

Ми з другом говорили про цю проблему раніше сьогодні. Для цієї проблеми існує алгоритм псевдополіноміального часу - просто порахуйте до , використовуючи пробний поділ на кожному кроці, щоб побачити, скільки чисел є простими, і перевірте, чи дорівнює це n . Проблема також полягає в PSPACE, оскільки алгоритм, який я тільки що описав, може бути реалізований для використання лише поліноміального допоміжного простору.xn

Однак у мене виникають проблеми з тим, як знайти цю проблему в нижчий клас складності. Я не можу зрозуміти, як створити перевірку поліноміального часу для проблеми, тому я не впевнений, чи є вона в NP, і я не можу придумати спосіб ввійти в поліноміальну ієрархію взагалі.

Який найбільш відповідний клас складності для цієї проблеми?

Спасибі!


зазвичай такі типи проблем, як правило, залежать від гіпотези Рімана .... Є багато функцій "поруч" з вашими, які мають цей зв'язок ....
vzn

Відповіді:


11

Це дуже відкрита проблема. Я змалюю кілька класів, до яких проблема могла б "природно" вписатися.

{(x,n)|π(x)n}{(x,n)|π(x)n}{(x,n)|π(x)n}K{(x,n)|π(x)n}coKKcoK

π(X)#P#PFPSPACEqxq

#PPP{(x,n)|π(x)n}{(x,n)|π(x)n}PP (зробивши кілька гри в вищезгадану ТМ, щоб збалансувати кількість прийнятих шляхів).


3

= ,

[m0m<2log2(x+1)]b
якщо x < mпотім відхилити
якщо b=1тоді:
якщо m < nтоді прийміть інше відхилити
ще:
якщо m є простим, тоді прийміть інше відхилити

.


Зокрема, ваша проблема полягає також у ПП, оскільки ПП закривається в результаті зменшення таблиці істинності .


2

На практиці ви можете отримати відповідь швидше або повільніше :-(

Існують досить хороші наближення для π (x). Отже, ви обчислюєте таке наближення, і якщо воно занадто далеко, ви знаєте, що π (x) ≠ n. Наприклад, якщо n ≥ x, то я знаю, що π (x) ≠ n, не рахуючи нічого.

Існує швидкий алгоритм, який визначає, чи π (x) парне чи непарне, працює в O (x ^ (1/2)). Ви можете запустити цей алгоритм, і він може виявити, що парність n неправильна, і ви закінчили. Він має п'ятдесят шансів, якщо n - випадкове ціле число, близьке до π (x).

Крім цього, я не знаю жодного методу, який швидше, ніж обчислення π (x). Що дуже незручно - якщо я записую програму, яка повинна обчислювати π (10 ^ 25), і отримую результат, який явно не є помилковим, то немає можливості перевірити, чи мій результат правильний, крім повторення розрахунок. І ви не можете просто повторити обчислення за допомогою моєї програми, вам потрібно написати іншу програму, інакше ви не виявите, чи є в моїй програмі помилки, які змушують її обчислювати трохи іншу функцію, ніж π (x).

π (x) можна обчислити досить легко приблизно в O (n ^ (2/3)), і швидше з деякою дійсно глибокою математикою.


1
Це цікаво, але питання стосується класів складності, що містять проблему.
usul
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.