和 hdu 1215 一个意思
// 只是我 1坑了 1 时应该为0
#include <iostream>
#include <math.h>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
#define maxm 10010
#define maxn 1000010
int prim[maxn/3],p;
bool f[maxn];
int gcd(int a,int b){
int r;
while(r=a%b){a=b;b=r;}
return b;
}
bool isp(int n){
if(n==2) return true;
if(n%2==0||n==1) return false;
int m=(int)(sqrt(n+1.0));
for(int i=3;i<=m;i+=2)
if(n%i==0) return false;
return true;
}
int getprime(){
int i,j;
f[1]=true;
for(i=4;i<=maxn;i+=2)
f[i]=true;
int m=(int)(sqrt(maxn+1.0));
for(i=3;i<=m;i+=2){
for(j=i*i;j<=maxn;j+=i)
f[j]=true;
}
for(i=1;i<=maxn;i++)
if(!f[i]) prim[p++]=i;
}
int sum[maxn];
void sum_divisor(int n){
int i,j;
for(i=2;i<=n/2;i++)
for(j=i+i;j<=n;j+=i)
sum[j]+=i;
}
int main()
{
int n;
int m;
int i,k;
sum_divisor(maxn/2);
sum[1]=-1;// 注意呀
while(scanf("%d",&n)!=EOF){
while(n--){
scanf("%d",&m);
printf("%d
",sum[m]+1);
}
}
return 0;
}