Pagini recente » Cod sursa (job #2432244) | Cod sursa (job #1212366) | Cod sursa (job #3160133) | Cod sursa (job #398920) | Cod sursa (job #1903284)
#include <cstdio>
#include <cstdlib>
#include <cctype>
using namespace std;
FILE *fin = fopen("indep.in", "r");
FILE *fout = fopen("indep.out", "w");
#define MAX_N 500
#define CONST 1000
int N;
inline int gcd(int a, int b) {
int r;
while(b) {
r = a % b;
a = b;
b = r;
}
return a;
}
struct Number {
static const int Base = 1000000000;
static const int NR = 120;
int a[NR] = {0};
int ind = 1;
inline void add(Number b) {
int i, rest = 0;
for(i = 1;i <= a[0] || i <= b.a[0] || rest > 0;i++)
a[i] = (a[i] + b.a[i] + rest), rest = a[i] / Base, a[i] %= Base;
a[0] = i - 1;
}
inline void print() {
fprintf(fout, "%d", a[a[0]]);
for(int i = a[0] - 1;i > 0;i--)
fprintf(fout, "%.3d", a[i]);
}
};
Number dp[CONST + 1], one;
int main() {
fscanf(fin, "%d", &N);
int v;
one.a[0] = 1, one.a[1] = 1;
for(int i = 1;i <= N;i++) {
fscanf(fin, "%d", &v);
for(int j = 1;j <= CONST;j++) {
dp[gcd(j, v)].add(dp[j]);
}
dp[v].add(one);
}
dp[1].print();
fclose(fin);
fclose(fout);
return 0;
}