Cod sursa(job #2261069)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 15 octombrie 2018 21:37:51
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
long long i,n,a,j,maxi;
long long sol,nr;
int v[1000001],d[1000001];

int main()
{
    fin>>n;
    sol=n*(n-1)/2;
    for(i=1;i<=n;i++)
    {
        fin>>a;
        maxi=max(maxi,a);
        v[a]=1;
    }
    for(i=2;i<=maxi;i++)
        if(d[i]==0)
            for(j=i;j<=maxi;j+=i)
                d[j]++;
    for(i=2;i*i<=maxi;i++)
        for(j=i*i;j<=maxi;j+=i*i)
            d[j]=-1;
    for(i=2;i<=maxi;i++)
        if(d[i]!=-1)
        {
            nr=0;
            for(j=i;j<=maxi;j+=i)
                if(v[j])nr++;
            if(d[i]%2==0)
                sol+=nr*(nr-1)/2;
            else
                sol-=nr*(nr-1)/2;
        }
    fout<<sol;
    fin.close();
    fout.close();
    return 0;
}