http://acm.hdu.edu.cn/showproblem.php?pid=1215
题目意思是,输入n,求出小于n的因子的和,测试数据50w,n最大50w,暴力的话会超时,但是采取优化,sqrt(n),因为因子成对出现,只需特判完全数,
最大复杂度为50w*sqrt(50w)~~3500w,勉强过了。
#include<iostream>
using namespace std;
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
int ans=1;
scanf("%d",&n);
for(int i=2;i*i<=n;i++)//等于呀
{
if(n%i==0)
{
if(n/i==i)
ans+=i;
else
ans+=(i+n/i);
}
}
printf("%d\n",ans);
}
return 0;
}