Pagini recente » Cod sursa (job #541384) | Cod sursa (job #699184) | Cod sursa (job #2139753) | Cod sursa (job #2616758) | Cod sursa (job #2648416)
#include <fstream>
using namespace std;
ifstream cin("indep.in");
ofstream cout("indep.out");
bool prime[510][510];
int loc[160], ans[160];
inline void inm(int A[], int B);
inline void scad(int A[], int B[]);
inline void print(int A[]);
int cmmdc(int a, int b)
{
if(b==0)
cout<<"ce ii pb asta";
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);
ans[1]--;
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);
for(int i=loc[0]; i>1; --i)
loc[i]=0;
}
print(ans);
return 0;
}
inline void print(int A[])
{
for(int i=A[0]; i; --i)
cout<<A[i];
cout<<'\n';
}
inline void inm(int A[], int B)
{
int 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(int A[], int B[])
{
int T=0;
for(int i=1; i<=A[0]; ++i)
{
A[i]=(A[i]-T-B[i]);
if(A[i]<0)
A[i]=A[i]+10, T=1;
else T=0;
}
while(!A[A[0]] && A[0]>1)
A[0]--;
}