Pagini recente » Cod sursa (job #1118393) | Cod sursa (job #970350) | Cod sursa (job #2944059) | Cod sursa (job #2962538) | Cod sursa (job #111558)
Cod sursa(job #111558)
#include <stdio.h>
#include <string.h>
int prime[160], div[16], isprime[318], cnt, sol, count, nr = 1;
void ciur();
void bkt(int);
int n, x;
int main()
{
freopen("sum.in", "r", stdin);
freopen("sum.out", "w", stdout);
int i, j, aux;
ciur();
scanf("%d", &n);
for(i = 1; i <= n; ++i)
{
scanf("%d", &x);
aux = x;
cnt = 0;
sol = 0;
for(j = 1; prime[j] * prime[j] <= x; ++j)
{
if(aux % prime[j] == 0)
{
div[++cnt] = prime[j];
while(aux % prime[j] == 0)
{
aux /= prime[j];
}
}
}
if(aux)
{
div[++cnt] = aux;
}
bkt(1);
printf("%d\n", sol);
}
return 0;
}
void ciur()
{
int i, j;
for(i = 2; i < 318; ++i)
{
if(!isprime[i])
{
prime[++prime[0]] = i;
for(j = 2 * i; j < 318; j += i)
{
isprime[j] = 1;
}
}
}
}
void bkt(int k)
{
if(k == cnt + 1)
{
long long temp = (long long) 2 * x / nr;
temp *= temp + 1;
temp /= 2;
temp *= nr;
if(count % 2 == 0)
{
sol += temp;
}
else
{
sol -= temp;
}
}
else
{
bkt(k + 1);
nr *= div[k];
++count;
bkt(k + 1);
--count;
nr /= div[k];
}
}