Pagini recente » Cod sursa (job #834884) | Cod sursa (job #1070802) | Cod sursa (job #2122431) | Cod sursa (job #2956256) | Cod sursa (job #2123107)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int d[3][1005][1005];
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] / 10; A[i] %= 10;
}
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) d[l][1][0] = 1;
for(int i = d[l][1][0]; i >= 1 ; --i)
printf("%d", d[l][1][i]);
return 0;
}