Cod sursa(job #1982437)

Utilizator Robert_VRVRobert Vadastreanu Robert_VRV Data 18 mai 2017 20:10:27
Problema Pairs Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>

using namespace std;

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

int n, f[1000001], v[1000001], c[1000001];
long long maxim;

int main()
{
    fin >> n;
    int nr;
    for (int i=1; i<=n; i++)
    {
        fin >> nr;
        if (nr > maxim)
            maxim = nr;
        f[nr] ++;
    }
    fin.close();
    for (int i=2; i<maxim; i++)
        if (c[i] == 0)
            for (int j=i; j<=maxim; j+=i)
                    c[j] ++;
    for (int i=2; i*i<=maxim; i++)
        for (int j=i*i; j <=maxim; j+=i*i)
            c[j] = -1;
    int res = 0, num;
    for (int i=2; i<=maxim; i++)
        if (c[i] != -1)
        {
            num=0;
            for (int j=i; j <=maxim; j+=i)
                if (f[j] == 1)
                    num ++;
            if (c[i] % 2 == 1)
                res = res + num*(num-1)/2;
            else
                res = res - num*(num-1)/2;
        }

    fout << n*(n-1)/2 - res;
    return 0;
}