Cod sursa(job #2158596)

Utilizator shantih1Alex S Hill shantih1 Data 10 martie 2018 14:17:36
Problema Sum Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define ll long long
using namespace std;
ifstream fin("sum.in");
ofstream fout("sum.out");

ll nrd,z,d,x,rz,a,pt,nrp,s,k[10],f[10],dv[80],i,j,n,r[100005];
bool ciur[330];

void sub(int nv,int p)
{
	if(nv==z+1)
	{
		rz+=p*((i*2/p)*(i*2/p+1)/2)*s;
		return;
	}
	for(int i=k[nv-1]+1;i<=nrp;i++)
	{
		k[nv]=i;
		sub(nv+1,p*f[i]);
	}
}
int main () {
    
	for(i=2;i<=320;i++)
		if(ciur[i]==0)
		{
			nrd++;	dv[nrd]=i;
			r[i]=(2*i)*(2*i+1)/2-3*i;
			for(j=i*i;j<=320;j+=i)	ciur[j]=1;
		}
	
	fin>>a;
	while(a)
	{
		a--;
		fin>>i;
		if(r[i]==0)
		{
			n=i; d=1;
			pt=0; nrp=0;
			while(n!=1&&d<=nrd)
			{
				pt=0;
				while(n%dv[d]==0)
				{	n/=dv[d];	pt++;	}
				if(pt!=0)	
				{	nrp++;	f[nrp]=dv[d];	}
				d++;
			}
			if(n>1)
			{	nrp++;	f[nrp]=n;	}
			
			rz=0;	s=1;
			for(z=1;z<=nrp;z++)
			{
				sub(1,1);
				s*=-1;
			}
			z=i;
			rz=(2*z*(2*z+1)/2)-rz;
			r[i]=rz;
		}
		fout<<r[i]<<"\n";
	}
}