Cod sursa(job #3219554)

Utilizator AlexSerban21Serban Alexandru AlexSerban21 Data 31 martie 2024 17:14:00
Problema Pairs Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <bitset>
using namespace std;
ifstream fin ("pairs.in");
ofstream fout ("pairs.out");
char ciur[1000001];
int maxim,n,i,v[100001],j,ok,fr[1000001];
long long sol;
bitset <1000001> f;
int main ()
{
    fin>>n;
    for (i=1; i<=n; i++)
    {
        fin>>v[i];
        maxim=max (maxim,v[i]);
        fr[v[i]]=1;
    }
    for (i=2; i<=maxim; i++)
    {
        if (ciur[i]==0)
        {
            ciur[i]=1;
            for (j=i+i; j<=maxim; j+=i)
                ciur[j]++;
        }
    }
    for (i=2; i<=maxim; i++)
    {
        if (f[i]==0)
        {
            for (j=i+i; j<=maxim; j+=i)
                fr[i]+=fr[j];
        }
        if (i<=1000&&ciur[i]==1&&f[i]==0)
        {
            for (j=i*i; j<=maxim; j+=i)
                f[j]=1;
        }
    }
    for (i=2; i<=maxim; i++)
    {
        if (f[i]==0)
        {
            if (ciur[i]%2==0)
                ok=-1;
            else
                ok=1;
            sol+=1ll*ok*fr[i]*(fr[i]-1)/2;
        }
    }
    fout<<sol;
    return 0;
}