Pagini recente » Cod sursa (job #839874) | Cod sursa (job #749528) | Cod sursa (job #433330) | Cod sursa (job #2883225) | Cod sursa (job #2102420)
#include <cstdio>
#include <vector>
#include <iostream>
#define BAZA 1000000000
#define MAXN 1001
using namespace std;
typedef int HUGE[150];
int v[500];
HUGE two[500],one={1,1},rez;
inline void adun(HUGE a,HUGE b,char semn)
{
int t=0;
a[0]=max(a[0],b[0]);
for(int i=1;i<=a[0];i++)
{
a[i]+=(b[i]+t)*semn;
t=a[i]/BAZA;a[i]%=BAZA;
}
if(t)
a[++a[0]]=t;
if(!a[a[0]])
a[0]--;
}
inline void atrib(HUGE a,HUGE b)
{
int nr=b[0];
for(int i=0;i<=nr;i++)
a[i]=b[i];
}
inline bool desc(int x,int &nr,int &prod)
{
int d=2;
while(d*d<=x)
{
if(x%d==0)
{
prod*=d;x/=d;nr++;
if(x%d==0)
return false;
}
d++;
}
if(x>1)
prod*=x,nr++;
return true;
}
int main()
{
FILE *fin,*fout;
fin=fopen("indep.in","r");
fout=fopen("indep.out","w");
int n,maxim=0,nr,co,prod;
char semn;
fscanf(fin,"%d",&n);
for(int i=0;i<n;i++)
{
fscanf(fin,"%d",&v[i]);
maxim=max(maxim,v[i]);
}
two[0][0]=1;two[0][1]=2;
for(int i=1;i<n;i++)
{
atrib(two[i],two[i-1]);
adun(two[i],two[i-1],1);
}
for(int i=0;i<n;i++)
adun(two[i],one,-1);
atrib(rez,two[n-1]);
for(int i=2;i<=maxim;i++)
{
prod=1;co=nr=0;
if(desc(i,nr,prod))
{
for(int j=0;j<n;j++)
if(v[j]%prod==0)
co++;
if(nr&1)
semn=-1;
else
semn=1;
adun(rez,two[co-1],semn);
}
}
fprintf(fout,"%d",rez[rez[0]]);
for(int i=rez[0]-1;i>0;i--)
fprintf(fout,"%d",rez[i]);
fclose(fin);
fclose(fout);
return 0;
}