Pagini recente » Cod sursa (job #1537318) | Cod sursa (job #97460) | Cod sursa (job #1864699) | Cod sursa (job #2053438) | Cod sursa (job #461053)
Cod sursa(job #461053)
#include <cstdio>
#define nmax 510
#define l 1000
#define lmax 10000
int n, v[nmax], a[nmax], b[l+5][lmax], sol[lmax], t[nmax], h, f[l+5], g[nmax];
void put(int b[lmax], int p)
{
int i, t;
b[0]=1;
b[1]=1;
while (p--)
{
t=0;
for (i=1; i<=b[0]; i++)
{
b[i]=b[i]*2+t;
t=b[i]/10;
b[i]%=10;
}
if (t) b[++b[0]]=t;
}
}
void minus1(int b[lmax])
{
int i, t=1;
for (i=1; i<=b[0] && t; i++)
{
b[i]-=t;
if (b[i]<0)
{
b[i]+=10;
t=1;
} else t=0;
}
while (!b[b[0]]) b[0]--;
}
void suma(int b[lmax])
{
int i, t=0;
if (b[0]>sol[0]) sol[0]=b[0];
for (i=1; i<=sol[0]; i++)
{
sol[i]+=b[i]+t;
t=sol[i]/10;
sol[i]%=10;
}
if (t) sol[++sol[0]]=t;
}
void dif(int b[lmax])
{
int i, t=0;
for (i=b[0]+1; i<=sol[0]; i++) b[i]=0;
for (i=1; i<=sol[0]; i++)
{
sol[i]-=b[i]+t;
if (sol[i]<0)
{
sol[i]+=10;
t=1;
} else t=0;
}
while (!sol[sol[0]]) sol[0]--;
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%d",&n);
int i, d, ok, j, c;
for (i=1; i<=n; i++) scanf("%d",&v[i]);
for (d=2; d<=l; d++)
{
ok=1;
for (c=2; c*c<=d; c++)
if (!(d%c))
{
ok=0;
break;
}
if (ok)
for (i=1; i<=n; i++)
if (!(v[i]%d))
{
t[++h]=d;
break;
}
}
for (d=2; d<=l; d++)
for (i=1; i<=n; i++)
if (!(v[i]%d)) a[d]++;
for (i=2; i<=l; i++)
{
put(b[i], a[i]);
minus1(b[i]);
}
put(sol, n);
minus1(sol);
g[1]=1;
int y;
for (c=1; c<6; c++)
{
for (j=1; j<=l; j++)
{
f[j]=g[j];
g[j]=0;
}
for (i=1; i<=h; i++)
for (j=2; j<=l; j++)
if (j/t[i]*t[i]==j && f[j/t[i]] && (j/t[i])%t[i] && !g[j])
{
g[j]=1;
if (c%2) dif(b[j]); else suma(b[j]);
}
}
if (!sol[0])
{
sol[0]=1;
sol[1]=0;
}
for (i=sol[0]; i>0; i--) printf("%d",sol[i]);
}