Cod sursa(job #169247)

Utilizator nusmaibunkeleviprofesor cicalescu nusmaibunkelevi Data 1 aprilie 2008 14:38:43
Problema Sum Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>
#define	NMAX	10000L



int main()
{
unsigned long int n,x,y,i,v[NMAX],fp[100],k,d,j,sp,c,pfp;
unsigned long long int st;
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
scanf("%lu",&n);
for(i=0;i<n;i++) scanf("%lu",&v[i]);
for(i=0;i<n;i++){
	x=v[i];
	st=(unsigned long long)x*(2*x-1);
	k=0;
	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=0;j<k;j++){
		c=v[i]/fp[j];
		sp=fp[j]*c*(2*c-1);
		st-=sp;
		}
	if(k>1){
		pfp=1;
		for(j=0;j<k;j++) pfp*=fp[j];
		j=0;
		while(pfp>1&&j<k-1){
					c=v[i]/pfp;
					sp=pfp*c*(2*c-1);
					st+=sp;
					pfp/=fp[j];
					j++;
					}
		}
	printf("%llu\n",st);
	}
return 0;
}