for(i=1;i<=2237;i++)
{
for(j=i+1;j<=2237;j++)
{
for(k=1;k*(i*i+j*j)<=5000000;k++)
{
a[k*(i*i+j*j)]=1;
}
}
}
这里5 * 10 ^ 6可以假设为n,2237近似为sqrt(n)。我能够弄清楚外部2个循环的复杂性,它是让我困惑的最里面的循环。
答案 0 :(得分:0)
如果输入指示最内层循环中的迭代次数(正如您所描述的那样):
外循环运行sqrt(N)
次,然后在外循环的每次迭代中,中间循环在平均值 sqrt(N)/2
上运行。然后内循环在中间循环的每次迭代中运行N次。
所以.... sqrt(N) * sqrt(N)/2 * N == (N-Squared / 2)
因此O(N-Squared)
如果输入指示最外层循环中的迭代次数,则最内层循环迭代计数始终是外部交互计数的平方值:
`N * N/2 * N-Squared = N**4 (N to the power of 4)`. Hence, `O(N**4)`