Pagini recente » Cod sursa (job #582031) | Cod sursa (job #2788215) | Cod sursa (job #3133490) | Cod sursa (job #536889) | Cod sursa (job #2533293)
#include <bits/stdc++.h>
using namespace std;
ifstream f("sum.in");
ofstream g("sum.out");
int n,x,i,j;
bool c[100001];
int u[200001];
int p[10000], nrp;
int fact[100], nrf;
void Ciur(int x)
{
c[0]=c[1]=1;
for (i=2;i<=x;i++)
if (!c[i])
{
nrp++;
p[nrp]=i;
for (j=i*2;j<=x;j+=i)
c[j]=1;
}
}
void GetFact(int x)
{
nrf=0;
int y=x;
if (!c[x])
{
nrf=1;
fact[nrf]=x;
}
else
{
for (int i=1;p[i]*p[i]<=x;i++)
if (x%p[i]==0)
{
nrf++;
fact[nrf]=p[i];
while (x%p[i]==0)
x/=p[i];
}
if (x>1)
{
nrf++;
fact[nrf]=x;
}
}
}
long long GetSum(int x)
{
x=x*2;
long long s=1LL*x*(x+1)/2;
for (int i=1;i<=nrf;i++)
for (int j=fact[i];j<=x;j=j+fact[i])
if (u[j]!=n)
{
s=s-j;
u[j]=n;
}
return s;
}
int main()
{
f>>n;
Ciur(100000);
while (n--)
{
f>>x;
GetFact(x);
g<<GetSum(x)<<"\n";
}
return 0;
}