Pagini recente » Cod sursa (job #1528713) | Cod sursa (job #428957) | Cod sursa (job #404804) | Cod sursa (job #1870633) | Cod sursa (job #478425)
Cod sursa(job #478425)
#include <stdio.h>
#include <string.h>
#define Nmax 502
#define Vmax 1002
#define Cmax 305
#define B 1000000
int p2[Nmax][Cmax],rez[Cmax];
int a[Nmax];
int n;
inline int Maxim(int x,int y){ return x>y ? x:y; }
void adun(int a[],int b[]){
int i,t=0;
for(i=1; i<=a[0] || i<=b[0] || t; ++i,t/=B)
a[i]=(t+=a[i]+b[i])%B;
a[0]=i-1;
}
void scad(int a[],int b[]){
int i,t=0;
for(i=1; i<=a[0]; ++i){
a[i]=a[i]-b[i]-t;
if( a[i]<0 ) a[i]+=B, t=1;
else t=0;
}
while( !a[a[0]] ) --a[0];
}
void mul(int a[],int b){
int i,t=0;
for(i=1; i<=a[0] || t; ++i,t/=B)
a[i]=(t+=a[i]*b)%B;
a[0]=i-1;
}
int main(){
int i,j,nr,aux,d,fp,mx=0;
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i) scanf("%d",&a[i]),mx=Maxim(a[i],mx);
p2[0][0]=p2[0][1]=1;
for(i=1;i<=n;++i){
memcpy(p2[i],p2[i-1],sizeof(p2[i-1]));
mul(p2[i],2);
}
for(i=1;i<=n;++i) scad(p2[i],p2[0]);
p2[0][0]=p2[0][1]=0;
memcpy(rez,p2[n],sizeof(p2[n]));
for(i=2;i<=mx;++i){
aux=i;
if(aux % 2==0){
fp=1;
if( (aux/2) % 2 ==0 ) continue;
}
else fp=0;
for(d=3;d<=aux;d+=2)
if( aux % d==0 ){
++fp;
if( (aux/d)%d==0) continue;
}
for(nr=0,j=1;j<=n;++j)
if( a[j] % i == 0 ) nr++;
if( nr == 0 ) continue;
if( fp & 1 ) scad(rez,p2[nr]);
else adun(rez,p2[nr]);
}
printf("%d",rez[rez[0]]);
for(i=rez[0]-1; i>=1; --i) printf("%06d",rez[i]);
fclose(stdin); fclose(stdout);
return 0;
}