Pagini recente » Rating Petrea Andrei (superpetrea00) | Cod sursa (job #1884734) | Cod sursa (job #205627) | Monitorul de evaluare | Cod sursa (job #201815)
Cod sursa(job #201815)
#include <stdio.h>
#include <math.h>
int i,j,n,k,x,d,cop,v,t,val,numar;
int div[20],ciur[200010],vect[20],nr[1000];
long long sum;
void back(int p)
{
int i;
for (i=p; i>=1; i--)
if (vect[i]==0)
{
vect[i]=1;
back(i-1);
vect[i]=0;
}
numar=0;val=1;
for (i=1; i<=k; i++)
{
numar+=vect[i];
if (vect[i]) val*=div[i];
}
if (numar>1)
{
nr[++t]=val;
}
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
scanf("%d",&n);
for (i=1; i<=n; i++)
{
scanf("%d",&x);
k=0;v=x;
if (x%2==0)
{
div[++k]=2;
while (x%2==0) x/=2;
}
while (x>1)
{
d=sqrt(x);cop=x;
for (j=3; j<=d; j+=2)
if (d%j==0)
{
div[++k]=j;
while (x%j==0) x/=j;
break;
}
if (x==cop) {div[++k]=x;x=1;}
}
x=v;
sum=(long long)x*(2*x+1);
//scad unele numere de doua ori
for (j=1; j<=k; j++)
{
d=(2*x)/div[j];
sum-= div[j] * (d*(d+1)/2);
}
t=0;
back(k);
for (j=1; j<=t; j++)
{
d=(2*x)/nr[j];
sum+=nr[j]* (d*(d+1)/2);
}
printf("%lld\n",sum);
}
return 0;
}