Pagini recente » Cod sursa (job #1648761) | Cod sursa (job #1603540) | Cod sursa (job #1511525) | Cod sursa (job #1981128) | Cod sursa (job #96636)
Cod sursa(job #96636)
#include <cstdio>
#include <cstring>
#define Nmax 1024
#define Lmax 32
#define BASE 1000000
int n, m = 1000;
int d[2][Nmax][Lmax];
int sir[Nmax];
int unu[Lmax];
int gcd(int a, int b)
{
if (b == 0)
return a;
else
return gcd(b, a % b);
}
void citire()
{
int i;
scanf("%d\n", &n);
for (i = 1; i <= n; ++i)
scanf("%d\n", &sir[i]);
}
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;
}
void scrie(int A[])
{
int i;
if (A[0] == 0)
{
printf("0\n");
return;
}
printf("%d", A[A[0]]);
for (i = A[0] - 1; i >= 1; --i)
printf("%.6d", A[i]);
}
void solve()
{
int i, j, step = 0;
unu[0] = unu[1] = 1;
for (j = 1; j <= n + 1; ++j, step = !step)
{
memcpy(d[!step], d[step], sizeof(d[step]));
for (i = 1; i <= m; ++i)
ADD(d[!step][gcd(sir[j], i)], d[step][i]);
ADD(d[!step][sir[j]], unu);
}
scrie(d[!step][1]);
}
int main()
{
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
citire();
solve();
return 0;
}