Cod sursa(job #2505423)

Utilizator gavra_bogdanBogdan Gavra gavra_bogdan Data 6 decembrie 2019 20:33:20
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax=1e6+5;

long long semn[2]= {-1,1};
bool ciur[nmax];
int nrd[nmax],f[nmax];

long long solve(long long n,long long mx)
{
    long long ans=0,cnt=0;
    for(int i=2;i<=mx;i++)
        if(ciur[i]==false)
        {
            cnt=0;
            for(int j=1; i*j<=mx; j++)
                cnt+=min(f[i*j],1);
            ans+=semn[nrd[i]%2]*cnt*(cnt-1)/(1LL*2);
        }
    return n*(n-1)/(1LL*2)-ans;
}

int main()
{
    ifstream cin("pairs.in");
    ofstream cout("pairs.out");
    long long n,mx=0,x;
    cin>>n;
    ///Ciur
    for(int i=2; i<=nmax; i++)
        if(nrd[i]==0)
            for(int j=1; j*i<=nmax; j++)
            {
                if(j%i==0)
                    ciur[j*i]=1;
                nrd[j*i]++;
            }
    ///Citire
    for(int i=1; i<=n; i++)
    {
        cin>>x;
        f[x]++;
        mx=max(mx,x);
    }
    cout<<solve(n,mx);
    return 0;
}