Algorithm 循环到i*i<;的运行时间N

Algorithm 循环到i*i<;的运行时间N,algorithm,square-root,big-theta,Algorithm,Square Root,Big Theta,代码如下: int foo(int n) { if(n == 1) return 1; int f = 0; int i; for(i=1; i*i<=n; i++) if(n%i == 0) f+=2; i--; if(i*i == n) f--; return f; } intfoo(intn) { 如果(n==1) 返回1; int f=0; int i;

代码如下:

int foo(int n)
{
    if(n == 1)
        return 1;
    int f = 0;
    int i;
    for(i=1; i*i<=n; i++)
        if(n%i == 0)
            f+=2;
    i--;
    if(i*i == n)
        f--;
    return f;
}
intfoo(intn)
{
如果(n==1)
返回1;
int f=0;
int i;

因为(i=1;i*iO(sqrt n)看起来很奇怪,但对我来说这是多项式增长而不是二次增长(i++)?n的任何幂都是复杂度的可行幂。O(n^1/2)很好。@JackKrauser想让这个问题更适合Q&a模型(因为“你的分析是正确的”并不是一个特别好的答案),我建议您将此问题改为询问类似“此循环的运行时复杂性是多少?”的问题,然后发布一个包含您的分析的答案,然后接受。
for(i=1; i*i<=n; i++)