Pagini recente » Cod sursa (job #987661) | Cod sursa (job #1028995) | Cod sursa (job #279767) | Cod sursa (job #371484) | Cod sursa (job #355676)
Cod sursa(job #355676)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define FIN "indep.in"
#define FOUT "indep.out"
#define N 505
#define M 1005
#define NRCIF 200
int n , a[N], d[2][M][NRCIF], unu[NRCIF] = {1, 1};//[M];
int gcd(int i, int j)
{
if (!i || !j)
return i ? i : j;
return gcd(max(i, j) % min(i, j), min(i, j));
}
void add(int A[], int B[])
{
int i, t = 0;
for (i = 1; i <= A[0] || i <= B[0] || t; i ++, t /= 10)
A[i] = (t += A[i] + B[i]) % 10;
A[0] = i - 1;
}
int main()
{
int i, j;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &n);
for (i = 1; i <= n; ++ i)
scanf("%d", &a[i]);
for (i = 1; i < n; ++ i)
for (j = 1; j <= 1000; ++ j)
{
if (j == a[i])
add(d[i & 1][j], unu);
add(d[(i + 1) & 1][gcd(j, a[i + 1])], d[i & 1][j]);
add(d[(i + 1) & 1][j], d[i & 1][j]);
memset(d[i & 1][j], 0, sizeof(d[i & 1][j]));
}
add(d[n & 1][a[n]], unu);
if (d[n & 1][1][0] == 0)
printf("0");
for ( ; d[n & 1][1][0]; -- d[n & 1][1][0])
printf("%d", d[n & 1][1][d[n & 1][1][0]]);
printf("\n");
}