Pagini recente » Cod sursa (job #2921665) | Cod sursa (job #2900411) | Cod sursa (job #1905439) | Cod sursa (job #529120) | Cod sursa (job #112626)
Cod sursa(job #112626)
#include <stdio.h>
#define NMAX 100002
long int a[NMAX],x,i,j,k,cnt,n,m,pr[NMAX],div[NMAX];
long long sum;
void ciur()
{
long long j;
for (i=2;i<=n;i++) a[i]=1;
for (i=2;i<=n;i++)
if (a[i])
{
pr[ ++pr[0] ] = i;
for (j=i*i;(j>0)&&(j<=n);j+=i) a[j]=0;
}
}
void back(long int nivel, long int nr1, long int p)
{
long long t;
if (nivel==div[0]+1) {
t=x/p;
if (nr1%2==1) cnt-=t;
else cnt+=t;
t= (t*(t+1)/2 ) * (long long) p;
if (nr1%2==1) sum=sum-(long long)t;
else sum=sum+(long long)t;
return;
}
back(nivel+1,nr1,p);
back(nivel+1,nr1+1,p*div[nivel]);
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
n=100000;
ciur();
scanf("%ld",&k);
for (;k;k--)
{
scanf("%ld",&n);
div[0]=0;
x=n;
for (i=1;pr[i]*pr[i]<=n;i++)
{
if (n%pr[i]) continue;
div[ ++div[0] ] = pr[i];
for (;n%pr[i]==0;n/=pr[i]);
}
if (n>1) div[ ++div[0] ] = n;
sum=0;cnt=0;
back(1,0,1);
sum=sum*2+x*cnt;
printf("%lld\n",sum);
}
return 0;
}