Pagini recente » Cod sursa (job #928757) | Cod sursa (job #2115557) | Cod sursa (job #637667) | Cod sursa (job #2340858) | Cod sursa (job #2648430)
#include <fstream>
#define LL long long
using namespace std;
ifstream cin("indep.in");
ofstream cout("indep.out");
bool prime[510][510];
LL loc[200], ans[200];
inline void scad(LL A[], LL B[]);
inline void inm(LL A[], int B);
inline void print(LL A[]);
int cmmdc(int a, int b)
{
int r=a%b;
while(r)
{
a=b; b=r; r=a%b;
}
return b;
}
int main()
{
int N, v[501];
cin>>N;
for(int i=1; i<=N; ++i)
cin>>v[i];
for(int i=1; i<N; ++i)
for(int j=i+1; j<=N; ++j)
prime[i][j]=(cmmdc(v[i],v[j])==1);
ans[0]=ans[1]=1;
for(int i=1; i<=N; ++i)
inm(ans,2);
LL unu[2];
unu[0]=unu[1]=1;
scad(ans,unu);
for(int i=1; i<=N; ++i)
{
loc[0]=loc[1]=1;
for(int j=i+1; j<=N; ++j)
if(!prime[i][j])
inm(loc,2);
scad(ans,loc);
}
print(ans);
return 0;
}
inline void print(LL A[])
{
for(int i=A[0]; i; --i)
cout<<A[i];
cout<<'\n';
}
inline void inm(LL A[], int B)
{
LL T=0;
for(int i=1; i<=A[0]; ++i)
{
A[i]=A[i]*B+T;
T=A[i]/10;
A[i]=A[i]%10;
}
while(T)
{
A[++A[0]]=T%10;
T=T/10;
}
}
inline void scad(LL A[], LL B[])
{
LL T=0;
for(int i=1; i<=A[0] && !(i>B[0] && T==0); ++i)
{
if(i<=B[0])
A[i]=(A[i]-T-B[i]);
else A[i]=A[i]-T;
if(A[i]<0)
A[i]=A[i]+10, T=1;
else T=0;
}
while(!A[A[0]] && A[0]>1)
A[0]--;
}