Pagini recente » Cod sursa (job #2553314) | Cod sursa (job #1611512) | Autentificare | Cod sursa (job #1497502) | Cod sursa (job #1799187)
# include <fstream>
# include <cstring>
# include <bitset>
using namespace std;
class InputReader {
public:
InputReader() {}
InputReader(const char *file_name) {
input_file = fopen(file_name, "r");
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
inline InputReader &operator >>(int &n) {
while(buffer[cursor] < '0' || buffer[cursor] > '9') {
advance();
}
n = 0;
while('0' <= buffer[cursor] && buffer[cursor] <= '9') {
n = n * 10 + buffer[cursor] - '0';
advance();
}
return *this;
}
private:
FILE *input_file;
static const int SIZE = 1 << 17;
int cursor;
char buffer[SIZE];
inline void advance() {
++ cursor;
if(cursor == SIZE) {
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
}
};
bitset<500> f;
int d[300],e[15],b[15],n,x,y,i,j,r,k,t,p,nr;
long long sol;
int main () {
InputReader fin("sum.in");
freopen("sum.out","w",stdout);
for(i=2;i<=490;i++)
if(!f[i]){
d[++k]=i;
for(j=2*i;j<=490;j+=i)
f[j]=1;
}
fin>>n;
for(r=1;r<=n;r++){
sol=0;
t=0;
memset(b,0,sizeof(b));
fin>>x;
y=x;
for(i=1;i<=k;i++){
if(y%d[i]==0)
e[++t]=d[i];
while(y%d[i]==0)
y/=d[i];
}
if(y>1)
e[++t]=y;
x*=2;
while(!b[0]){
j=t;
while(b[j]==1)
b[j--]=0;
b[j]=1;
p=1;
nr=0;
for(i=1;i<=t;i++){
nr+=b[i];
if(b[i])
p*=e[i];
}
if(nr%2==0)
sol+=1LL*p*(x/p)*(x/p+1)/2;
else
sol-=1LL*p*(x/p)*(x/p+1)/2;
}
printf("%lld\n",sol);
}
return 0;
}