Pagini recente » Cod sursa (job #2871154) | Cod sursa (job #1914361) | Cod sursa (job #1932265) | Cod sursa (job #2135716) | Cod sursa (job #2311690)
#include <bits/stdc++.h>
#define N 1000005
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
int a[100005], v[N], nr[N];
bool viz[N];
long long 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 / i; 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;
}