Pagini recente » Cod sursa (job #2077995) | Cod sursa (job #1760674) | Cod sursa (job #1385057) | Cod sursa (job #2967048) | Cod sursa (job #87220)
Cod sursa(job #87220)
# include <stdio.h>
const long int MAXN=100000;
long int task[MAXN+1],n,ciur[MAXN],ciurlen;
void citire()
{
FILE *f=fopen("sum.in","r");
fscanf(f,"%ld",&n);
long int i;
for (i=1;i<=n;i++)
fscanf(f,"%ld",&task[i]);
fclose(f);
}
void det_primes()
{
long int prim,i,j;
float bound;
ciur[1]=2;ciurlen=1;
for (i=2;i<=50000;i++)
{
prim=1;
bound=sqrt(i)+1;
for (j=1;j<=ciurlen&&prim&&ciur[j]<=bound;j++)
if (i%ciur[j]==0) prim=0;
if (prim) ciur[++ciurlen]=i;
}
}
long int sigma(long int a) {return a*(a+1)/2;}
long int sign(long int a) {if (a%2==1) return -1; return 1;}
void calculeaza()
{
long int qwd,aux,iaux,nrc,i,siaux,coef,facts[10],factslen=0;
long long int solloc;
FILE *g=fopen("sum.out","w");
for (qwd=1;qwd<=n;qwd++)
{
aux=task[qwd];
iaux=1;
factslen=0;
while (aux!=1)
{
if (aux%ciur[iaux]==0)
{
facts[++factslen]=ciur[iaux];
while (aux%ciur[iaux]==0) aux/=ciur[iaux];
}
iaux++;
}
//avem in factslen descompunerea in factori. acuma sa facem
//includerea si excluderea
solloc=0;
for (iaux=1;iaux<=(1<<factslen)-1;iaux++)
{
siaux=iaux;
//sa determinam coeficientii
for (nrc=0,i=1,coef=1;i<=factslen;i++,siaux/=2)
if (siaux%2==1)
{
coef*=facts[i];
nrc++;
}
solloc+=sign(nrc)*coef*sigma(2*task[qwd]/coef);
}
solloc+=sigma(2*task[qwd]);
fprintf(g,"%lld\n",solloc);
}
fcloseall();
}
int main()
{
citire();
//determinam toate numerele prime pana la 320
det_primes();
calculeaza();
return 0;
}