Cod sursa(job #2465684)

Utilizator petrisorvmyVamanu Petru Gabriel petrisorvmy Data 30 septembrie 2019 18:17:40
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>
#define NMAX 1000009
#define ll long long
using namespace std;

ifstream f("pairs.in");
ofstream g("pairs.out");

bitset <NMAX> este, fact;
ll ciur[NMAX];
ll n, x, maxim;
ll ans;
int main()
{
    f >> n;
    for(int i = 1; i <= n; ++i)
    {
        f >> x;
        maxim = max(maxim, x);
        este[x] = 1;
    }
    for(int i = 2; i <= maxim; ++i)
        if(!ciur[i])
        {
            for(int j = i; j <= maxim; j += i)
            {
                ciur[j]++;
                if(j % (i * i) == 0)
                    fact[j] = 1;
            }
        }
    for(int i = 2; i <= maxim; ++i)
        if(fact[i] == 0)
        {
            ll cat = 0;
            for(int j = i; j <= maxim; j += i)
                cat += (este[j] == true );
            if(ciur[i] % 2 == 1)
                ans += cat * (cat - 1) /2;
            else
                ans -= cat * (cat - 1) /2;
        }
    g << n * (n - 1) / 2 - ans;
    f.close();
    g.close();
    return 0;
}