Pagini recente » Cod sursa (job #1761523) | Cod sursa (job #979456) | Cod sursa (job #2276200) | Cod sursa (job #2467591) | Cod sursa (job #120)
Cod sursa(job #120)
#include <cstdio>
#include <string.h>
using namespace std;
#define Nmax 512
#define Rmax 1024
typedef int Huge[128];
const int base = 1000000000;
int n, v[Nmax];
Huge a[Rmax], b[Rmax], unu;
void readdata()
{
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &v[i]);
}
int cmmdc(int a, int b)
{
if (b == 0) return a;
return cmmdc(b, a%b);
}
void add(Huge A, Huge 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 solve()
{
int i, j, val;
unu[0] = 1; unu[1] = 1;
for (i = 1; i <= n; ++i)
{
add(b[v[i]], unu);
for (j = 1; j < Rmax; ++j)
if (a[j][0])
{
val = cmmdc(v[i], j);
add(b[val], a[j]);
}
for (j = 1; j < Rmax; ++j)
add(a[j], b[j]);
memset(b, 0, sizeof(b));
}
if (a[1][0] == 0) { printf("0"); return; }
printf("%d", a[1][a[1][0]]);
for (i = a[1][0]-1; i; --i)
{
if (a[1][i] < 100000000) printf("0");
if (a[1][i] < 10000000) printf("0");
if (a[1][i] < 1000000) printf("0");
if (a[1][i] < 100000) printf("0");
if (a[1][i] < 10000) printf("0");
if (a[1][i] < 1000) printf("0");
if (a[1][i] < 100) printf("0");
if (a[1][i] < 10) printf("0");
printf("%d", a[1][i]);
}
}
int main()
{
readdata();
solve();
return 0;
}