Pagini recente » Cod sursa (job #1542757) | Cod sursa (job #2332415) | Cod sursa (job #624589) | Cod sursa (job #2964327) | Cod sursa (job #774495)
Cod sursa(job #774495)
#include <cstdio>
using namespace std;
typedef long long int64;
const int N = 505;
const int NR = 1000;
const int NRC = 1000;
const int base = 1000000000;
int n, l;
int v[N], unu[NRC] = {1, 1};
int d[2][NR + 1][NRC];
void aduna(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)
{
return (b == 0) ? a : cmmdc(b, a % b);
}
void afiseaza(int a[])
{
printf("%d", a[a[0]]);
for (int i = a[0] - 1; i >= 1; --i)
printf("%.9d", a[i]);
}
void zero(int a[][NRC])
{
for (int i = 1; i <= NR; ++i) {
for (int j = 1; j <= a[i][0]; ++j)
a[i][j] = 0;
a[i][0] = 0;
}
}
int main()
{
freopen ("indep.in", "r", stdin);
freopen ("indep.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &v[i]);
for (int i = 0; i < n; ++i) {
l = 1 - l;
aduna(d[1 - l][v[i + 1]], unu);
for (int j = 1; j <= NR; ++j) {
aduna(d[1 - l][j], d[l][j]);
aduna(d[1 - l][cmmdc(v[i + 1], j)], d[l][j]);
}
zero(d[l]);
}
afiseaza(d[1 - l][1]);
return 0;
}