Pagini recente » Cod sursa (job #2268973) | Cod sursa (job #571007) | Cod sursa (job #1711429) | Cod sursa (job #338033) | Cod sursa (job #1132632)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
class huge {
private:
static const int BASE=1000000000;
static const int MAX_SIZE=155;
int a[MAX_SIZE];
public:
huge() {
memset(a,0,sizeof(a));
}
huge(int val) {
memset(a,0,sizeof(a));
a[0]=1;
a[1]=val;
}
inline int size() {
return a[0];
}
inline int operator[](const unsigned int poz) {
return a[poz];
}
huge operator =(huge &b) {
for(int i=0;i<=max(a[0],b[0]);i++) {
a[i]=0;
a[i]=b[i];
}
return *this;
}
huge operator +=(huge &b) {
int t = 0, i;
for(i=1;i<=a[0] || i<=b[0] || t;++i) {
t+=a[i]+b[i];
a[i]=t%BASE;
t/=BASE;
}
a[0]=i-1;
return *this;
}
};
void print(huge &x) {
printf("%d",x[x.size()]);
for(int i=x.size();i>1;i--) {
printf("%09d",x[i]);
}
printf(" ");
}
const int MAX_N=510;
const int MAX_VAL=1010;
int gcd(int a,int b) {
while(b) {
int r=a%b;
a=b;
b=r;
}
return a;
}
huge d[2][MAX_VAL];
int c[MAX_VAL][MAX_VAL];
int v[MAX_N];
int main() {
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
huge unu(1);
for(int i=1;i<MAX_VAL;i++) {
for(int j=i;j<MAX_VAL;j++) {
c[i][j]=c[j][i]=gcd(i,j);
}
}
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d",&v[i]);
}
d[1][v[1]]=unu;
for(int i=2;i<=n;i++) {
int l=i&1;
for(int j=1;j<MAX_VAL;j++) {
d[l][j]=d[l^1][j];
}
for(int j=1;j<MAX_VAL;j++) {
d[l][ c[j][v[i]] ]+= d[l^1][j];
}
d[l][v[i]]+=unu;
}
print(d[n&1][1]);
return 0;
}