Pagini recente » Istoria paginii runda/alabala/clasament | Cod sursa (job #536968) | Cod sursa (job #1845046) | Cod sursa (job #1348534) | Cod sursa (job #2465684)
#include <bits/stdc++.h>
#define NMAX 1000009
#define ll long long
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
bitset <NMAX> este, fact;
ll ciur[NMAX];
ll n, x, maxim;
ll ans;
int main()
{
f >> n;
for(int i = 1; i <= n; ++i)
{
f >> x;
maxim = max(maxim, x);
este[x] = 1;
}
for(int i = 2; i <= maxim; ++i)
if(!ciur[i])
{
for(int j = i; j <= maxim; j += i)
{
ciur[j]++;
if(j % (i * i) == 0)
fact[j] = 1;
}
}
for(int i = 2; i <= maxim; ++i)
if(fact[i] == 0)
{
ll cat = 0;
for(int j = i; j <= maxim; j += i)
cat += (este[j] == true );
if(ciur[i] % 2 == 1)
ans += cat * (cat - 1) /2;
else
ans -= cat * (cat - 1) /2;
}
g << n * (n - 1) / 2 - ans;
f.close();
g.close();
return 0;
}