ACM这道题,为什么超时了?这么短的代码,求解释,谢谢

求特定数的因子和的程序:#include<stdio.h>main(){longT,N,i;doublesum;scanf("%ld",&T);while(T--){su... 求特定数的因子和的程序:
#include<stdio.h>

main()
{
long T,N,i;
double sum;
scanf("%ld",&T);
while(T--)
{
sum=0;
scanf("%ld",&N);
for(i=1;i<N;i++)
{
if(!(N%i)) sum+=i;
}
printf("%.0lf\n",sum);
}

}
展开
 我来答
百度网友a22c906
2012-01-12 · TA获得超过768个赞
知道小有建树答主
回答量:206
采纳率:0%
帮助的人:140万
展开全部
程序超时跟代码长度没有关系的,while(true)这句话很短吧,但是运行时间是无限长。你这道题找N的因子方法不对,N可能是个很大的数字,比如10亿,你这么找就要循环10亿次,必然超时。一个最简单的优化,只要搜索到N/2就够了,大于N/2的数里面,只有N是它自己的因子,其他数都不可能,你想想是不是呢?当然了,这样写依然要超时的,你自己查一查求整数N所有因子的算法吧,应该找得到,我现在一下也想不起来这个算法怎么写,如果你找不到的话,我晚上试着帮你写一下。
百度网友28b4182
2012-01-12 · TA获得超过7222个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1810万
展开全部
你的复杂度太高了
#include<stdio.h>

main()
{
long T,N,i;
double sum;
scanf("%ld",&T);
while(T--)
{
sum=0;
scanf("%ld",&N);
for(i=1;i*i<=N;i++)
{
if(!(N%i))
{

sum+=i;
if(i*i!=n)
sum+=n/i;
}
}
sum-=n;
printf("%.0lf\n",sum);
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
忘至白葬不情必0T
2012-01-12 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
for(i=1;i<=N/2;i++)试试?
或者把sum也改成long试试?整数比浮点数运算快很多哦。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式