菜鸟求助!!!!
这是一道求一个数除自身以外所以因子相加的和.如20=1+2+4+5+10;8=1+2+4;数的范围是1-500000;下面是我写的2道程序..为什么第1个会超时,而第2个没有.....(第2个是我从网上抄的).时间要求5秒.
第一个:
#include <stdio.h>
main()
{ int i,j,n,m,s;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{ scanf("%d",&m);
s=1;
for(j=2;j*j<=m;j++)
{
if(m%j==0)
if(j*j<m) s=s+j+m/j;
else s+=j;
}
printf("%d\n",s);
}
}
}
第二个:
#include <stdio.h>
main()
{
int i,j,n,s2,m,k,s,x,s1;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
k=0;s2=1;
scanf("%d",&m);
x=m;
for(j=2;j*j<=m;j++)
{
if(m%j==0)
{
s=1;s1=1;
while(m%j==0)
{
m/=j;
s1*=j;
s+=s1;
}
s2*=s;
}
}
if(m>1) s2*=(m+1);
printf("%d\n",s2-x);
}
}
}