Cod sursa(job #2306721)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 22 decembrie 2018 20:01:43
Problema Sum Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>
using namespace std;
int fact[15];
int main()
{
    freopen("sum.in","r",stdin);
    freopen("sum.out","w",stdout);
    int k,n,i;
    scanf("%d",&k);
    for(i=1;i<=k;i++)
    {
        scanf("%d",&n);
        int d=2,e=0;
        long long sum=0;
        int cn=n,c1=0;
        while(d*d<=n)
        {
            e=0;
            while(n%d==0)
            {
                n/=d;
                e++;
            }
            if(e)fact[++c1]=d;
            d++;
        }
        if(n>1)
            fact[++c1]=n;
        n=cn;
        int cnt=0,tot=1<<c1,j;
        for(j=1;j<tot;j++)
        {
          int cnt1=0,prod=1,s;
          for(s=0;s<c1;s++)
            if(j&(1<<s))
          {
              cnt1++;
              prod*=fact[s+1];
          }
          if(cnt1&1)
            cnt+=n/prod,sum+=1LL*prod*(n/prod)*(n/prod+1)/2;
          else
            cnt-=n/prod,sum-=1LL*prod*(n/prod)*(n/prod+1)/2;
        }
        sum=1LL*n*(n+1)/2-sum;
        cnt=n-cnt;
        sum*=2;
        sum+=1LL*n*cnt;
        printf("%lld\n",sum);
    }
    return 0;
}