Cod sursa(job #222189)

Utilizator SheepBOYFelix Liviu SheepBOY Data 20 noiembrie 2008 23:04:04
Problema Sum Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
#include <string.h>

int k,nr,rg,vf[200000],registered[100001];
inline long long GetDivis(int x)
{
	long long sum,upper_lim,lm;
	int i,j;
	sum=0;
	rg=0;
	upper_lim=(x<<1);
	vf[x]=1;
	registered[rg]=x;
	rg++;
	sum+=x;
	vf[upper_lim]=1;
	registered[rg]=upper_lim;
	rg++;
	sum+=upper_lim;
for(i=2;i<=(x>>1);++i)
	if(!(x%i))
	{
		lm=i;
		for(j=1;lm<upper_lim;++j)
		{
			lm=i*j;
			if(!vf[lm]&&lm!=x&&lm!=upper_lim)
			{	
				sum+=lm;
				vf[lm]=1;
				registered[rg]=lm;
				rg++;
			}
		}
			
	}
	/*for(i=0;i<rg;i++)
		vf[registered[i]]=0;
	*/
	memset(vf,0,200001);
	if(!(upper_lim&1))
		upper_lim=(upper_lim>>1)*(upper_lim+1);
	else
		upper_lim=upper_lim*((upper_lim+1)>>1);
	return upper_lim-sum;
}
int main()
{
	int n,x;
	freopen("sum.in","r",stdin);
	freopen("sum.out","w",stdout);
	scanf("%d",&n);
	k=1;
	while(n)
	{
		scanf("%d",&x);
		printf("%lld\n",GetDivis(x));
		k++;
		n--;
	}
	return 0;
}