Pagini recente » Cod sursa (job #674220) | Cod sursa (job #2133874) | Cod sursa (job #1725189) | Cod sursa (job #1760971) | Cod sursa (job #1235927)
#include<stdio.h>
const int NMAX = 505, VALMAX = 1001, NCIF = 40, BASE = 1e9;
class HUGE {
public:
int c[NCIF];
void operator = (int n) {
c[0] = 0;
do {
c[ ++c[0]] = n % BASE;
n /= BASE;
}while(n);
}
void operator += (const HUGE &other) {
int i, t;
if(other.c[0] > c[0])
c[0] = other.c[0];
t = 0;
for(i = 1; i <= c[0]; ++ i) {
c[i] += other.c[i] + t;
t = c[i] / BASE;
c[i] %= BASE;
}
while(t) {
c[++ c[0]] = t % BASE;
t /= BASE;
}
}
void print() {
int i;
printf("%d", c[c[0]]);
for(i = c[0] - 1; i >= 1; -- i)
printf("%09d", c[i]);
}
} d[NMAX][VALMAX];
int x[NMAX];
int gcd (int a, int b) {
if(!b) return a;
return gcd(b, a % b);
}
int main() {
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
int res, n, i, j;
scanf("%d", &n);
for(i = 1; i <= n; ++ i)
scanf("%d", &x[i]);
for(i = 1; i <= n; ++ i) {
d[i][x[i]] = 1;
for(j = 1; j < VALMAX; ++ j) {
d[i][gcd(j, x[i])] += d[i - 1][j];
d[i][j] += d[i- 1][j];
}
}
d[n][1].print();
return 0;
}