Cod sursa(job #2558879)

Utilizator marinaoprOprea Marina marinaopr Data 26 februarie 2020 20:58:27
Problema Pairs Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <stdio.h>
#include <vector>

using namespace std;

FILE *fin = fopen("pairs.in", "r");
FILE *fout = fopen("pairs.out", "w");

vector <int> a[100005];

int n,i,x,d,nrfact[100005],prod,fr[1000005],val,j,k,nr;
long long ans;

int main()
{
    fscanf(fin, "%d", &n);
    for(i=1; i<=n; ++i)
    {
        fscanf(fin, "%d", &x);

        if(x%2 == 0)
        {
            a[i].push_back(2);
            nrfact[i]++;
            while(x%2 == 0)
                x /= 2;
        }

        d = 3;
        while(x > 1)
        {
            if(x%d == 0)
            {
                a[i].push_back(d);
                ++nrfact[i];
                while(x%d == 0)
                    x /= d;
            }
            d += 2;
        }//while
    }

    for(i=1; i<=n; ++i)
    {
        val = 1<<(nrfact[i]) - 1;

        for(j=1; j<=val; ++j)
        {
            prod = 1;
            nr = 0;
            for(k=0; k<=7; ++k)
                if(j & (1<<k))
                {
                    prod *= a[i][k];
                    ++nr;
                }
            fr[prod]++;
            if(nr%2)
                ans += (fr[prod]-1);
            else
                ans -= (fr[prod]-1);
        }//for j
    }

    ans = 1LL*n*(n-1)/2 - ans;
    fprintf(fout, "%d", ans);

    fclose(fin);
    fclose(fout);
    return 0;
}