Pagini recente » Cod sursa (job #508095) | Cod sursa (job #804453) | Cod sursa (job #793657) | Cod sursa (job #340333) | Cod sursa (job #762089)
Cod sursa(job #762089)
#include <cstdio>
#include <cstring>
#define NMAX 200015
#define Sum(N) (N*(N+1)/2)
using namespace std;
bool ciur[NMAX],prim[NMAX],v[NMAX],viz[NMAX];
int N;
long long S;
void ciur_er()
{
int i,j;
ciur[2]=prim[2]=1;
for(i=3;i<=NMAX-3;i+=2)
if(!ciur[i])
{
prim[i]=1;
for(j=3*i;j<=NMAX-3;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 solve()
{
if(prim[N]==1)
{
S=Sum(2*1LL*N)-3*N;
return;
}
int i,j;
S=1;
for(i=2;i<=2*N;i++)
{
if(v[i])
continue;
if(cmmdc(i,N)==1)
{
for(j=i;j<=2*N;v[j]=1,j+=i)
if(!viz[j] && !v[j])
S+=j,viz[j]=1;
}
else
for(j=i;j<=2*N;v[j]=1,j+=i);
}
memset(v,0,sizeof(v));
memset(viz,0,sizeof(viz));
}
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;
}