Cod sursa(job #2564070)

Utilizator adiaioanaAdia R. adiaioana Data 1 martie 2020 17:29:34
Problema Pairs Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#define NMAX 1000000
using namespace std;
ifstream cin("pairs.in");
ofstream cout("pairs.out");
bool ok[NMAX+10];
int nr[NMAX+10], nrd[NMAX+10], N, val;
inline void kindaciur()
{
    for(int d=4; d<=NMAX; d+=2)
        if(ok[d])
            nr[2]++, nrd[d]++, nr[d]++;
    for(int d=3; d*d<=NMAX; ++d)
        if(nrd[d]==0)
        {
            if(ok[d])
                nr[d]++;
            for(int j=d*2; j<=NMAX; j+=d)
                if(ok[j])
                    nrd[j]++, nr[d]++, nr[j]++;
        }
}
int main()
{
    cin>>N;
    for(int i=1; i<=N; ++i)
    {
        cin>>val;
        ok[val]=1;
    }
    kindaciur();
    long long ans=(N*(N-1)/2);
    for(int i=1; i<=NMAX; ++i)
        if(nr[i])
        {
            if(nrd[i]%2==0)
                ans-=(nr[i]*nr[i-1])/2;
            else ans+=(nr[i]*nr[i-1])/2;
        }
    cout<<ans<<'\n';
    return 0;
}