Pagini recente » Cod sursa (job #1248091) | Monitorul de evaluare | Cod sursa (job #675431) | Monitorul de evaluare | Cod sursa (job #2017587)
#include <stdio.h>
#include <stdlib.h>
#define C 3000
int v[501];
int log[501][C+1],rez[C+1],s[C+1];
void scad(int a[],int b[])
{
int i,o;
o=0;
for(i=C; i>0; i--)
{
a[i]=a[i]+10-b[i]-o;
o=1-a[i]/10;
a[i]%=10;
}
}
void add(int a[],int b[])
{
int i,o=0;
for(i=C; i>0; i--)
{
a[i]+=b[i]+o;
o=a[i]/10;
a[i]%=10;
}
}
int main()
{
long long nr=0;
int i,j,o,z,n,x,cmmdc,r,exp,ct,e,div;
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
log[0][C]=1;
for(i=1; i<501; i++)
{
for(j=1; j<=C; j++)
log[i][j]=log[i-1][j];
o=0;
for(j=C; j>0; j--)
{
z=log[i][j]*2+o;
o=z/10;
z%=10;
log[i][j]=z;
}
}
scanf("%d",&n);
for(i=1; i<=n; i++)
scanf("%d",&v[i]);
for(i=1; i<=C; i++)
rez[i]=log[n][i];
nr=-1;
for(i=2; i<=1000; i++)
{
z=0;
for(j=1; j<=n; j++)
if(v[j]%i==0)
z++;
x=i;
div=2;
exp=0;
ct=1;
while(div*div<=x)
{
e=0;
while(x%div==0)
e++,x/=div;
if(e>1) ct=0;
if(e>0) exp++;
div++;
}
if(x>1) exp++;
if(ct && z)
{
if(exp%2==1) scad(rez,log[z]),nr++;
else add(rez,log[z]),nr--;
}
}
if(nr>0)
{
for(i=C; i>0 && nr; i--)
{
s[i]=nr%10;
nr/=10;
}
add(rez,s);
}
else
{
nr=abs(nr);
for(i=C; i>0 && nr; i--)
{
s[i]=nr%10;
nr/=10;
}
scad(rez,s);
}
for(i=1; i<=C && rez[i]==0; i++);
if(i<=C) while(i<=C) printf("%d",rez[i++]);
else printf("0\n");
return 0;
}