分析以下算法的时间复杂度,最好能告诉我怎么算,多谢了

题目如下:intINTI(intn){for(i=2;i<sqrt(n);i++)if(n%i==0)return0;return1;}longsun(intn){s=0... 题目如下:
int INTI(int n)
{for(i=2;i<sqrt(n);i++)
if(n%i==0)
return 0;
return 1;
}

long sun(int n)
{s=0;
for(i=1;i<=n;i++
for(i=1,j=1;j<i;j++)
p=p*j;
s+=p;
}
return s;
}
展开
 我来答
mxl033
2013-09-17 · TA获得超过216个赞
知道小有建树答主
回答量:120
采纳率:61%
帮助的人:84.7万
展开全部

你上下好像是两个独立的函数,那就分开算:

第一个计算从2到n的平方根,有没有n的因子,有返回0,没有返回1,应该是一个判断n是否是质数的函数,那么它的复杂度是动态的,最好的可能是能被2除,则复杂度为1,最差的情况是n是质数,则复杂度为n的平方根-1,可以简单记为O(n的开方)

第二个,可能有些语法错误:

  1. p是什么,全局变量?因为涉及p*j所以p的初值很关键

  2. 第二个for循环把i重置为1和j相同,所以导致此for循环不会执行,那么整体的复杂度就是第一重循环即O(n)

如果做如下改动:

long sun(int n)

    int s = 0, p = 0;
  
    for(i = 1; i <= n; i++) 
    {
        p = 1; 
        for(j = 1; j <= i; j++)
            p = p * j;

        s += p;
    }
  
    return s;
}

 那这个程序就变成了求1到n所有数的阶乘的和,那么它的复杂度为:

  1. 一重for循环,执行了n次

  2. 二重for循环,执行的次数相当于一个从1到n的等差数列的和,为(n+1)*n/2,即n^2/2 + n/2

当n趋近无穷时,可以忽略低次幂和系数,即其复杂度为O(n^2)

小狂中E
2013-09-17 · TA获得超过1418个赞
知道大有可为答主
回答量:1514
采纳率:66%
帮助的人:1034万
展开全部
O(n^0.5)
如果第2题中for(i=1,j=1...)是正确的,那就O(n),如果去掉i=1则是O(n^2)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
video0000
2013-09-17 · TA获得超过349个赞
知道小有建树答主
回答量:445
采纳率:100%
帮助的人:253万
展开全部
第一个是o(n)
第二个是o(n*n)
追问
我个人觉得第二个的时间复杂度为O(n)因为它的循环次数为1+2+3+4+...+n=(n+1)/2.不考虑常数项和系数为n
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式