Pagini recente » Cod sursa (job #1462595) | Cod sursa (job #3287546) | Cod sursa (job #21449) | Cod sursa (job #1617889) | Cod sursa (job #160838)
Cod sursa(job #160838)
#include <stdio.h>
#include <string.h>
#define nmax 505
#define vmax 1005
#define lmax 105
#define baza 1000000000
int n, now;
int a[nmax], aux[lmax];
int c[2][vmax][lmax];
int cmmdc(int a, int b)
{
if(b == 0) return a;
else return cmmdc(b, a % b);
}
void add(int A[], int B[])
{
int i, t = 0;
for(i = 1; i <= A[0] || i <= B[0] || t; i++, t /= baza)
A[i] = (t += A[i] + B[i]) % baza;
A[0] = i - 1;
}
void show(int A[])
{
printf("%d", A[A[0]]);
for(int i = A[0] - 1; i >= 1; i--) printf("%09d", A[i]); printf("\n");
}
int main()
{
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
scanf("%d", &n); aux[0] = aux[1] = 1;
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
now = 0;
for(int i = 0; i <= 1000; i++) c[1][i][0] = 1, c[1][i][1] = 0;
for(int i = 1; i <= n; i++)
{
now = !now;
add(c[now][a[i]], aux);
if(i == n) break;
for(int j = 0; j <= 1000; j++)
{
memset(c[!now][j], 0, sizeof(c[!now][j]));
c[!now][j][0] = 1, c[!now][j][1] = 0;
}
for(int j = 0; j <= 1000; j++)
if(c[now][j] != 0)
{
add(c[!now][j], c[now][j]);
add(c[!now][cmmdc(j, a[i + 1])], c[now][j]);
}
}
show(c[now][1]);
return 0;
}