Pagini recente » Cod sursa (job #2803373) | Cod sursa (job #2150663) | Cod sursa (job #1532203) | Cod sursa (job #471862) | Cod sursa (job #919002)
Cod sursa(job #919002)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define NMAX 1000100
#define pb push_back
typedef long long lol;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
int n, rd;
int sum[NMAX];
vector<int> div;
inline void makeDiv(lol number)
{
div.clear();
lol d = number;
for (lol i = 2; i * i <= number && d > 1; i++)
{
if (d % i == 0)
{
div.pb(i);
while (d % i == 0)
d /= i;
}
}
if (d > 1) div.pb(d);
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> rd;
makeDiv(rd);
int size = div.size();
for (int i = 1; i < (1 << size); i++)
{
int num = 1, sign = -1;
for (int j = 0; j < size; j++)
if (i & (1 << j))
num = num * div[j], sign = -sign;
sum[num] += sign;
}
}
lol sol = 1LL * n * (n - 1) / 2;
for (int i = 2; i < NMAX; i++)
if (sum[i] < 0)
sol = sol - (1LL * sum[i] * (sum[i] + 1) / 2);
else
sol = sol - (1LL * sum[i] * (sum[i] - 1) / 2);
fout << sol << '\n';
fout.close();
return 0;
}