Pagini recente » Cod sursa (job #548479) | Cod sursa (job #2656307) | Cod sursa (job #3230012) | Cod sursa (job #1945463) | Cod sursa (job #2311683)
#include <bits/stdc++.h>
#define N 1000010
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
long long a[N], v[N], nr[N], viz[N], b[N];
int main()
{
long long i, j, maxi = 0, n, rez;
f>>n;
for(i = 1;i <= n; i++)
{
f>>a[i];
viz[a[i]] = 1;
if (a[i] > maxi) maxi = a[i];
}
for (i = 2; i <= maxi; i++)
for (j = i; j <= maxi; j+= i)
{
if(viz[j] == 1) b[i]++;
}
for (i = 1; i <= maxi; i++) nr[i] = 1;
for (i = 2; i * i <= maxi; i++)
for (j = 2; j <= maxi / i; j++)
nr[i * j] = nr[i] * nr[j];
for (i = 2; i <= maxi; i++)
{
if(nr[i] == 1 && i <= 1000)
v[i * i] = 1;
if(v[i] == 1)
{
for (j = 2; j <= maxi; j++)
v[i * j] = 2;
}
}
rez = n * (n - 1) / 2;
for (i = 2; i <= maxi; i++)
{
if(v[i] == 0)
{
if(nr[i] % 2 == 0)
{
rez = rez + b[i] * (b[i] - 1) / 2;
}
else rez = rez - b[i] * (b[i] - 1) / 2;
}
}
g<<rez;
return 0;
}