Pagini recente » Cod sursa (job #2219957) | Cod sursa (job #2277745) | Cod sursa (job #852502) | Profil casiann | Cod sursa (job #2123464)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int d[3][1005][35];
const int MOD = 1000000000;
inline void Add(int A[], int B[]){
A[0] = max(A[0], B[0]);
int t = 0;
for(int i = 1; i <= A[0] ; ++i){
A[i] = A[i] + B[i] + t;
t = A[i] / MOD; A[i] %= MOD;
}
if(t > 0) A[++A[0]] = t;
}
inline int cmmdc(int x, int y){
while(y > 0){
int r = x % y;
x = y; y = r;
}
return x;
}
int main()
{
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
scanf("%d", &n);
int x;
scanf("%d", &x);
d[1][x][0] = 1; d[1][x][1] = 1;
int l = 1;
for(int i = 2; i <= n ; ++i){
scanf("%d", &x);
l = 1 - l;
memset(d[l], 0, sizeof(d[l]));
d[l][x][0] = 1; d[l][x][1] = 1;
for(int j = 1; j <= 1000 ; ++j)
Add(d[l][cmmdc(x, j)], d[1 - l][j]);
for(int j = 1; j <= 1000 ; ++j)
Add(d[l][j], d[1 - l][j]);
}
if(d[l][1][0] == 0){
printf("0");
return 0;
}
printf("%d", d[l][1][d[l][1][0]]);
for(int i = d[l][1][0] - 1; i >= 1 ; --i){
int aux = d[l][1][i];
while(aux < MOD / 10) printf("0"), aux *= 10;
printf("%d", d[l][1][i]);
}
return 0;
}