Cod sursa(job #2310221)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 30 decembrie 2018 20:29:52
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
int a[100005],v[1000005],maxim,nrc,nr[1000005];
bool viz[1000005];
long long rez,n,b[1000005];
int main()
{
    int i,j;
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>a[i];
        viz[a[i]]=1;
        if(a[i]>maxim)
        {
            maxim=a[i];
        }
    }
    for(i=2;i<=maxim;i++)
    {
        for(j=i;j<=maxim;j=j+i)
        {
            if(viz[j]==1)
            {
                b[i]++;
            }
        }
    }
    for(i=1;i<=maxim;i++)
    {
        nr[i]=1;
    }
    for(i=2;i*i<=maxim;i++)
    {
        for(j=2;j<=maxim/i;j++)
        {
            nr[i*j]=nr[i]+nr[j];
        }
    }
    for(i=2;i<=maxim;i++)
    {
        if(nr[i]==1 && i<=1000)
        {
            v[i*i]=1;
        }
        if(v[i]==1)
        {
            for(j=2;j<=maxim/i;j++)
            {
                v[i*j]=2;
            }
        }
    }
    rez=n*(n-1)/2;
    for(i=2;i<=maxim;i++)
    {
        if(v[i]==0)
        {
            if(nr[i]%2==0)
            {
                rez=rez+b[i]*(b[i]-1)/2;
            }
            else
            {
                rez=rez-b[i]*(b[i]-1)/2;
            }
        }
    }
    g<<rez;
    return 0;
}