Какова сложность этого алгоритма

70
8

Какова временная сложность этого алгоритма?

void prime(int n) { 
int i = 2;
while ((n % i) && i <= sqrt(n))
i++;

if (i > sqrt(n))
print("%d is a prime number\n", n);
else
print("%d is not a prime number\n", n);
}

спросил(а) 2016-09-13T05:48:00+03:00 4 года назад
1
Решение
58

Сложность составляет приблизительно O (sqrt (N)). Некоторые книги выражают это как O (N 0,5 ).

Квадратный корень перевычисляет каждую итерацию цикла. Это довольно медленная операция, поэтому она медленнее, чем оптимальная, но только постоянным фактором, поэтому она не влияет на вычислительную сложность.

ответил(а) 2016-09-13T07:03:00+03:00 4 года назад
41

Раньше я думал неправильно. Эй, это просто O (sqrt (n))... Посмотрите, что while выполняется для всех x <= sqrt (n), который делит n. Таким образом, я могу максимально запустить O (sqrt (n)) раз. Так что это O (sqrt (n)). Никаких других факторов.

ответил(а) 2016-09-13T05:55:00+03:00 4 года назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема