Pagini recente » Cod sursa (job #1474841) | Cod sursa (job #2269114) | Cod sursa (job #421050) | Cod sursa (job #1919703) | Cod sursa (job #460534)
Cod sursa(job #460534)
#include <cstdio>
#define nmax 510
#define l 1000
#define lmax 10000
int n, v[nmax], a[nmax], b[l+5], sol, t[nmax], h, f[l+5];
void put(int &b, int p)
{
int i, t;
b=1;
while (p--) b*=2;
}
void minus1(int b)
{
b--;
}
void suma(int b)
{
sol+=b;
}
void dif(int b)
{
sol-=b;
}
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);
f[1]=1;
for (i=1; i<=h; i++)
for (j=l; j>1; j--)
if (j/t[i]*t[i]==j && f[j/t[i]])
{
f[j]=f[j/t[i]]+1;
if ((f[j]-1)%2) dif(b[j]); else
suma(b[j]);
}
printf("%d",sol);
}