Cod sursa(job #201847)

Utilizator savimSerban Andrei Stan savim Data 4 august 2008 12:24:51
Problema Sum Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <math.h>

int i,j,k,x,v,cop,n,d;
int div[20],ciur[200010];
long long sum;

int main()
{
    freopen("sum.in","r",stdin);
    freopen("sum.out","w",stdout);
    
    scanf("%d",&n);
    for (i=1; i<=n; i++)
    {
        scanf("%d",&x);

        k=0;v=x;
        if (x%2==0)
        {
            div[++k]=2;
            while (x%2==0) x/=2;
        }
        
        while (x>1)
        {
            d=sqrt(x);cop=x;

            for (j=3; j<=d; j+=2)
                if (x%j==0)
                {
                    div[++k]=j;
                    while (x%j==0) x/=j;
                    break;
                }

            if (x==cop) {div[++k]=x;x=1;}
        }

        x=v;
        sum=(long long)x*(2*x+1);

        for (j=1; j<=k; j++)
            for (d=div[j]; d<=2*x; d+=div[j])
            {
                if (ciur[d]!=i) sum-=d;
                ciur[d]=i;
            }

        printf("%lld\n",sum);
    }

    return 0;
}