Первоначально я думал, что сложность O (n^3), потому что внутренний цикл переходит в i * i, но теперь я считаю, что сложность O (n^2) из-за заявления «break».Какой порядок сложности (Big O) этого кода
Что вы думаете об этом?
#include <stdio.h>
int main()
{
int i,k,l,m;
unsigned int j;
l=0;
for (i=3; i<65535;i+= 2) {
k=1;
for (j=3; j <= i*i; j += 2) {
if (j==i) continue;
if(i%j ==0) {
k=0;
break;
}
}
if (k) { l++; }
}
printf("%i\n", l);
return 0;
}
Вы можете думать "без" "если (J == я) продолжить;" также ... Я добавил эту строку позже и не думаю, что она сильно меняет сложность. – Nix
Что такое n в ваших предположениях O (n) – UmNyobe
Похоже, что это подсчет простых чисел, но это такая пустая трата времени, чтобы продолжать идти после 'j' pass' i'. В действительности условие должно быть 'j * j <= i'. – JS1