Cod sursa(job #1738722)

Utilizator Bodo171Bogdan Pop Bodo171 Data 7 august 2016 15:50:46
Problema Sum Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
long long memo[100005],sum,p,k,y;
vector<int> v[100005];
int i,n,m,j,x,a[15];
bool used[15];
void bk(int nr)
{
    if(nr>=k+1)
    {
        sum=(((y/p)*(y/p+1))/2)*p;
        if(k%2==0) memo[x]-=sum;
        else memo[x]+=sum;
        return;
    }
    for(int j=a[nr-1]+1;j<m;j++)
    {
        if(!used[j])
        {
            used[j]=1;
            a[nr]=j;
            p*=v[x][j];
            bk(nr+1);
            used[j]=0;
            p/=v[x][j];
        }
    }
}
int main()
{
    ifstream f("sum.in");
    ofstream g("sum.out");
    for(i=2;i<=100000;i++)
        if(v[i].empty())
          for(j=i;j<=100000;j+=i)
            v[j].push_back(i);
    f>>n;
    a[0]=-1;p=1;
    for(i=1;i<=n;i++)
    {
        f>>x;
        if(memo[x]==0)
        {
            y=2*x;
            m=v[x].size();
            for(k=1;k<=m;k++)
            {
                bk(1);
            }
            memo[x]=(y*(y+1))/2-memo[x];
        }
        g<<memo[x]<<'\n';
    }
    return 0;
}