Pagini recente » Cod sursa (job #2355879) | Cod sursa (job #767981) | Cod sursa (job #2179531) | Cod sursa (job #434972) | Cod sursa (job #215212)
Cod sursa(job #215212)
#include<stdio.h>
int N,nr[1010];
int div[1010];
int put[505][200];
int sol[200];
void diviz(){
int i,j;
for(i=2;i<1001;++i){
if(div[i]==1)
for(j=i;j<1001;j+=i)
div[j]=-10000;
if(div[i]==0){
for(j=i;j<1001;j+=i)
++div[j];
}
}
div[2]=1;
}
void putere(){
int t,i,ss,bb[200];
for(i=0;i<200;++i)
bb[i]=0;
put[0][0]=put[0][1]=1;
bb[0]=bb[1]=1;
for(ss=1;ss<=N;++ss){
for(i=1,t=0;i<=put[ss-1][0] || t;++i,t/=10)
put[ss][i]=(t+=put[ss-1][i]*2)%10;
put[ss][0]=i-1;
for(i=1;i<=put[ss-1][0];++i)
put[ss-1][i]+= (t= (put[ss-1][i]-=bb[i]+t)<0)*10;
for(;put[ss-1][0]>1 && !put[ss-1][put[ss-1][0]];put[ss-1][0]--);
}
for(i=1;i<=put[ss-1][0];++i)
put[ss-1][i]+= (t= (put[ss-1][i]-=bb[i]+t)<0)*10;
for(;put[ss-1][0]>1 && !put[ss-1][put[ss-1][0]];put[ss-1][0]--);
}
int main(){
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
int i,j,x,t;
scanf("%d",&N);
diviz();
putere();
for(i=0;i<N;++i){
scanf("%d",&x);
for(j=2;j<1001;++j)
if(x%j==0 && div[j]>0)
++nr[j];
}
for(i=0;i<=put[N][0];++i)
sol[i]=put[N][i];
for(x=2;x<=1001;++x){
if(div[x]>0 && nr[x]){
if(div[x]%2==1){
for (i = 1,t=0; i <= sol[0]; i++)
sol[i] += (t = (sol[i] -= put[nr[x]][i] + t) < 0) * 10;
for (; sol[0] > 1 && !sol[sol[0]]; sol[0]--);
}
else{
for (i=1,t=0; i<=sol[0] || i<=put[nr[x]][0] || t; i++, t/=10)
sol[i] = (t += sol[i] + put[nr[x]][i]) % 10;
sol[0] = i - 1;
}
}
}
for(i=sol[0];i;--i)
printf("%d",sol[i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}