Cod sursa(job #2438772)

Utilizator PatrickCplusplusPatrick Kristian Ondreovici PatrickCplusplus Data 13 iulie 2019 19:11:01
Problema Pairs Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("pairs.in");
ofstream fout("pairs.out");

int n, x, maxi, ciur[1000002], rez;
bool ok[1000002], isInArray[1000002];

int main()
{
    fin >> n;
    for (int i = 1; i <= n; ++i)
    {
        fin >> x;
        isInArray[x] = true;
        maxi = max(maxi, x);
    }
    for (int i = 2; i <= maxi; ++i)
    {
        if (!ciur[i])
        {
            for (int j = i; j <= maxi; j += i)
            {
                ++ciur[j];
                if (j % (i * i) == 0)
                    ok[j] = true;
            }
        }
    }
    for (int i = 2; i <= maxi; ++i)
    {
        if (!ok[i])
        {
            int d = 0;
            for (int j = i; j <= maxi; j += i)
            {
                if (isInArray[j]) ++d;
            }
            if (ciur[i] % 2 == 1) rez = rez + 1LL * (d * (d - 1)) / 2;
            else rez = rez - 1LL * (d * (d - 1)) / 2;

        }
    }
    fout << 1LL * (n * (n - 1)) / 2 - rez;
    fin.close();
    fout.close();
    return 0;
}