Pagini recente » Cod sursa (job #2247828) | Cod sursa (job #2926005) | Cod sursa (job #284182) | Cod sursa (job #820892) | Cod sursa (job #3222672)
#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;
}