Pagini recente » Sedinta 2008-11-07 | Rating Andrei Cioc (andrei2408) | Cod sursa (job #161468) | Cod sursa (job #2188914) | Cod sursa (job #160832)
Cod sursa(job #160832)
#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("%9d", 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 = 1; i < n; i++)
{
now = !now;
add(c[now][a[i]], aux);
for(int j = 0; j <= 1000; j++) memset(c[!now][j], 0, sizeof(c[!now][j]));
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;
}