Pagini recente » Cod sursa (job #1841947) | Cod sursa (job #1458250) | Cod sursa (job #1105978) | Cod sursa (job #2021293) | Cod sursa (job #762104)
Cod sursa(job #762104)
#include <cstdio>
#include <cstring>
#define NMAX 100055
#define Sum(N) (N*(N+1)/2)
using namespace std;
bool ciur[NMAX],v[2*NMAX],nrprim[2*NMAX];
int N,k,prim[NMAX];
long long S;
void ciur_er()
{
int i,j;
prim[++k]=2;
for(i=3;i<=NMAX;i+=2)
if(!ciur[i])
{
prim[++k]=i;
nrprim[i]=1;
for(j=3*i;j<=NMAX;ciur[j]=1,j+=i+i);
}
}
void afisare()
{
printf("%lld\n",S);
}
int cmmdc(int a, int b)
{
int r=1;
while(r)
{
r=a%b;
a=b;
b=r;
}
return a;
}
void mark()
{
long long i,j,n;
n=N;
v[1]=1;
for(i=1;i<=k && n && prim[i]*prim[i]<=n;i++)
if(n%prim[i]==0)
{
for(j=1;j<=2*NMAX;j++)
if(v[j] && j*prim[i]<=2*NMAX)
v[j*prim[i]]=1;
else
if(j%prim[i]==0)
v[j]=1;
n/=prim[i];
}
if(n)
for(j=1;j<=2*NMAX;j++)
if(v[j] && j*n<=2*NMAX)
v[j*n]=1;
else
if(j%n==0)
v[j]=1;
}
void adun()
{
int i;
S=0;
v[1]=0;
for(i=1;i<=2*N;i++)
if(!v[i])
S+=i;
}
void solve()
{
if(nrprim[N]==1)
{
S=Sum(2*1LL*N)-3*N;
return;
}
int i,j;
mark();
adun();
memset(v,0,sizeof(v));
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
int T;
ciur_er();
scanf("%d",&T);
while(T--)
{
scanf("%d",&N);
solve();
afisare();
}
return 0;
}