Pagini recente » Cod sursa (job #1606736) | Cod sursa (job #1493239) | Cod sursa (job #1845641) | Cod sursa (job #794095) | Cod sursa (job #2192744)
#define DM (int) 1e6+1
#define DN (int) 1e5+1
#include <fstream>
#include <vector>
using namespace std;
ifstream fi ("pairs.in");
ofstream fo ("pairs.out");
int n, v[DN], p[DM];
long long tot;
vector <int> dv;
void pinex()
{
int bz = (1 << dv.size()) - 1, msk, aux, pr;
for (msk = 1; msk <= bz; ++msk)
{
aux = 1;
pr = 0;
for (int hlp = 0; hlp < dv.size(); ++hlp)
if (msk & (1<<hlp))
{
++pr;
aux *= p[dv[hlp]] - 1;
}
if (pr&1)
tot += 1LL*aux;
else
tot -= 1LL*aux;
}
}
int main()
{
fi >> n;
for (int i = 1; i <= n; ++i)
fi >> v[i];
for (int i = 1; i <= n; ++i)
for (int j = 1; j*j <= v[i]; ++j)
if (v[i]%j == 0)
{
++p[j];
if (j*j != v[i])
++p[v[i]/j];
}
for (int i = 1; i <= n; ++i)
{
for (int j = 2; j*j <= v[i]; ++j)
{
if (v[i]%j == 0)
dv.push_back(j);
while (v[i]%j == 0)
v[i] /= j;
}
if (v[i] != 1)
dv.push_back(v[i]);
pinex();
dv.clear();
}
fo << tot;
return 0;
}