Pagini recente » Autentificare | Cod sursa (job #544138) | Cod sursa (job #835413) | Cod sursa (job #940509) | Cod sursa (job #1738722)
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
long long memo[100005],sum,p,k,y;
vector<int> v[100005];
int i,n,m,j,x,a[15];
bool used[15];
void bk(int nr)
{
if(nr>=k+1)
{
sum=(((y/p)*(y/p+1))/2)*p;
if(k%2==0) memo[x]-=sum;
else memo[x]+=sum;
return;
}
for(int j=a[nr-1]+1;j<m;j++)
{
if(!used[j])
{
used[j]=1;
a[nr]=j;
p*=v[x][j];
bk(nr+1);
used[j]=0;
p/=v[x][j];
}
}
}
int main()
{
ifstream f("sum.in");
ofstream g("sum.out");
for(i=2;i<=100000;i++)
if(v[i].empty())
for(j=i;j<=100000;j+=i)
v[j].push_back(i);
f>>n;
a[0]=-1;p=1;
for(i=1;i<=n;i++)
{
f>>x;
if(memo[x]==0)
{
y=2*x;
m=v[x].size();
for(k=1;k<=m;k++)
{
bk(1);
}
memo[x]=(y*(y+1))/2-memo[x];
}
g<<memo[x]<<'\n';
}
return 0;
}