我认为以下代码为O(log log n)
,因为其中包含i*i
但我在log n
和log (log n)
之间感到困惑。
for (i=2; i*i<=number; i++)
{
if (number % i == 0) return 0;
}
答案 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;
}
然后:
答案 3 :(得分:0)
除非数字是素数,否则它应该比sqrt(数字)迭代少得多。如果数字是素数,那么它迭代的次数是最大楼层(sqrt(数字)),因此复杂度为O(sqrt(number))