Pagini recente » Cod sursa (job #1622988) | Cod sursa (job #831192) | Cod sursa (job #1401590) | Cod sursa (job #2069715) | Cod sursa (job #2985896)
#include <fstream>
#include <queue>
#include <vector>
#include <climits>
using namespace std;
const int VMAX = 1000000;
int f[VMAX + 1];
int mob[VMAX + 1];
int main()
{
ifstream cin("pairs.in");
ofstream cout("pairs.out");
int n, i, j;
cin >> n;
int mx = 0;
for (i = 1; i <= n; i++)
{
int x;
cin >> x;
f[x]++;
mx = max(mx, x);
}
mob[1] = 1;
long long ans = 0;
for (i = 2; i <= mx; i++)
{
mob[i]--;
for (j = 2 * i; j <= mx; j += i)
mob[j] -= mob[i];
int nr = 0;
long long pairs = 0;
for (j = i; j <= mx; j += i)
{
nr += f[j];
}
for (j = i; j <= mx; j += i)
if (f[j])
{
pairs += nr - f[j];
nr -= f[j];
}
ans += -pairs * mob[i];
}
// for (i = 2; i <= mx; i++)
// cout << mob[i] << " ";
long long total = 0;
int numero = n;
for (i = 1; i <= mx; i++)
if (f[i])
{
total += numero - f[i];
numero -= f[i];
}
cout << total - ans;
}