Pagini recente » Cod sursa (job #545934) | Cod sursa (job #236210) | Cod sursa (job #1184884) | Cod sursa (job #3274780) | Cod sursa (job #3288350)
#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=0;
while(x!=1){
int p=cmmdp[x], cnt=0;
while(x%p==0){
x/=p;
cnt++;
}
if(cnt>1){
sq=1;
break;
}
div++;
}
if(sq)
mu[d]=0;
else if(div%2==0)
mu[d]=1;
else
mu[d]=-1;
//cout<<d<< ' '<<mu[d]<<endl;
}
vector <int> counter(MAXA, 0);
for(int d=1;d<MAXA;d++)
for(int i:v)
if(i%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) continue;
if(counter[d]==0) continue;
long long a=(pow2[counter[d]]-1)%MOD;
a=a*mu[d]%MOD;
rez = (rez + a + MOD) % MOD;
//cout<<a<<' '<<rez<<endl;
}
fout<<rez;
return 0;
}