#include <stdio.h>
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
typedef long long LL;
const int f=500000;
LL a[f];
void prime(){
int i,j;
for(i=1;i<=500000;i++)
a[i]=1;
for(i=2;i<=250000;i++)
{
for(j=2*i;j<=500000;j+=i)
a[j]+=i;
}
}
int main(){
memset(a,0,sizeof(a));
prime();
int n;
scanf("%d",&n);
while(n--)
{
int s;
scanf("%d",&s);
printf("%lld\n",a[s]);
}
return 0;
}
一个打表题。主要是对于各个因子加和的事。很容易超时,就是打表的时候出不来了。
不过设定一下i的循环次数25W,j的循环次数也是25W,就基本上不会超时。
最后只需要输入输出就好。