Pagini recente » Cod sursa (job #1198092) | Cod sursa (job #419536) | Cod sursa (job #2968572) | Cod sursa (job #1635087) | Cod sursa (job #1903306)
#include <stdio.h>
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 {
#define Base 1000000000
#define NR 120
int a[NR] = {0};
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, "%.9d", 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;
}