Pagini recente » Cod sursa (job #1133069) | Cod sursa (job #2168980) | Cod sursa (job #1590152) | Cod sursa (job #1572777) | Cod sursa (job #34946)
Cod sursa(job #34946)
#include <stdio.h>
#include <string.h>
#define BASE 1000;
const int N_MAX = 512;
const int C_MAX = 1024;
int v[N_MAX], cur[C_MAX][C_MAX], ant[C_MAX][C_MAX];
int unu[3];
void add(int A[], int B[])
{
int i, t = 0;
for (i = 1; i <= A[0] || i <= B[0] || t; i ++, t /= BASE) {
A[i] = (t += A[i] + B[i]) % BASE;
}
A[0] = i - 1;
}
int cmmdc(int a, int b)
{
if (b == 0) {
return a;
} else {
return (cmmdc(b, a % b));
}
}
int main()
{
freopen("indep.in", "r", stdin);
#ifndef _BLA_
freopen("indep.out", "w", stdout);
#endif
int N, i, MAX = 0;
scanf("%d\n", &N);
for (i = 1; i <= N; i ++) {
scanf("%d\n", &v[i]);
if (v[i] > MAX) {
MAX = v[i];
}
}
unu[0] = 1, unu[1] = 1;
int j;
for (i = 1; i <= N; i ++) {
add(cur[v[i]], unu);
for (j = 1; j <= MAX; j ++) {
add(cur[cmmdc(v[i], j)], ant[j]);
add(cur[j], ant[j]);
}
memcpy(ant, cur, sizeof(cur));
}
printf("%d", cur[1][0]);
for (i = cur[1][0] - 1; i >= 1; i --) {
printf("%08d", cur[1][i]);
}
return 0;
}