Cod sursa(job #2151407)

Utilizator Daria09Florea Daria Daria09 Data 4 martie 2018 14:05:14
Problema Pairs Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
int nrprim[NMAX*10],n,a[NMAX],MAX;
long long ans;
bool fr[NMAX*10];
void read()
{
    f>>n;
    for(int i=1; i<=n; i++)
    {
        f>>a[i];
        MAX=max(a[i],MAX);
        fr[a[i]]=1;
    }
    f.close();
}
void ciur()
{
    nrprim[2]=1;
    for(int i=4; i<=1000000; i+=2)
        nrprim[i]++;
    for(int i=3; i<=1000000; i+=2)
        if(nrprim[i]==0)
        {
            nrprim[i]=1;
            for(int j=2*i; j<=1000000; j+=i)
                nrprim[j]++;
        }
    for(int i=2; i*i<=1000000; i++)
        for(int j=i*i; j<=1000000; j+=i*i)
            nrprim[j]=0;
}
void solve()
{
    for(int i=2; i<=MAX; i++)
        if(nrprim[i]>=1)
        {
            int nr=0;
            for(int j=i; j<=MAX; j+=i)
                nr+=fr[j];
            if(nrprim[i]%2==0)
                ans=ans-1LL*nr*(nr-1)/2;
            else
                ans=ans+1LL*nr*(nr-1)/2;
        }
    ans=n*(n-1)/2-ans;
    g<<ans;
}
int main()
{
    read();
    ciur();
    solve();
    return 0;
}