Pagini recente » Cod sursa (job #1447521) | Cod sursa (job #3004937) | Cod sursa (job #1018382) | Cod sursa (job #109686) | Cod sursa (job #2408454)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
int n, cn[1010], cp[1010], nrd[1010], maxi, a[510];
long long sol;
long long put(long long a, int n)
{
if(!n) return 1;
if(n & 1) return a * put(a*a, n/2);
return put(a*a, n/2);
}
void ciur()
{
for(int i=2; i<=maxi; i++)
{ if(!cn[i])
{ for(int j=i; j<=maxi; j+=i) cn[j]++;
int k = i * i;
for(int j=k; j<=maxi; j+=k) cp[j] = 1;
}
if(!cp[i])
{ if(cn[i] & 1) sol = sol - (put(1LL * 2, nrd[i]) - 1);
else sol = sol + put(1LL * 2, nrd[i]) - 1;
}
}
}
int main()
{
f >> n;
sol = put(1LL * 2, n) - 1;
for(int i=1; i<=n; i++) f >> a[i], maxi = max(maxi, a[i]);
for(int i=1; i<=n; i++)
{ for(int j=1; j<=a[i]/2; j++)
if(a[i] % j == 0) nrd[j]++;
nrd[a[i]]++;
}
ciur();
g << sol << '\n';
return 0;
}