Pagini recente » Cod sursa (job #1598912) | Cod sursa (job #3253430) | Cod sursa (job #16962) | Cod sursa (job #1847058) | Cod sursa (job #2161867)
#include <fstream>
#define nmax 502
#define vmax 402
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
int v[nmax],val[vmax],aux[vmax],n,z,i,j,nr,nr1,nr2,maxim,l,r,ok,d[nmax][vmax],s[vmax],rez[vmax],h[nmax*2],h2[nmax*2];
void mul(int a[],int z,int b[])
{
int t=0,i;
for(i=1; i<=a[0]||t; i++,t/=10)
b[i]=(t+=a[i]*z)%10;
b[0]=i-1;
}
void sum(int a[],int b[])
{
int t=0,i;
for(i=1; i<=a[0]||i<=b[0]||t; i++,t/=10)
a[i]=(t+=a[i]+b[i])%10;
a[0]=i-1;
}
void sub(int a[],int b[])
{
int t=0,i;
for(i=1; i<=a[0]; i++)
{
a[i]=a[i]-b[i]-t;
if(a[i]>=0)
t=0;
else
{
a[i]+=10;
t=1;
}
}
while(a[0]>1&&a[a[0]]==0)
a[0]--;
}
int main ()
{
int i,j;
fin>>n;
for(i=1; i<=n; i++)
{
fin>>v[i];
maxim=max(maxim,v[i]);
}
fin.close();
for(i=2; i<=maxim; i++)
if(h[i]==0)
{
h2[++z]=i;
for(j=2*i; j<=maxim; j+=i)
h[j]=1;
}
d[0][0]=d[0][1]=1;
for(i=1; i<=n; i++)
mul(d[i-1],2,d[i]);
val[0]=val[1]=1;
for(i=0; i<=n; i++)
sub(d[i],val);
sum(rez,d[n]);
for(i=2; i<=maxim; i++)
{
l=i;
nr1=0;
r=0;
ok=1;
nr=0;
while(l!=1)
{
nr2=0;
r++;
while(l%h2[r]==0)
{
nr2++;
l/=h2[r];
}
if(nr2>1)
ok=0;
if(nr2!=0)
nr1++;
}
if(ok)
{
for(j=1; j<=n; j++)
{
if(v[j]%i==0)
nr++;
}
}
if(nr1%2==0)
sub(s,d[nr]);
else
sum(s,d[nr]);
}
sub(rez,s);
for(i=rez[0]; i>=1; i--)
fout<<rez[i];
fout.close();
return 0;
}