Pagini recente » Cod sursa (job #2122356) | Rating Farcas Cosmin (farcascosmin) | Cod sursa (job #1770949) | Cod sursa (job #997617) | Cod sursa (job #494872)
Cod sursa(job #494872)
#include <fstream>
#include <algorithm>
using namespace std;
int N;
int V[200002], divX[1000002];
int Max;
bool is[1000002], prim[1000002], facP[1000002], can[1000002]; // facP - ma folosesc de overflow.
long long tot;
int main()
{
ifstream fin("pairs.in");
ofstream fout("pairs.out");
fin >> N;
for (int i = 1; i <= N; ++i)
{
fin >> V[i];
is[V[i]] = true;
Max = max(Max, V[i]);
}
divX[1] = N;
for (int i = 2; i <= Max; ++i)
if (!prim[i])
{
divX[i] = is[i];
++facP[i];
for (int j = 2; i * j <= Max; ++j)
{
prim[i * j] = true;
++facP[i * j];
divX[i] += is[i * j];
can[i * j] |= (j % i == 0);
}
}
for (int i = 2; i <= Max; ++i)
if (can[i] == false)
tot += (facP[i] == true ? 1 : -1) * (long long) divX[i] * (long long) (divX[i] - 1) / 2;
fout << (long long)(N * (N - 1) / 2) - tot;
fin.close();
fout.close();
}