Pagini recente » Cod sursa (job #2204377) | Cod sursa (job #856634) | Cod sursa (job #573930) | Cod sursa (job #2909010) | Cod sursa (job #2642234)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int MAXCF = 350;
const int VMAX = 1000;
const int NMAX = 500;
const int BASE = 10000;
int frecv[VMAX + 5], nr_multipli[VMAX + 5];
int verif[VMAX + 5], nr_div[VMAX + 5];
long long p2[NMAX + 5];
void precalc() {
for(int i = 1; i <= VMAX; i++)
verif[i] = 1;
for(int i = 2; i <= VMAX; i++)
if(verif[i] == 1)
for(int j = i; j <= VMAX; j += i) {
verif[j] *= i;
nr_div[j]++;
}
}
int main() {
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
int n, x, maxim = 0;
precalc();
scanf("%d", &n);
p2[0] = 1;
for(int i = 1; i <= n; i++) {
p2[i] = p2[i - 1] + p2[i - 1];
scanf("%d", &x);
frecv[x]++;
maxim = max(maxim, x);
}
for(int i = 1; i <= n; i++)
p2[i] -= 1;
for(int i = 2; i <= maxim; i++)
for(int j = i; j <= maxim; j += i)
nr_multipli[i] += frecv[j];
long long sol = p2[n];
for(int i = 2; i <= maxim; i++)
if(verif[i] == i && nr_multipli[i] != 0)
if(nr_div[i] % 2 == 0)
sol += p2[nr_multipli[i]];
else
sol -= p2[nr_multipli[i]];
printf("%lld", sol);
return 0;
}