Cod sursa(job #2515985)

Utilizator betybety bety bety Data 29 decembrie 2019 22:17:48
Problema Pairs Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <map>
using namespace std;
ifstream in("pairs.in");
ofstream out("pairs.out");
map<int,int> m;
const int lim=1e6+3;
int nrdiv[lim];
int kk[lim];
int main()
{
    long long int sol=0;
    int n,a,maxx=-1;
    in>>n;
    for(int i=1; i<=n; ++i)
    {
        in>>a;
        m[a]=1;
        if(a>maxx)
            maxx=a;
    }
    for(int i=2; i<=maxx; ++i)
    {
        for(int j=i; j<=maxx; j+=i)
        {
            nrdiv[j]++;
            if(nrdiv[i]==1 and (j/i)%i!=0)
                kk[j]++;
            else if(nrdiv[i]==1 and (j/i)%i==0)
                kk[j]=3-0x7ffffff;
        }
        int cnt=0;
        for(int j=i; j<=maxx; j+=i)
            if(m[j]==1)
                cnt++;
        if(kk[i]>=0)
        {
            if(kk[i]%2==1)
                sol+=1LL*((cnt*(cnt-1))>>1);
            else
                sol-=1LL*((cnt*(cnt-1))>>1);
        }

        //sol+=1LL*((1-kk[i])*((cnt*(cnt-1))>>1));
    }
    out<<((n*(n-1))>>1)-sol;
    return 0;
}