杭电acm 1215 为什么会超时
发布网友
发布时间:2023-09-30 10:46
我来回答
共2个回答
热心网友
时间:2024-12-04 11:25
超时是正常的,你优化的不够彻底。
我有一个可以过的方法,核心的代码是这样的:
k=(int)(sqrt(1.0*n);
for(i=2;i<=k;i++)
{
b=n/i;
if(n%i==0)
{
sum+=i;
if(b!=i)
sum+=b;
}
}
这个方法基本的思路是,若一个数的因子且小于的平方根的话,这个数除以这个因子就可以算出另外一个大于平方根的因子。
另外要注意 这个因子刚好是此数平方根的情况。
用这个方法是可以过的。
希望对你有帮助~~
热心网友
时间:2024-12-04 11:26
#include<stdio.h>
int main()
{
int n,sum,m,i,j;
scanf("%d",&m);
for(i=0;i<m;i++)
{
sum=0;
scanf("%d",&n);
for(j=1;j*j<=n;j++)
if(n%j==0)
{
sum=sum+j;
if(n/j!=j)
sum=sum+n/j;
}
printf("%d\n",sum-n);
}
return 0;
}