Pagini recente » Cod sursa (job #571759) | Cod sursa (job #952523) | Cod sursa (job #123113) | Cod sursa (job #2616978) | Cod sursa (job #320266)
Cod sursa(job #320266)
#include<cstdio>
using namespace std;
#define IN "sum.in","r",stdin
#define OUT "sum.out","w",stdout
#define LL long long
int N , A, E;
int V[120];
int sol[1000];
LL sum ;
void back(int k)
{
if(k == E + 1)
{
int prod = 1 , nr = 0;
for(int i = 1 ; i <= k - 1 ; ++i)
if(sol[i] == 1){ prod *= V[i];++nr;}
if (nr == 0)
return ;
int n = (2 * A) / prod;
if(nr % 2 == 0)
sum -= prod * ((LL)n * (n + 1) / 2);
else
sum += prod * ((LL)n * (n + 1) / 2);
return;
}
sol[k] = 1;
back(k + 1);
sol[k] = 0;
back(k + 1);
}
LL solution(int A)
{
int A1 = A;
E = 0;
for(int i = 2 ; i * i <= A ; ++i)
{
if(A1 % i == 0) V[++E] = i;
while(A1 % i == 0)
A1 /= i;
}
if(A1 != 1) V[++E] = A1;
sum = 0;
back(1);
// printf("")
int a = A;
return (LL)a * (2 * a + 1) - sum;
}
int main()
{
freopen(IN);
freopen(OUT);
scanf("%d",&N);
for(int i = 1 ; i <= N ; ++i)
{
scanf("%d",&A);
printf("%lld\n",solution(A));
}
return 0;
}