Сведение по Куку задачи факторизации к языку из NP
Версия от 21:57, 13 марта 2010; Anastasia.agapova (обсуждение | вклад) (Новая страница: «==Формулировка задачи== Задача факторизации '''FACTORIZE''' — это задача разложения натурального…»)
Формулировка задачи
Задача факторизации FACTORIZE — это задача разложения натурального числа на простые множители.
Сведение задачи факторизации к языку FACTOR
Рассмотрим язык .
Используя его в качестве оракула, можно за полиномиальное время найти нетривиальные простые делители числа .
Пусть функция f разрешает язык FACTOR:
Тогда можно написать функцию p, работающую не медленнее, чем за полином, и возвращающую список A нетривиальных простых делителей n:
p(n)
{
b = 2;
t = 3;
A = {};
while (t <= n/2 + 1)
{
while (f(n, t))
{
n /= b;
A.add(b);
}
while ((t < n/2 + 1)&&(!f(n, t)))
{
t++;
}
b = t - 1;
}
return A;
}
Принадлежность языка FACTOR классу NP
.
Сертификатом y является нетривиальный делитель числа n, а верификатором - функция, которая проверяет, является ли y делителем n и меньше ли он числа x:
R(<n, x>, y)
{
if ((y >= x) || (y <= 1))
return false;
if (n % y != 0)
return false;
return true;
}
Таким образом, задача FACTORIZE сводится по Куку за полиномиальное время к языку FACTOR, принадлежащему классу NP.