Cod sursa(job #3222672)

Utilizator SSKMFSS KMF SSKMF Data 11 aprilie 2024 11:15:33
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
using namespace std;

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

int mobius[1000001] , aparitii[1000001];

int main ()
{
    int lungime;
    cin >> lungime;

    for (int valoare ; lungime-- ; )
        { cin >> valoare; aparitii[valoare]++; }
    
    mobius[1] = -1;
    int64_t numar_perechi = 0;
    for (int valoare = 1 ; valoare <= 1000000 ; valoare++) {
        if (mobius[valoare]) 
        {
            mobius[valoare] *= -1;
            int factor = aparitii[valoare];
            for (int multiplu = (valoare << 1) ; multiplu <= 1000000 ; multiplu += valoare)
                { factor += aparitii[multiplu]; mobius[multiplu] += mobius[valoare]; }

            numar_perechi += mobius[valoare] * (int64_t)factor * (factor - 1) / 2;
        }
    }

    cout << numar_perechi;
    cout.close(); cin.close();
    return 0;
}