Pagini recente » Cod sursa (job #225927) | Cod sursa (job #1334511) | Cod sursa (job #914657) | Cod sursa (job #2231492) | Cod sursa (job #2515520)
#include <fstream>
#include <iostream>
#define dim 501
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
int n,M,i,j,k,d,e,x,v[dim],p2[dim][2*dim],fact[2*dim],cnt[2*dim],m,nr;
bool ok;
int par[2*dim],impar[2*dim];
void ad(int a[], int b[], int c[]){
int t=0;
c[0]=max(a[0],b[0]);
for(int i=1;i<=c[0];i++){
c[i]=a[i]+b[i]+t;
t=c[i]/10;
c[i]%=10;
}
if(t)
c[++c[0]]=t;
}
void scad(int a[], int b[]){
for(int i=b[0]+1;i<=a[0];i++)
b[i]=0;
int t=0;
for(int i=1;i<=a[0];i++){
a[i]-=b[i]+t;
if(a[i]<0){
t=1;
a[i]+=10;
}else
t=0;
}
while(a[a[0]]==0)
a[0]--;
}
void af(int v[]){
for(int i=v[0];i;i--)
cout<<v[i];
cout<<"\n";
}
int main(){
fin>>n;
for(i=1;i<=n;i++){
fin>>v[i];
M=max(M,v[i]);
}
p2[0][0]=p2[0][1]=1;
for(i=1;i<=n;i++){
ad(p2[i-1],p2[i-1],p2[i]);
p2[i-1][1]--;
}
p2[n][1]--;
// for(i=0;i<=11;i++)
// af(p2[i]);
for(i=2;i<=M;i++){
x=i;
ok=1;
nr=0;
for(d=2;x!=1;d++){
if(x%d!=0)
continue;
e=0;
while(x%d==0){
x/=d;
e++;
}
if(e>1){
ok=0;
break;
}
nr++;
}
if(ok){
m++;
fact[m]=i;
cnt[m]=nr;
}
}
// for(i=1;i<=m;i++)
// cout<<fact[i]<<" "<<cnt[i]<<"\n";
par[0]=impar[0]=1;
for(i=1;i<=m;i++){
nr=0;
for(j=1;j<=n;j++)
if(v[j]%fact[i]==0)
nr++;
if(cnt[i]%2)
ad(impar,p2[nr],impar);
else
ad(par,p2[nr],par);
}
scad(impar,par);
scad(p2[n],impar);
if(p2[n][0]<=0)
fout<<0;
else{
while(p2[n][0])
fout<<p2[n][p2[n][0]--];
}
return 0;
}