Cod sursa(job #1701565)

Utilizator sucureiSucureiRobert sucurei Data 13 mai 2016 15:23:56
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
# include <bits/stdc++.h>
using namespace std;
ifstream fi("pairs.in");
ofstream fo("pairs.out");
const int nmax = 1e6 + 5;
bitset < nmax > b;
int cnt[nmax];
int s[nmax];
int d[nmax];
int num[nmax];
int main(void)
{
    int n;
    fi>>n;
    long long ans = 0;
    int x;
    int mx = 0;
    for (int i = 1;i <= n;++i)
    {
        fi>>x;cnt[x] = 1;mx = max(mx,x);
    }
    for (int i = 2;i <= mx;++i) b[i] = 1,d[i] = 1;
    for (int i = 2;i*i<=mx;++i)
        if (b[i])
          for (int j = i*i;j <= mx;j += i) b[j] = 0;
    for (int i = 2;i * i <= mx;++i)
        for (int j = i * i;j <= mx;j += i * i) d[j] = 0;
    for (int i = 2;i <= mx;++i)
       if (b[i])
        for (int j = i;j <= mx;j += i) ++num[j];
    for (int i = 2;i <= mx;++i)
    if (d[i])
    {
        int l = 0;
        for (int j = i;j <= mx;j += i) l += cnt[j];
        if (num[i]&1) ans += 1LL * l * (l - 1);
        else ans -= 1LL * l * (l - 1);
    }
    return fo << (1LL * n * (n - 1) - ans) / 2 << '\n',0;
}