Pagini recente » Cod sursa (job #611699) | Cod sursa (job #2259775) | Cod sursa (job #749467) | Cod sursa (job #2718323) | Cod sursa (job #594602)
Cod sursa(job #594602)
#include<stdio.h>
int d[1001],n;
int p[502][202],sol[202],s[1001];
void adaug(int x)
{ int k;
if(x==0) return;
for(k=1;k<200;k++)
sol[k]+=p[x][k];
for(k=1;k<199;k++)
sol[k+1]+=sol[k]/10, sol[k]=sol[k]%10;
}
void scad(int x)
{ int k;
if(x==0) return;
for(k=1;k<200;k++)
sol[k]-=p[x][k];
for(k=1;k<199;k++)
{ if(sol[k]<0) sol[k+1]--, sol[k]=10+sol[k]; }
}
void INIT();
void READ()
{
FILE *f;
int i,j,x;
f=fopen("indep.in","r");
fscanf(f,"%d",&n);
INIT();
adaug(n);
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&x);
for(j=2;j<=1000;j++)
if(x%j==0) d[j]++;
}
s[1]=0;
for(x=2;x<=1000;x++)
{
for(j=2;j<x;j++)
if(x%j==0) if((x/j)%j==0) { s[x]=-1; break; }
else { if (s[x/j]==-1) s[x]=-1; else s[x]=(s[x/j]+1)%2; break;}
if(j==x) s[x]=1;
}
fclose(f);
}
void SOLVE()
{ int i,j;
for(i=2;i<=1000;i++)
{
if(d[i]) if (s[i]==0) adaug(d[i]);
else if(s[i]==1) scad(d[i]);
}
}
void PRINT()
{ int k;
FILE *g;
g=fopen("indep.out","w");
k=199;
while(!sol[k] && k>0) k--;
if(k==0) fprintf(g,"0");
while(k>=1) fprintf(g,"%d",sol[k--]);
fprintf(g,"\n");
fclose(g);
}
int main()
{
READ();
SOLVE();
PRINT();
return 0;
}
void INIT()
{ int i,k;
p[0][1]=1;
for(i=1;i<=n;i++)
{
for(k=1;k<200;k++)
p[i][k]=p[i-1][k]*2;
for(k=1;k<199;k++)
p[i][k+1]+=p[i][k]/10, p[i][k]=p[i][k]%10;
}
for(i=0;i<=n;i++)
p[i][1]--;
}