Pagini recente » Cod sursa (job #2834766) | Cod sursa (job #2991269) | Cod sursa (job #1907232) | Cod sursa (job #1386720) | Cod sursa (job #3288468)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
const int MOD = 1e9 + 7, MAXA = 1001;
int main() {
int n;
fin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++)
fin >> v[i];
vector<int> cmmdp(MAXA);
iota(cmmdp.begin(), cmmdp.end(), 0);
for (int i = 2; i * i < MAXA; i++) {
if (cmmdp[i] == i) {
for (int j = i * i; j < MAXA; j += i) {
if (cmmdp[j] == j) {
cmmdp[j] = i;
}
}
}
}
vector<int> mu(MAXA);
mu[1] = 1;
for (int d = 2; d < MAXA; d++) {
int x = d, div = 0;
bool sq = false;
while (x != 1) {
int p = cmmdp[x], cnt = 0;
while (x % p == 0) {
x /= p;
cnt++;
}
if (cnt > 1) {
sq = true;
break;
}
div++;
}
if (sq)
mu[d] = 0;
else
mu[d] = (div % 2 == 0) ? 1 : -1;
}
vector<int> counter(MAXA, 0);
for (int d = 1; d < MAXA; d++) {
for (int num : v) {
if (num % d == 0) {
counter[d]++;
}
}
}
vector<long long> pow2(n + 1);
pow2[0] = 1;
for (int i = 1; i <= n; i++) {
pow2[i] = (pow2[i - 1] * 2) % MOD;
}
long long rez = 0;
for (int d = 1; d < MAXA; d++) {
if (mu[d] == 0 || counter[d] == 0)
continue;
long long a = (pow2[counter[d]] - 1) % MOD;
a = (a * mu[d]) % MOD;
rez = (rez + a + MOD) % MOD;
}
fout << rez;
return 0;
}