Pagini recente » Cod sursa (job #2901887) | Cod sursa (job #873877) | Cod sursa (job #1789217) | Cod sursa (job #1747630) | Cod sursa (job #1946345)
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <fstream>
using namespace std;
FILE * fin=fopen("pairs.in","r");
FILE * fout=fopen("pairs.out","w");
bool v[1000005], p[1000005];
int n, maxim, nr, nrprime, prime[100005];
void ciur();
int ok(int x);
int main()
{
int i, j, x, aux, rez=0;
fscanf(fin, "%d", &n);
for (i = 1; i <= n; i++)
{
fscanf(fin, "%d", &x);
v[x] = 1;
if (x > maxim)
maxim = x;
}
ciur();
for (i = 2; i <= maxim; i++)
{
nr = 0;
for (j = i; j <= maxim; j += i)
nr += v[j];
aux = ok(i);
if (!aux)
continue;
if (aux % 2) //
rez += nr*(nr - 1) / 2;
else
rez -= nr*(nr - 1) / 2;
}
fprintf(fout, "%d\n", rez);
return 0;
}
void ciur()
{
long long i, j;
prime[++nrprime] = 2;
for (i = 4; i <= maxim; i += 2)
p[i] = 1;
for (i=3;i<=maxim;i++)
if (!p[i])
{
prime[++nrprime] = i;
for (j = i*i; j <= maxim; j += i)
p[j] = 1;
}
}
int ok(int x)
{
int i, rez=0;
i = 1;
while (x > 1)
{
if (x%prime[i])
i++;
else
{
rez++;
x /= prime[i];
if (x%prime[i] == 0)
return 0;
i++;
}
}
return rez;
}