Pagini recente » Cod sursa (job #1941233) | Cod sursa (job #2956812) | Cod sursa (job #317529) | Cod sursa (job #1193341) | Cod sursa (job #1515148)
#include <fstream>
#define lint long long int
using namespace std;
const int NMAX = 100005;
const int VALMAX = 1000000;
int factor[VALMAX + 5];
int mobius[VALMAX + 5];
inline void erat () {
int j;
for (int i = 2; i <= VALMAX; ++ i)
if (!factor[i])
for (j = i; j <= VALMAX; j += i)
factor[j] = i;
mobius[1] = 1;
for (int i = 2; i <= VALMAX; ++ i)
if (factor[i] != factor[i / factor[i]])
mobius[i] = (-1) * mobius[i / factor[i]];
}
int frecv[VALMAX + 5];
int main()
{
ifstream cin("pairs.in");
ofstream cout("pairs.out");
erat();
int n = 0;
cin >> n;
int val;
for (int i = 1; i <= n; ++ i) {
cin >> val;
++ frecv[val];
}
int j;
for (int i = 1; i <= VALMAX; ++ i)
if (mobius[i])
for (j = 2 * i; j <= VALMAX; j += i)
frecv[i] += frecv[j];
lint ans = 0;
for (int i = 1; i <= VALMAX; ++ i)
if (mobius[i] != 0)
ans += mobius[i] * (frecv[i] * (frecv[i] - 1ll)) / 2;
cout << ans << '\n';
cin.close();
cout.close();
return 0;
}