Cod sursa(job #1523760)

Utilizator tudormaximTudor Maxim tudormaxim Data 13 noiembrie 2015 10:23:09
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
using namespace std;
const int nmax = 1000005;
long long v[nmax];
bool exist[nmax];

int main()
{
    ifstream fin ("pairs.in");
    ofstream fout ("pairs.out");
    long long i, j, nr, sol, maxx=0, n, m;
    fin >> n;
    sol=(n*(n-1))>>1;
    for(i=1; i<=n; i++)
    {
        fin >> m;
        exist[m]=true;
        maxx=max(maxx, m);
    }
    for(i=2; i<=maxx; i++)
        if(v[i]==0)
            for(j=i; j<=maxx; j++)
                v[j]++;

    for(i=2; i*i<=maxx; i++)
        for(j=i*i; j<=maxx; j+=i*i)
            v[j]=-1;

    for(i=2; i<=maxx; i++)
        if(v[i]!=-1)
        {
            nr=0;
            for(j=i; j<=maxx; j+=i)
                if(exist[j]) nr++;
            if((v[i]&1)==0) sol+=nr*(nr-1)/2;
            else sol-=nr*(nr-1)/2;
    }
    fout << sol;
    fin.close();
    fout.close();
    return 0;
}