Pagini recente » Cod sursa (job #719798) | Cod sursa (job #2705890) | Cod sursa (job #282212) | Cod sursa (job #1160514) | Cod sursa (job #347509)
Cod sursa(job #347509)
#include <cstdio>
#include <algorithm>
using namespace std;
#define FIN "indep.in"
#define FOUT "indep.out"
#define N 505
#define M 1005
#define NRCIF 100
int n , a[N], d[N][M][NRCIF];//[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)
d[i][a[i]][0] = d[i][a[i]][1] = 1;
for (i = 1; i < n; ++ i)
for (j = 1; j <= 1000; ++ j)
{
add(d[i + 1][gcd(j, a[i + 1])], d[i][j]);
add(d[i + 1][j], d[i][j]);
}
if (d[n][1][0] == 0)
printf("0");
for ( ; d[n][1][0]; -- d[n][1][0])
printf("%d", d[n][1][d[n][1][0]]);
printf("\n");
}