Pagini recente » Cod sursa (job #176951) | Cod sursa (job #314912) | Cod sursa (job #2042271) | Istoria paginii utilizator/pufosenia_09 | Cod sursa (job #629636)
Cod sursa(job #629636)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi ("pairs.in");
ofstream fo ("pairs.out");
const int DIM = 1000005;
vector <int> V[DIM];
bool ap[DIM], ciurv[DIM];
int D[DIM], valmax, N;
long long S;
void cit ()
{
fi >> N;
for (int i = 1, x; i <= N; i++)
{
fi >> x;
if (ap[x] == 1)
{
i--, N--;
continue;
}
ap[x] = 1;
valmax = max (valmax, x);
}
}
void ciur ()
{
int i, j, x;
for (i = 2; i <= valmax; i++)
{
for (j = i; j <= valmax; j += i)
{
D[i] += ap[j];
ciurv[j] = 1;
if (i == j)
ciurv[i] = 0;
if (ciurv[i] == 0)
V[j].push_back (i);
}
x = i;
for (j = 0; j < V[i].size(); j++)
x /= V[i][j];
while ( !V[i].empty () )
V[i].pop_back ();
if (x != 1)
continue;
x = (long long) D[i] * (D[i] - 1) / 2;
if (j & 1)
S += x;
else
S -= x;
}
}
void afi ()
{
fo << (long long) N * (N - 1) / 2 - S;
}
int main ()
{
cit ();
ciur ();
afi ();
return 0;
}