Pagini recente » Cod sursa (job #853007) | Cod sursa (job #1060404) | Cod sursa (job #1626750) | Cod sursa (job #2830454) | Cod sursa (job #2521293)
#include <fstream>
using namespace std;
int a[510],x[1010],y[1010];
int p2[510][510],doi[510],sump[510],sumi[510];
int i,j,n,Max,nr,e,k,d,ok,p;
void scadere(int a[], int b[]){
int i, t=0;
for (i=b[0]+1;i<=a[0];)
b[i++]=0;
for (i=1;i<=a[0];i++) {
a[i]=a[i]-(b[i]+t);
if (a[i]<0) t=1;
else t=0;
if (t) a[i]+=10;
}
while (a[a[0]]==0) a[0]--;
}
void adunare (int a[],int b[],int c[]) {
int t=0,i;
for (i=1;i<=max(a[0],b[0]);i++) {
t+=a[i]+b[i];
c[i]=t%10;
t/=10;
}
c[0]=max(a[0],b[0]);
while (t) {
c[++c[0]]=t%10;
t/=10;
}
}
void inmultire (int a[],int b,int c[]) {
int t=0,i;
for (i=1;i<=a[0];i++) {
t+=a[i]*b;
c[i]=t%10;
t/=10;
}
c[0]=a[0];
while (t) {
c[++c[0]]=t%10;
t/=10;
}
}
int main() {
ifstream fin("indep.in");
ofstream fout("indep.out");
fin>>n;
for (i=1;i<=n;i++) {
fin>>a[i];
Max=max(Max,a[i]);
}
doi[0]=1;doi[1]=2;
p2[1][0]=1;p2[1][1]=1;
sump[0]=1;sump[1]=0;
sumi[0]=1;sumi[1]=0;
for (i=2;i<=n;i++) {
adunare(p2[i-1],doi,p2[i]);
inmultire(doi,2,doi);
}
for (i=2;i<=Max;i++) {
k=i;
d=2;
ok=1;
nr=0;
while (k>1) {
e=0;
while (k%d==0) {
k/=d;
e++;
}
if (e>=2) {
ok=0;
}
if (e==1) nr++;
d++;
}
if (ok==1) {
x[++p]=i;
y[p]=nr;
}
}
for (i=1;i<=p;i++) {
nr=0;
for (j=1;j<=n;j++) {
if (a[j]%x[i]==0) nr++;
}
if (y[i]%2==1) adunare(sump,p2[nr],sump);
else adunare(sumi,p2[nr],sumi);
}
scadere(sump,sumi);
scadere(p2[n],sump);
if (p2[n][0]<=0) fout<<0;
else {
for (i=p2[n][0];i>=1;i--) fout<<p2[n][i];
}
return 0;
}