下面这段代码的复杂性:log log n还是log n?

时间:2014-04-09 11:31:27

标签: c++ time-complexity

我认为以下代码为O(log log n),因为其中包含i*i但我在log nlog (log n)之间感到困惑。

for (i=2; i*i<=number; i++) 
{
   if (number % i == 0) return 0;
}

4 个答案:

答案 0 :(得分:4)

你的循环条件相当于i&lt; = sqrt(数字),所以在最坏的情况下你将有大约sqrt(数字)迭代次数。

因此该代码的复杂性为O(√n)(O(sqrt(n))

答案 1 :(得分:1)

编写几个示例并计算迭代次数。当你估计复杂性时,你可能只考虑最坏的情况 - 当number是素数时。您也可以搜索此算法的复杂性,例如检查wikipedia中的数字是否为素数。

提示:复杂性与对数无关,但更像是另一个算术函数。

答案 2 :(得分:1)

您可以将代码转换为以下内容:

for (i=2; i<=sqrt(number); i++) 
{
   if (number % i == 0) return 0;
}

然后:

enter image description here

答案 3 :(得分:0)

除非数字是素数,否则它应该比sqrt(数字)迭代少得多。如果数字是素数,那么它迭代的次数是最大楼层(sqrt(数字)),因此复杂度为O(sqrt(number))