这样会超时:
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[500005];
int main(void)
{
int t,i,j,x;
memset(a,0,sizeof(a));
for(i=4;i<=500000;i++)
{for(j=2;j*j<i;j++)
if(i%j==0) a[i]+=j+i/j;
if(j*j==i) a[i]+=j;
}
scanf("%d",&t);
while(t--)
{
scanf("%d",&x);
printf("%d\n",a[x]+1);
}
}
这个挺好:
#include <cstdio>
const int A=500001;
int a[A]={0,0};
int main()
{
for(int i =2;i<A;i++)
a[i]=1;
for(int i = 2;i <= A/2; i++)
for(int j = i*2;j<A;j+=i)
a[j]+=i;
int n,m;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
printf("%d\n",a[m]);
}
}