Cod sursa(job #1799183)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 5 noiembrie 2016 21:26:53
Problema Sum Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
# include <fstream>
# include <cstring>
# include <bitset>
using namespace std;
ifstream fin("sum.in");
ofstream fout("sum.out");
bitset<500> f;
int d[300],e[15],b[15],n,x,y,i,j,r,k,t,p,nr;
long long sol;
int main () {
    for(i=2;i<=490;i++)
        if(!f[i]){
            d[++k]=i;
            for(j=2*i;j<=490;j+=i)
                f[j]=1;
        }
    fin>>n;
    for(r=1;r<=n;r++){
        sol=0;
        t=0;
        memset(b,0,sizeof(b));
        fin>>x;
        y=x;
        for(i=1;i<=k;i++){
            if(y%d[i]==0)
                e[++t]=d[i];
            while(y%d[i]==0)
                y/=d[i];
        }
        if(y>1)
            e[++t]=y;
        x*=2;
        while(!b[0]){
            j=t;
            while(b[j]==1)
                b[j--]=0;
            b[j]=1;
            p=1;
            nr=0;
            for(i=1;i<=t;i++){
                nr+=b[i];
                if(b[i])
                    p*=e[i];
            }
            if(nr%2==0)
                sol+=1LL*p*(x/p)*(x/p+1)/2;
            else
                sol-=1LL*p*(x/p)*(x/p+1)/2;
        }
        fout<<sol<<"\n";
    }
    return 0;
}