Pagini recente » Cod sursa (job #2145094) | Cod sursa (job #42398) | Cod sursa (job #2959189) | Cod sursa (job #797161) | Cod sursa (job #47302)
Cod sursa(job #47302)
#include <cstdio>
#include <cassert>
#include <string>
#define FIN "indep.in"
#define FOUT "indep.out"
#define NMAX 501
long long s1[2*NMAX], s2[2*NMAX];
int N, v[NMAX], max, unu[50];
void read ()
{
scanf ("%d", &N);
for (int i = 1; i <= N; ++ i)
{
scanf ("%d", &v[i]);
if (v[i] > max)
max = v[i];
}
}
int cmmdc (int a, int b)
{
int r;
do
{
r = a % b;
a = b;
b = r;
}
while (r != 0);
return a;
}
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;
}
void solve ()
{
int c;
unu[0] = unu[1] = 1;
for (int i = 1; i <= N; ++ i)
{
for (int j = 1; j <= max; ++ j)
{
c = cmmdc (j, v[i]);
if (c != j || v[i] == v[i-1])
s2[c] += s1[j] + s1[c];
else
s2[c] += s1[j];
}
++ s2[v[i]];
memcpy (s1, s2, sizeof (s2));
memset (s2, 0, sizeof (s2));
}
/*for (int i = s1[1][0]; i >= 1; -- i)
printf ("%d", s1[1][i]);
printf ("\n");*/
printf ("%lld\n", s1[1]);
}
int
main ()
{
freopen (FIN, "rt", stdin);
freopen (FOUT, "wt", stdout);
read ();
solve ();
return 0;
}