Pagini recente » Cod sursa (job #2015409) | Cod sursa (job #1457768) | Cod sursa (job #1799002)
#include<fstream>
#include<cstring>
#define DIM 200000
using namespace std;
ifstream fin("sum.in");
ofstream fout("sum.out");
int v[DIM / 2], k, n, x, a[15], nr, f[15];
char w[DIM + 5];
long long pinex( int m ){
long long sum = 0;
memset( f, 0, sizeof(f) );
while( f[0] != 1 ){
int i = m;
while( f[i] == 1 ){
f[i] = 0;
i--;
}
f[i] = 1;
if( i == 0 ){
break;
}
int sign = -1;
int number = 1;
for( i = 1; i <= m; i++ ){
if( f[i] == 1 ){
sign *= -1;
number *= a[i];
}
}
int nr1 = ( 2 * x / number );
nr1 = nr1 * (nr1 + 1) / 2;
sum += 1LL * sign * number * nr1;
}
return sum;
}
int main(){
w[0] = w[1] = 1;
for( int i = 2; i <= DIM; i++ ){
if( w[i] == 0 ){
v[++k] = i;
for( int j = i + i; j <= DIM; j += i ){
w[j] = 1;
}
}
}
fin >> n;
for( int i = 1; i <= n; i++ ){
fin >> x;
nr = 0;
int save = x;
for( int j = 1; v[j] * v[j] <= save && x != 1; j++ ){
if( x % v[j] == 0 ){
a[++nr] = v[j];
while( x % v[j] == 0 ){
x /= v[j];
}
}
}
if( x != 1 ){
a[++nr] = x;
}
x = save;
fout << 1LL * x * ( 2 * x + 1 ) - pinex(nr) << "\n";
}
return 0;
}