Pagini recente » Cod sursa (job #1976288) | Cod sursa (job #78691) | Cod sursa (job #2682605) | Cod sursa (job #1973687) | Cod sursa (job #1665143)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
#define mp make_pair
#define pb push_back
#define ll long long
#define maxN 1024
#define maxDim 177
#define def 1000
struct big_num {
int dim;
int data[maxDim];
void init() {
memset(data, 0, sizeof(data));
dim = 1;
}
void operator+=(const big_num& who) {
dim = max(dim, who.dim);
for (int i = 1; i <= dim; i++) {
data[i] += who.data[i];
data[i + 1] += data[i] / 10;
data[i] %= 10;
}
if (data[dim + 1]) dim++;
}
void print() {
for (int i = dim; i > 0; i--)
printf("%d", data[i]);
}
};
int n, i, j, x;
int ss, dd;
big_num work[2][maxN];
big_num one;
int gcd(int a, int b) {
if (a < b) swap(a, b);
while (b) {
a %= b;
swap(a, b);
}
return a;
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
ss = 0; dd = 1;
for (i = 1; i <= def; i++) work[ss][i].init();
one.init();
one.data[1] = 1;
scanf("%d", &n);
for (i = 1; i <= n; i++) {
scanf("%d", &x);
for (j = 1; j <= def; j++)
work[dd][j] = work[ss][j];
for (j = 1; j <= def; j++)
work[dd][ gcd(j, x) ] += work[ss][j];
work[dd][x] += one;
swap(ss, dd);
}
work[ss][1].print();
return 0;
}