Pagini recente » Cod sursa (job #463280) | Cod sursa (job #3209925) | Cod sursa (job #1255598) | Cod sursa (job #411928) | Cod sursa (job #2668069)
#include <bits/stdc++.h>
using namespace std;
int T,n;
int64_t S,S2;
vector <int> Prim;
bitset <100005> V;
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
Prim.push_back(2);
for(int i=3; i<=100000; i+=2)
{
if(!V[i])
{
for(int j=2; i*j<=100000; j++)
V[i*j]=true;
Prim.push_back(i);
}
}
cin>>T;
while(T--)
{
cin>>n;
n<<=1;
int h=0,copie=n>>1;
S=n*(n+1)/2,S2=0;
vector <int> P;
while(copie>1)
{
if(!(copie%Prim[h]))
{
P.push_back(Prim[h]);
while(!(copie%Prim[h]))
copie/=Prim[h];
}
h++;
if(Prim[h]*Prim[h]>copie&&copie>1)
{
P.push_back(copie);
break;
}
}
for(int mask=1; mask<(1<<P.size()); mask++)
{
int64_t S1=1;
int32_t k=__builtin_popcount(mask);
for(int j=0; j<P.size(); j++)
if(mask&(1<<j))
S1*=P[j];
if(k&1)
S2+=S1*(n/S1*(n/S1+1))/2;
else
S2-=S1*(n/S1*(n/S1+1))/2;
}
cout<<S-S2<<'\n';
}
return 0;
}