Pagini recente » Cod sursa (job #2915503) | Cod sursa (job #3168029) | Cod sursa (job #2733677) | Cod sursa (job #368422) | Cod sursa (job #3260735)
#include <fstream>
#include <set>
#include <vector>
using namespace std;
const int NMAX = 500;
using ll = long long;
#define int ll
ifstream cin("indep.in");
ofstream cout("indep.out");
int v[NMAX + 2];
set <int> s;
vector <int> d;
signed main()
{
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> v[i];
int a = v[i], div = 2;
while(div * div <= a) {
int exp = 0;
while(a % div == 0) {
a /= div;
exp++;
}
if(exp > 0)
s.insert(div);
div++;
}
if(a > 1)
s.insert(a);
}
for(auto x : s)
d.push_back(x);
int ans = 0;
for(int mask = 1; mask < (1 << d.size()); mask++) {
int div = 1, nrbiti = 0;
for(int i = 0; i < d.size(); i++) {
if(mask & (1 << i)) {
nrbiti++;
div *= d[i];
}
}
int cnt = 0;
for(int i = 1; i <= n; i++) {
if(v[i] % div == 0)
cnt++;
}
int sum = (1 << cnt) - 1;
if(nrbiti % 2)
ans += sum;
else
ans -= sum;
}
ans = ((1 << n) - 1) - ans;
cout << ans;
return 0;
}