Pagini recente » Cod sursa (job #2404143) | Cod sursa (job #1471678) | Cod sursa (job #558411) | Cod sursa (job #2829000) | Cod sursa (job #3152793)
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream cin("indep.in");
ofstream cout("indep.out");
#define int long long
const int DIM = 1e3;
int n;
vector<int> v,primes;
bool* sieve;
vector<int> mb(DIM+1,1);
void read() {
cin>>n;
v.resize(n+1);
for(int i=1;i<=n;i++) {
cin>>v[i];
}
}
void constructPrimes() {
sieve = new bool[DIM+1];
sieve[1]=1;
for(int i=2;i*i<=n;i++) {
if(sieve[i]) {
continue;
}
primes.push_back(i);
for(int j=i*i;j<=DIM;j+=i) {
sieve[j]=1;
}
}
}
void build_mb() {
int sq = sqrt(DIM);
for(int i=1;i<=DIM;i++) {
if(sieve[i]) {
continue;
}
for(int j=i;j<=DIM;j+=i) {
mb[j]*=-1;
}
if(i>=sq) {
continue;
}
for(int j=i*i;j<=DIM;j+=i*i) {
mb[j]=0;
}
}
}
void solve() {
constructPrimes();
vector<int> fr_mult(1e3+1);
for(int x=1;x<=1e3;x++) {
for(int i=1;i<=n;i++) {
if(v[i]%x==0) {
fr_mult[x]++;
}
}
}
build_mb();
int rs=0;
for(int x=1;x<=1e3;x++) {
rs+=mb[x] * ((1<<fr_mult[x])-1);
}
cout<<rs;
}
int32_t main() {
read();
solve();
return 0;
}