Pagini recente » Cod sursa (job #355714) | Cod sursa (job #2611227) | Cod sursa (job #1831543) | Cod sursa (job #1014849) | Cod sursa (job #1404428)
#include <stdio.h>
#define MAXK 6
#define MAXM 266400
#define MAX 100000
int c[MAX+1], val[MAXM+1], next[MAXM+1], lista[MAX+1], d[MAXK];
inline void shmenPetrescu(){
int i, j, m;
m=0;
for(i=2; i<=MAX; i++){
if(c[i]==0){
for(j=i; j<=MAX; j+=i){
c[j]=1;
val[++m]=i;
next[m]=lista[j];
lista[j]=m;
}
}
}
//printf("%d\n", m);
}
inline long long gauss(long long x){
return x*(x+1)/2LL;
}
int main(){
int n, q, k, p, e, prod, i, j, sum;
FILE *fin, *fout;
fin=fopen("sum.in", "r");
fout=fopen("sum.out", "w");
shmenPetrescu();
fscanf(fin, "%d", &q);
while(q>0){
q--;
fscanf(fin, "%d", &n);
k=0;
p=lista[n];
while(p!=0){
d[k++]=val[p];
p=next[p];
}
sum=gauss(2*n);
for(i=1; i<(1<<k); i++){
prod=1;
e=0;
for(j=0; j<k; j++){
if(i&(1<<j)){
e++;
prod*=d[j];
}
}
if(e%2==0){
sum+=1LL*prod*gauss(2*n/prod);
}else{
sum-=1LL*prod*gauss(2*n/prod);
}
}
fprintf(fout, "%d\n", sum);
}
fclose(fin);
fclose(fout);
return 0;
}