Cod sursa(job #170623)

Utilizator nusmaibunkeleviprofesor cicalescu nusmaibunkelevi Data 2 aprilie 2008 22:54:09
Problema Sum Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<stdio.h>
#define	NMAX	100000L



int main()
{
unsigned long long n,x,y,i,v[NMAX],fp[100],k,d,j,sp,c,pfp,r,ii,cc,sc;
unsigned long long st;
freopen("sum.in","r",stdin);
FILE *fout=fopen("sum.out","w");
scanf("%llu",&n);
for(i=0;i<n;i++) scanf("%llu",&v[i]);
for(i=0;i<n;i++){
	x=v[i];
	st=x*(2*x+1);
	fp[0]=0;
	k=1;
	if(x%2==0) {fp[k++]=2;while(x%2==0) x/=2;}
	for(d=3;d<=x;d=d+2)
		if(x%d==0) {fp[k++]=d;while(x%d==0) x/=d;}
	for(j=1;j<k;j++){
		c=v[i]/fp[j];
		sp=fp[j]*c*(2*c+1);
		for(ii=1;ii<j;ii++){
			cc=c/fp[ii];
			sc=fp[j]*fp[ii]*cc*(2*cc+1);
			sp-=sc;
			}
		st-=sp;
		}
	fprintf(fout,"%llu\n",st);
	}
fclose(fout);
return 0;
}