Cod sursa(job #2136285)

Utilizator TudoseSanzianaTudose Sanziana TudoseSanziana Data 19 februarie 2018 20:11:14
Problema Pairs Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>
using namespace std;

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

const int M_MAX = 1000000;

int n;

long long ans;
bool frecv[M_MAX + 2];
int mult[M_MAX + 2], primeDivs[M_MAX + 2];

void ciur()
{
    for(int i = 2; i <= M_MAX; i++)
        if(!primeDivs[i])
        {
            primeDivs[i] = 1;
            for(int j = 2 * i; j <= M_MAX; j += i)
                primeDivs[j]++;
        }

    for(int i = 2; i * i <= M_MAX; i++)
        for(int j = i * i; j <= M_MAX; j += i * i)
            primeDivs[j] = 0;
}

int main()
{
    ciur();

    in >> n;
    for(int i = 1; i <= n; i++)
    {
        int x;
        in >> x;
        frecv[x] = true;
    }

    for(int i = 2; i <= M_MAX; i++)
        for(int j = i; j <= M_MAX; j += i)
            mult[i] += frecv[j];

    ans = n * (n - 1) / 2;
    for(int i = 2; i <= M_MAX; i++)
        if(primeDivs[i])
        {
            long long semn;
            semn = (primeDivs[i] % 2 ? -1 : 1);

            ans += semn * mult[i] * (mult[i] - 1) / 2;
        }

    out << ans << '\n';

    return 0;
}