Cod sursa(job #380606)

Utilizator indestructiblecont de teste indestructible Data 6 ianuarie 2010 21:43:20
Problema Indep Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#define NMAX 501
#define PMAX 1001
int n,v[NMAX],rez_f,div[NMAX],r;
char c[PMAX],marc[PMAX];
void ciur()
{
	int i,j;
	for (i=2; i*i<=1000; i++)
		if (c[i]==false)
            for (j=i*i; j<=1000; j+=i)
				c[j]=true;				
	for (i=2; i<=1000; i++)
		if (!c[i]) 
		{
			div[++r]=i;
			marc[i]=1;
		}
}
void read()
{
	scanf("%d",&n);
	int i;
	for (i=1; i<=n; i++)
		scanf("%d",&v[i]);
}
void update (int x,int y)
{
	int i,nr=0;
	for (i=1; i<=n; i++)
		if (v[i]%x==0)
			nr++;
	if (y & 1)
		rez_f+=(1<<nr)-1;
	else
		rez_f-=(1<<nr)-1;
}
void solve()
{
	int i,j,x,nr;
	char flag;
	for (i=2; i<=1000; i++)
	{
		x=i;  nr=0; flag=0;
		for (j=1; j<=r; j++)
			if (x%div[j]==0)
			{
				nr++;
				while (x%div[j]==0)
				{
					x/=div[j];
					if (x%div[j]==0)
						flag=1;
				}
			}
		if (!flag)
			update (i,nr);
	}
}
int main()
{
	freopen("indep.in","r",stdin);
	freopen("indep.out","w",stdout);
	ciur();
	read();
	solve();
	printf("%d\n",(1<<n)-1-rez_f);
	return 0;
}